접속한 user agent가 DB에 존재하면 SQL 쿼리가 id를 반환한다. id가 admin
이면 문제가 풀린다.
User agent가 DB에 존재하지 않으면 user agent, ip와 id(guest
)를 DB에 추가한다.
DB에 추가하는 쿼리에서 SQL injection이 가능하다. $agent
를 AAAA', '', 'admin')#
와 같이 조작하면 전체 쿼리는 insert into chall8(agent,ip,id) values('AAAA', '', 'admin')#','{$ip}','guest')
가 되어, 주석 뒤쪽은 무시되고 user agent AAAA
를 가지는 admin
이 DB에 저장된다. 이제 다시 user agent를 AAAA
로 설정하여 접속하면 admin
이 되어 문제가 풀린다.
728x90