Wargame/Webhacking.kr

<Webhacking.kr> old-08

지우친구 웅이 2021. 11. 16. 16:40

old-08

"hi guest"라는 메시지와 view-source만을 볼 수 있는데, view-source를 통해 페이지 소스코드를 살펴볼 수 있다.

HTTP_USER_AGENT : 웹 사이트를 접속한 컴퓨터의 웹 브라우저 정보

$_SERVER['REMOTE_ADDR'] : 사이트 접속한 사용자 IP

 

$ck는 "select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'"); 쿼리의 결과를 배열로 가져온다. $ck[0]이 'admin'이면 문제를 해결할 수 있다.

 

아래 부분의 쿼리를 통해 테이블의 구조를 알 수 있다.

chall8(agent, ip, id) 형태를 확인할 수 있는데,

우선 지금 형태는

agent ip id
{$agent} {$ip} guest

 

id가 'guest'로 고정적으로 입력된다.

id의 값을 'admin'으로 만들기 위해

agent ip id
woong 1 admin
문자열 {$ip} guest

으로 만들면 된다.

insert into chall8(agent, ip, id) values('

{$agent}

', ${ip}, 'guest') 에서 우리가 조작할 수 있는 부분은 $agent 부분이다.

따라서, insert into chall8(agent, ip, id) values('woong', '1', 'admin'), ('guest_agent', ${ip}, 'guest')로 만들어 주면 'admin'의 agent는 'woong'이 된다.

 

위 방법에서 $agent인 HTTP_USER_AGENT는 패킷 안에 있으므로 Burp Suite를 사용하여 변경할 수 있다.

빨간 줄 부분이 HTTP_USER_AGENT에 해당하는 부분이다.

이 부분을 woong', '1', 'admin'), ('guest_agent로 바꿔준다.

 

 

그럼 테이블의 형태가

agent ip id
woong 1 admin
guest_agent {$ip} guest

와 같아지게 되고, 다시 USER_AGENT 값을 'woong'으로 주면 된다.

즉, select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'"); 쿼리에서

id가 'admin'인 agent를 전달하면 되므로 woong을 전달하면

select id from chall8 where agent='woong';

$ck[0]의 값에 'admin'이 들어가게 되어 문제를 해결할 수 있다.