문제를 들어가면 hi guest를 볼 수 있다. 일단 소스코드를 확인해보자.
- DB에서 agent가 현재 HTTP_USER_AGENT랑 일치하는 id를 가져오고 있다.
- id가 admin이면 문제를 풀 수 있다.
- id가 없다면 insert구문을 통해 id를 생성하게 된다.
따라서 HTTP_USER_AGENT를 조작하면 sql injection을 할 수 있고, admin 계정을 생성 한 뒤 admin계정으로 로그인 하면 된다.
$ch==false 일 때 다음과 같은 쿼리문이 사용된다.
insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')
여기서 $agent에 a','1.1.1.1','admin'),('b
을 넣어주면 다음과 같은 쿼리문이 완성된다.
insert into chall8(agent,ip,id) values('<span style=color:#ff0000>aaaa','1.1.1.1','admin'),('b</span>','{$ip}','guest')
결국 DB에 (‘aaaa’,’1.1.1.1’,’admin’), (‘b’,’{$ip}’,’guest’) 이렇게 두 개의 값이 들어가게 된다.
이제 HTTP_USER_AGENT를 조작하기 위해 burp suite를 사용해야 한다.
burp suite에서 User-Agent부분을 위의 그림처럼 수정해주면 된다. 그러면 agent가 aaaa인 admin계정을 생성할 수 있다.
이제 다시 burp suite를 이용해서 agent가 aaaa인 계정으로 접속하면 문제를 풀 수 있다.