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에 비해서는 쉬운 문제였다.

 

728x90

shit의 길이가 1을 넘으면 안된다. 즉, 무조건 1이여야 한다는 것이다. 그리고 필터링 안되있는 것을 넣어줘야된다. 보면 %20, %0a, %0d, %09가 필터링 되어있다. 그러면 그냥 %0b를 써주면 될것같다. 그럼 쿼리는 ?shit=%0b이다. 넣어보자.

 

 

역시 풀렸다. 간단한 문제였다.

728x90

아까전 문제를 보고 필터링이 많다고 했으면 안됬다. 이번건 더 많아졌다. usbstr, ascii, or, and, like, 0x, 공백등 이 필터링되고있다. or의 필터로 ord도 사용할수없다. 이것도 어짜피 pw의 길이는 0일테지만 일단 그것도 구해야된다. 이제 필터링이 많아져서 손으로 넣기 귀찮아졌다. 한꺼번에 코딩해보자.

 

 

일단 저렇게 나왔다. 그럼 또 ?pw=735c2773을 쳐보자.

 

 

풀렸다. 필터링이 너무 많아서 조금 복잡했지만 다 대체할것들이 있어서 그렇게 어렵지는 않았다.

728x90

또 blind sql injection이다. 그런데 싱글쿼터랑 ascii를 쓰지 못한다. =랑 substr도 못쓰는것같다. 그럼 numeric injection를 한번 시도해보자. 일단 pw의 길이부터 알아보자. 물론 이번에도 8을 넣어보자. ?pw=a&no=1 or id like "admin" %26%26 length(`pw`) like "8"요런식으로 넣어야될것이다.

 

 

역시 pw의 길이는 8이 맞았다. 그럼 이제 코드를 작성해야될것이다. 이건 전에 했던거 쓸려고 했는데 잘못건드려서 그냥 새로 짜느라 시간이 좀 걸렸다.

 

 

어쨌든 비밀번호가 나왔고 ?pw=1c62ba6f로 풀어보자.

 

풀렸다. 꽤 까다로운 문제였다. 너무 필터링을 많이 하는 blind sql injection문제였다.

 

 

 

728x90

 

이 문제 또한 blind sql injection으로 푸는 문제이다. 그런데 blind sql injection의 핵심인 substr 함수가 필터링 되고 있다. 그럼 못푸는거 아니냐고 할수 있지만 mid라는 함수가 substr와 기능이 똑같다. 아니면 substr를 substring으로 쓰면된다. 그럼 일단 pw의 길이부터 알아보자. 저번에 당한게 있으니 일단 바로 8을 넣어보자.

 

 

?pw=a'||length(pw) like 8%23이렇게 페이로드를 짜주었다. 필터링이 늘어날수록 더욱더 귀찮아 진다. 그래도 역시 이번에도 pw의 길이가 8이니 다행이다. 이제 또 코딩을 하자.

 

 

그럼 이제 pw를 넣어보자. ?pw=88e3137f를 넣어보자.

 

문제가 풀렸다.  이번건 다른문제들에 비해 시간이 좀 걸린것같다.

 

 

 

 

728x90

 

이 문제는 굉장히 단순한것같다. 그냥 뒤에 1=0 저걸 주석처리하면 바로 풀릴것같다. 그럼 ?pw='||id='admin'%23를 쳐보자.

 

역시 풀렸다. 그냥 주석처리를 할수있는지 물어보는 문제같다.

 

 

728x90

이 문제도 앞선 문제랑 비슷한 형식으로 풀수있다. str_replace를 이용해 admin을 필터링하는데 str_replace 또한 대소문자를 구분한다. 그래서 똑같이 ?id=ADMIN으로 풀수있다.

 

 

그러나 이 문제는 이렇게 풀어라고 낸 문제는 아닐것이다. 일단 str_replace의 취약점은 저것말고 또 있는데 바로 한번만 실행된다는 것이다. 그럼 ?id=adadminmin이라고 해도 풀리게 되는 것이다.

 

 

그러면 이렇게 풀리게 된다. 이것도 누구나 알고 있는 str_replace의 취약점을 이용한 간단한 문제였다.

 

+ Recent posts