728x90

 

이 문제도 그냥 풀렸다......

728x90

 

아무것도 안했는데 풀렸다. 문제에 취약점이 발견된것같다.

728x90

아까 풀었던 21번 문제와 거의 똑같다. 그냥 필터링이 좀더 들어간것 같다. 그리고 오류 메세지를 출력하지 않는다. 그러나 화면에 진짜 아무런 값도 출력하지 않기때문에 이걸 이용해서 코딩을 해보자.

 

 

pw가 나왔다. ?pw=5a2f5d3c를 이제 쳐보자.

 

문제가 풀렸다. 이건 21번 문제를 풀었으면 쉽게 풀수있을것이다.

728x90

 

소스 코드를 보면 error가 발생했을때 쿼리문을 출력시키는것을 볼수있다. 그리고 싱글쿼터를 필터링하지도 않는다. 이러면 우리는 error based sql injection을 시도해볼수있다. 확실히 쓸수있는지 알아보기위해 에러를 내보자.

 

 

역시 에러문을 그대로 출력해준다. 이렇게되면 이 문제는 거의 error based sql injection이라고 볼수있다. 오류가 나는지 안나는지 여부를 확인하는 코드를 짜서 문제를 풀어보자.

 

 

pw가 나왔다. 이때까지와는 뭔가 달라보인다. 일단 ?pw=!!!!를 쳐보자.

 

 

풀렸다. 답이 좀 그렇긴 해도 오랜만에 보는 error based sql injection이라서 신선했다.

 

 

 

728x90

 

소스 코드를 보면 id='guest'뒤에 #로 주석처리가 되어있다. #는 한줄주석이라서 그냥 개행문자를 써주고 뒤에 admin으로 pw를 맞춰주면 될것같다. 쿼리를 짜보면 ?pw=%0a and 0 or id='admin'%23이 나온다. 이제 넣어보자.

 

역시 풀리게 된다. 이건 #으로 인한 주석처리를 어떻게 피할것인지 묻는 기본적인 문제였다. 

728x90

 

오랜만에 blind sql injection문제이다. regex와 like를 필터링 하고 있다. 일단 그건 그렇다 치고 pw의 길이부터 구해보자.

 

 

 

?pw='||length(pw)<20%23을 넣었는데 거짓이라고 뜬다.

 

 

?pw='||length(substr(pw,1,1))=4%23를 넣어보면 참이 뜬다. 한글자당 4바이트인걸 보면 유니코드같다. 유니코드이므로 ascii말고 ord를 이용해서 풀어야겠다. 코딩을 해봤다.

 

 

이렇게 나왔다. 이제 이 10진수를 16진수로 바꾸고 유니코드로 보자.

 

 

이렇게 나왔다. 이제 저 값을 넣어보자. ?pw=¸ùÅ°ÆÐÄ¡¤»라고 치면 될것같다.

 

풀리게 되었다. 이건 유니코드인지 알아차리는게 중요할것같다.

 

 

 

 

 

 

 

728x90

 

소스 코드를 보면 pw의 길이가 6보다 크면 안되고 #와 --등 모든 주석을 필터링하고 있다. 그런데 보면 ;%00은 필터링 하지 않는것으로 보인다. 이제 쿼리를 짜보면 ?pw=')=0;%00으로 써주면 될것같다. %23이 필터링 되니 ;%00으로 바꿔서 써준것이다. 한번 넣어보자.

 

 

역시 풀렸다. ;%00을 아는지 묻는 문제인것같다.

728x90

 

이번 문제는 바로 앞 16번 문제의 ereg를 preg_match로 바꿔준 문제이다. 이렇게 되면 \를 이용하면 된다.  \를 이용하여 '를 문자열 취급해주는것이다. 이 문제에서는 ?id=\를 쳐보자.

 

 

이렇게 나오게 된다. 여기서 '\' and pw='가 한개의 문자열로 취급이 된다. 그래서 그걸 이용해서 쿼리를 짜보면 ?id=\&pw= or 1=1%23라고 볼수있다.

 

 

그러면 이렇게 풀리게 된다.

 

728x90

 

싱글쿼터를 ereg로 필터링 하고 있다. 아까도 말했지만 ereg는 취약점이 있어서 현재 쓰이지 않고 있다. 그 취약점중 하나가 앞에 %00이 있으면 탐색을 종료한다는 것이다. 그래서 그냥 ?pw=%00' or '1'='1로 하면 될것이다.

 

 

역시 풀렸다. 이건 ereg의 취약점을 알고있는지 물어보는 문제같다.

728x90

이 문제도 blind sql injection문제이다. 이것을 쉽게 풀기위해서는 %를 이용하는 것이다. like 'abc%'는 abc로 시작되는 모든값을 찾아내고 like '%abc'는 abc로 끝나는 모든값을 찾아내고 like '%abc%'는 abc가 들어있는 모든값을 찾아낸다. 그래서 일단 그냥 pw=%를 해보자.

 

 

Hello guest가 출력되는것으로 봐서 guest와 admin의 pw중 겹치는 부분이 있다. 그럼 코딩을 한번해보자.

 

 

pw가 나왔다. 그럼 ?pw=832edd10을 쳐보자.

 

 

역시 풀렸다. 앞선 blind sql injection에 비해서는 쉬운 문제였다.

 

+ Recent posts