본문 바로가기

 

45번 문제에요.

배점은 550점, 분야는 DB에요.

 

 

SQL Injection 을 하래요.

 

 

그냥 바로 엔터를 눌러보면

hi guest

가 뜨네요.

 

소스보기를 눌러보면

 

 

 

admin select limit pw = < >

를 사용할수 없고, pwmd5() 를 통해 해시로 바껴버리네요.

그러니 인잭션 포인트는 id 인데...

 

여기서 주목해야 할부분은

addslashes()

mb_convert_encoding()

이에요.

 

addslashes() 함수는 ' " 앞에 \ 를 붙여주는 함수이고,

mb_convert_encoding() 함수는 문자열의 인코딩을 바꿔주는 함수인데

 

mb_convert_encoding 때문에 문자열이 멀티바이트 환경으로 바껴버리고

멀티바이트 환경에서 \ 앞에 0xa1 ~ 0xfe 가 들어와버리면

인코딩이 깨지면서 하나의 문자로 취급하게되요. 

 

 

그러니 %aa%27 을 사용해서 ' 를 닫아주고

= 를 사용할수 없으니 like 를,

'를 쓸수 없으니 16진수로 우회해서

select id from chall45 where id=꩜' or id like 0x61646d696e#' and pw=md5('guest')

가 되도록 해주면?

 

 

빠밤!

 

문제가 풀렸네요.

댓글