아직 작성 중인 글 입니다...

[그림 1] 문제화면
[그림 2] 소스코드

trim()

:: 문자열 앞뒤로 공백을 없애주는 함수

 

getenv()
:: 함수의 인자로 오는 변수에 따라 해당되는 환경 변수값을 알려주는 함수.

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

 

addslashes()

:: DB 작업을 위해 쿼리를 작성할 때, 따옴표를 escape 시켜주는 함수.

ex) addslashes(You're my sunshine) >>> You\'re my sunshine

 

htmlentities()

:: html 태그를 그대로 출력하는 함수.


PHP 부분부터 살펴보면,

$agent 변수에 HTTP_USER_AGENT(접속 웹 브라우저 정보)을 저장하고,

$ip에는 REMOTE_ADDR(접속 ip주소)을 넣어준다.

만약 $agent 변수에 from 또는 FROM이 들어가면 Access Denied! 를 한다.

 

$count_ck에는 'select count(id) from chall8'의 결과가 배열의 형태로 저장되어 있다.

$count_ck에는 70개 이상의 값이 들어가면 저절로 삭제되게 되어있다.

 

그리고 $agent 변수가 현재 접속한 유저의 HTTP_USER_AGENT와 같은지 비교하고,

그중에서도 $agent의 id가 admin이면 문제가 풀리는 구조이다.

 

만약 $agent 변수가 존재하지 않는다면 agent와 ip, id를 insert 해준다.

 

 

우리가 현재 건드릴 수 있는 값은 $agent이고

$agent 변수에 'admin' 문자열을 넣는 것을 목표로 해야한다.

데이터를 넣는 것은 Insert 쿼리가 있는 맨 마지막 조건문을 이용해야 한다.

 

(!$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)");

}

 

$agent 에 test','1.1.1.1','admin')('test2 를 넣게 되면

쿼리문은 insert into chall8(agent, ip, id) values('test','1.1.1.1','admin')('test2',$ip값,'guest') 가 되는 것이다.

 

 

$agent를 변조시키기 위해서는 Burp Suite를 이용해야 한다고 한다.

(Burp Suite 도구를 사용해서 HTTPS 요청 패킷을 캡처할 수 있기 때문)

 

Burp Suite 사용법을 익힌 후 다시 작성하겠다,,^^

 

 

+ Recent posts