write-up/webhacking.kr

21번

범고래_1 2016. 3. 29. 02:40



파라미터는 no, id, pw이다.

폼을 통해 제출하는 파라미터는 no이다.

이 문제는 소스를 안 보여준다. 쿼리를 유추해야 하는데, 여러 가지 해보면서 유추해보면

select * from ~ where no={$_GET[no]} or id='{$_GET[id]}' and pw='{$_GET[pw]}'

이다.


no가 1 일 때 guest/guest이고

no가 2 일 떄 admin/???? 이다.

admin의 패스워드를 알아내야 한다.


우선 length함수로 길이를 뽑아낸다.

?no=2 and length(pw)=19


이제 한 글자씩 뽑는다.

mid(pw,1,1)

ord(mid(pw,1,1))

이런 식으로 아스키 범위에서 알아내면 되는데, 너무 오래걸린다. (아스키범위 32~127)

이진수로 뽑으면 한 글자당 7회의 쿼리만으로 알아낼 수 있다.

bin(ord(mid(pw,1,1)))

이걸 다시 앞에서부터 잘라주면 1 또는 0이 되므로 참/거짓 판별 가능

mid(bin(ord(mid(pw,1,1))),1,1)


아스키가 127일 경우에 01111111 이다.

앞의 0은 어쩌피 안 나오므로 7회의 쿼리로 추출 가능. 아래 사진 참조





파이썬으로 자동화 돌릴 때, 보기 편하게 하기 위해

char = '1100010'라 하면

int(char, 2)    # char를 2진수에서 10진수로

chr(int(char, 2))    # 아스키를 문자열로


아무튼 이런 식으로 바이너리로 뽑으면 훨씬 빨리 뽑을 수 있다.



chr함수를 사용하면



깔끔ㅋ




아래는 사용한 스크립트


'write-up > webhacking.kr' 카테고리의 다른 글

35번  (0) 2016.04.06
50번  (0) 2016.03.29
49번  (0) 2016.03.29
46번  (0) 2016.03.28
18번  (0) 2016.03.28