반응형

view-source를 통해 소스코드를 확인해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
  if($_GET['id'&& $_GET['pw']){
    $db = dbconnect();
    $_GET['id'= addslashes($_GET['id']); 
    $_GET['pw'= addslashes($_GET['pw']);
    $_GET['id'= mb_convert_encoding($_GET['id'],'utf-8','euc-kr');
    foreach($_GET as $ckif(preg_match("/from|pw|\(|\)| |%|=|>|</i",$ck)) exit();
    if(preg_match("/union/i",$_GET['id'])) exit();
    $result = mysqli_fetch_array(mysqli_query($db,"select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')"));
    if($result){
      if($result['lv']==1echo("level : 1<br><br>");
      if($result['lv']==2echo("level : 2<br><br>");
    } 
    if($result['lv']=="3") solve(50);
    if(!$resultecho("Wrong");
  }
?>
cs


일단 포인트부터 잡아보자면 id와 pw를 addslashes를 통해 공격을 방어하지만 6번 라인에서 mb_convert_encoding 함수를 통해 id 파라미터를 euc-kr로 변환시켜주므로 이 부분이 포인트임을 알 수 있다.


내가 정리해둔 포스팅을 통해 우회할 수 있으므로 id 부분을 통해 SQL Injection을 진행하면 될 것으로 보인다.

https://rootable.tistory.com/entry/addslashes-mysqlrealescapestring-%EC%9A%B0%ED%9A%8C



여기서 문제 solve를 하기 위해 lv 3을 해야 하므로 limit 기능을 이용하여 찾아보았다.

하지만 lv 2까지는 나오지만 3는 나오지 않는 것을 통해 테이블 내에 lv 3가 존재하지 않다는 것을 파악한 뒤 다시 소스코드를 보았다.


id로 넘어오는 값에서 union을 체크하는 것으로 보아 pw 부분에서 union을 이용하여 진행할 수 있을까를 생각해보았다.

id 부분에서 백슬래시를 넣어 싱글쿼터를 무력화 시킨 뒤 union을 이용하면 가능할 것이라 생각하였다.


이것을 정리하면 다음과 같은 쿼리가 된다.

select lv from chall50 where id='?\' and pw=md5(' union select 3#')



반응형

'Solve Problem > Webhacking.kr' 카테고리의 다른 글

webhacking.kr old-28 writeup  (0) 2020.04.17
webhacking.kr old-40 writeup  (1) 2020.04.14
webhacking.kr old-51 writeup  (0) 2020.04.14
webhacking.kr old-52 writeup  (0) 2020.04.14
webhacking.kr old-55 writeup  (0) 2020.04.13
블로그 이미지

rootable

,