문제 접속하면 hi guest가 나온다. 코드를 보면
접속 사용자의 user_agent값을 가져와서 from가 있는지 확인한다. 그 후 서버 DB의 id의 개수를 가져오며 70개 이상일 경우 DB 데이터를 지운다.
db의 agent가 접속자의 user_agent와 같은 id를 조회하고 id값이 있으면 echo해주고 admin일 경우 문제가 해결된다.
반대로 조회된 id가 없을 경우 insert 구문으로 DB에 agent, ip, 'guest'를 삽입한다.
먼저 패킷을 잡아 user_agent값을 admin으로 변조해봤다.
👆 위와같이 insert 문이 제대로 삽입 후 done!이라는 문자열이 나온다.
변조할수 있는 부분은 user_agent 부분이므로 이걸 이용해 해결해야하는 것 같다. user_agent가 사용되는 부분은
id값을 조회하는 부분과,
insert 문으로 db에 데이터를 삽입하는 부분이다. 우선 첫 번째 경우에서 addslashes를 하기 때문에 조회구문에서 싱글쿼터 탈출은 불가능하다.
다음은 두 번째 insert 부분이다. 이 경우엔 agent에 대해 별다른 필터링 구문이 없으므로 싱글쿼터 탈출이 가능해보인다. 굳이 하나 보면 위에서 from 문자열을 필터링하고 있다.
hello', '61.34.253.109', 'admin')#
위 문자열을 user-agent로 변조하여 보낼 경우 insert 구문에는
"insert into chall8(agent, ip, id) values('hello', '61.34.253.109', 'admin')#, '{$ip}', 'guest' )"
가 되기 때문에 뒤는 다 주석처리가 된다.
익스플로잇 👇
위와 같이 변조 후
insert문이 제대로 들어간 걸 확인 후
user-agent를 hello로 변조하여 패킷을 전송한다.
클리어
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-49 write up (0) | 2024.03.17 |
---|---|
[Webhacking.kr] old-46 write up (0) | 2024.03.17 |
[Webhacking.kr] old-21 write up (0) | 2024.03.01 |
[Webhacking.kr] old-27 write up (0) | 2024.03.01 |
[Webhacking.kr] old-23 write up (5) | 2024.03.01 |