문제화면이다.
소스코드를 한번 확인해 보자.
길다.
나눠서 살펴보자.
<?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();
}
HTTP 요청 헤드에 사용자의 에이전트 정보를 가져와 $agent 변수에 저장한다.
getenv() 함수를 이용하면 환경 변수를 읽어온다.
클라이언트 ip 주소를 $ip에 저장하고
preg_match() 함수를 이용해서 가져간 에이전트 정보에 "from"이라는 문자열이 있는지 확인 [대소문자 구분 없이]
포함되어 있음 액세스 거부 시킨다.
에이전트 정보에 대한 필터링?인 거 같다 아마도
$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);
}
}
dbconnect() 함수를 호출해서 db에 연결시킨다.
db에 "chall8" 테이블의 레코드 수를 조회한다. [sql에 있는 사용자에 대한 담긴 정보인 거 같다.]
mysqli_fetch_array를 통해서 배열을 가져온다. [레코드를 가져오는 거 같다.]
그걸 $ck에 저장한다.
[이 부분이 쿼리가 직접적으로 실행되는 곳인 거 같다.]
"chall8" 테이블의 레코드 수가 70개 이상이면 모든 레코드를 삭제한다.
ck 가 0 일 때 즉 '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)");
}
값을 추가하는 형식으로 만드는 거 같다.
그래서 처음에 'hi guest'라고 출력된 거 같다.
이 부분에서 쿼리에 대한 결과($ck)가 없으면 insert를 이용해서 (agent, ip, id)를 추가하는 거 같다.
그러면 이 'insert'를 이용하면 되는 문제인 거 같다.
HTTP_USER_AGENT는 HTTP 요청 헤더에 포함되어 있는 정보라 패킷 안에 들어있다.
Burp_suite 사용해서 패킷을 확인해 보자.
패킷을 보면 User-Agent라고 되어 있다 한번 쿼리문이 반응하는지 실험해 보자.
반응을 한다.
이것으로 SQL INJECTION 이 가능하다는 걸 알 수 있다.
"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')
이 부분을 조작해야 한다.
'testuser,'0.0.0.0','admin'),('shield
이렇게 값을 대입하면
기존의 있던 쿼리문
"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')
여기서
insert into chall8(agent,ip,id) values('testuser','0.0.0.0','admin'),('shield','{$ip}','guest')
이렇게 변하는 것이다.
대입해 보자.
정상적으로 실행된다.
그렇다면 testuser 로 agent 값을 넣어보자.
'Wargame > Webhacking.kr' 카테고리의 다른 글
webhacking.kr - old 47 (0) | 2024.03.28 |
---|---|
webhacking.kr - old 36 (0) | 2024.03.28 |
webhacking.kr - old 21 (0) | 2024.03.27 |
webhacking.kr - old 33 (1) | 2024.03.26 |
webhacking.kr - old 07 (0) | 2024.03.22 |