반응형
webhacking.kr old 51번 문제풀이(Writeup)
문제를 들어가면 위와 같이 출력된다. 밑에 코드가 있으니 확인해보자.
id, pw는 post 메소드로 움직인다. 또 id는 입력값에 싱글 쿼터, 더블 쿼터, \(백슬래시), NULL바이트 앞에 \(백슬래시)를 넣어서 SQL Injection을 방어한다. pw는 md5로 암호화한다. 그래서 맞으면 해결이 되고, 아니면 Wrong을 출력한다.
여기서 처음보는 부분은 md5함수에서 true 값이 들어가 있는 것이다. 찾아보니 md5( __, true)인 경우 값이 raw binary로 출력된다고 한다.
따라서 md5( __, true)를 이용해 or 또는 =이 나오도록 해서 입력하는 것이다. 그럼 코드로 작성해서 md5에 어떤 값을 넣으면 '='이 나오는지 확인해보자. '='는 ascii코드로 \x27\x3d\x27이다.
import hashlib
for i in range (1000000, 2000000):
md5_hash = md5(str(i).encode("ascii")).digest() #str(i)를 raw_binary로 변경
if(b'\x27\x3d\x27' in md5_hash):
print(str(i) +' : ' + str(md5_hash))
위와 같은 코드를 실행하면 컴퓨터가 조금 아파하지만 '='이 나오는 md5 값을 찾을 수 있다.
찾은 값을 pw에 넣고 id엔 admin을 넣어서 로그인을 시도했다.
성공 메시지가 출력된다.
md5( ___, true)를 이용한 SQL Injection은 처음 해봐서 흥미로웠다.
728x90
'웹해킹 > webhacking.kr' 카테고리의 다른 글
webhacking.kr old 59번 문제풀이(Writeup) (0) | 2022.10.28 |
---|---|
webhacking.kr old 61번 문제풀이(Writeup) (0) | 2022.10.27 |
webhacking.kr old 43번 문제풀이(Writeup) (0) | 2022.10.25 |
webhacking.kr old 40번 문제풀이(Writeup) (0) | 2022.10.23 |
webhacking.kr old 29번 문제풀이(Writeup) 파일업로드를 통한 SQL Injection (0) | 2022.10.22 |