파라미터는 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함수를 사용하면
깔끔ㅋ
아래는 사용한 스크립트