음?? 이전보다 조금 복잡한 느낌이 듭니다...
위 소스를 토대로 전체적인 과정을 분석해 보았습니다.
[동작과정]
1. user-agent, IP 정보를 가져옴
2. user-agent에 "from"이 들어가면 "Access Denied!"가 뜸
3. id가 70개 이상이면 chall8 DB가 삭제됨
4. 서버에 저장된 user-agent를 정보를 조건으로 id를 가져옴
5. id가 admin이면 chall8 table 내용을 지우고 solve()함수 호출
6. 서버에 저장된 user-agent가 없으면 현재 user-agent정보, ip정보와 guest라는 id로 chall8테이블에 저장함 그리고 카운트를 1더함
여기서 가장 중요한 부분은 6번입니다.
insert into chall8 (agent, ip, id) values('($agent)', '($ip)', 'guest')") or die("query error");
DB에 쓰기작업이 가능한 쿼리이므로 프록시 툴을 이용하여 '$agent' 이 부분을 조작하여 'ip'와 'guest'부분을 우리가 원하는 형태로 바꿀 수 있습니다.
동작과정 중 4번을 보면 user-agent의 정보를 조건으로 id를 가져오므로 자신이 원하는 agent 정보를 입력하고 ip는 자신의 IP , 그리고 id에 해당되는 'guest'부분을 'admin'으로 바꾸어주면 됩니다.
저는 아래와 같이 설정해습니다.
$user-agent : admin
$ip : 192.168.6.133
guest : admin
아래는 버프를 이용하여 User-Agent를 조작한 화면입니다.