<?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)");
}
?>
getenv 함수
환경변수의 값을 가져오는 함수이다
아래참조
클라이언트 브라우저 환경을 받아 공백을 제거(trim) 후 저장하고
_server['remote_addr']은 사용자 ip를 받아서 쿼리를 보내 동작하는방식이다.
db에서 id의 개수를 구한뒤 70개가 넘으면 모든내용삭제 쌓이는걸 방지하는 코드인거같다.
밑에 db에서 받아오는 부분에서 addslashes()함수를 이용해 슬레쉬를 추가후 클라이언트 정보를 넣어 확인하여 ck 에 저장하는데 없으면 클라이언트 정보와 ip정보를 넣고 guest를 추가한다.(이부분에 admin으로 추가하면 될것으로 예상된다.)
burpsuit를 사용해서 user agent 정보에 sql injection을 시도해보자
ck가 없으면 생성한다.
ck[0]가 admin이어야 한다.
위 생성쿼리를 참조하여
insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')") or die("query error")
User-Agent:admin','1','admin')# 로 바꾸어서 request 를 날려본다.
생성되는것이 확인된다
이제 다시 User-Agent:admin으로 바꾸어 접속하면 될걸로 예상된다.
클리어!
'보안 > webhacking' 카테고리의 다른 글
webhacking.kr old-10 (0) | 2019.11.23 |
---|---|
webhacking.kr old-09 (0) | 2019.11.23 |
webhacking.kr old-07 (0) | 2019.11.23 |
webhacking.kr old-06 (0) | 2019.11.23 |
webhacking.kr old-05 (0) | 2019.11.22 |
최근댓글