반응형
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 $ck) if(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']==1) echo("level : 1<br><br>"); if($result['lv']==2) echo("level : 2<br><br>"); } if($result['lv']=="3") solve(50); if(!$result) echo("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 |