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의 취약점을 이용한 간단한 문제였다.

 

728x90

 

ereg로 admin을 필터링하고 있다. 그러나 ereg는 대소문자를 구분한다. 그래서 요즘은 preg_match를 쓰게 되어있다. 하여튼 그래서 문제를 풀자면 php는 대소문자를 구분하지 않는다. 그러니 그냥 ADMIN으로 써버리면 된다. ?id=ADMIN으로 써보자. 물론 aDmin이런식으로 써도 상관은 없다.

 

 

역시 풀렸다. 누구나 알만한 ereg의 취약점을 이용한 간단한 문제였다. 

728x90

 

아.... pw까지 일치해야 풀린다.ㅜㅜ 또 blind sql injection이다. 번호는 기억안나지만 이름은 확실히 기억나는 orc문제와 거의 똑같다. 여기서는 그대신 or이 필터링된다. 아 그래서 앞선 문제들에서 그런식으로 ||를 강조했었구나..... 역시 문제 구성이 알찬 것 같다. 일단 풀어보자. orc문제처럼 길이를 일단 대충 알아보자.

 

 

일단 역시 pw의 길이는 10보다 작았다. 5보다 작은지 알아보자.

 

 

5보다는 크다. 그럼 또 중간인 7보다 작은지 알아보자.

 

 

 

 

아........ 아까랑 똑같이 pw의 길이가 8이다. 미리 넣어볼걸 그랬다ㅜㅜ 일단 길이를 알았으니 또 코딩을 해보자. 그런데 생각해보니 굳이 새로 할 필요가 없다. 그냥 아까 orc의 코드에서 or를 ||로 바꾸어주고 and를 %26%26으로 바꾸어만 주면 된다. and를 &&라고 안쓰고 저렇게 쓴 이유는  그냥 쓰면 url schema라고 인식하기 때문이다. 그렇게 바꾸고 돌려보자.

 

 

저렇게 나온다. 그럼 ?pw=6c864dec라고 쓰자.

 

 

역시 풀렸다. 이것도 기본적인 blind sql injection문제에서 살짝 늘어난 꼴이였다.

 

+ Recent posts