본문 바로가기

Webhacking/Webhacking.kr

[Webhacking.kr] old-08번 문제 풀이

728x90
반응형

8번문제에 들어갔더니 done! 이라는 문구를 제외하고는 볼 것이 없었다.
바로 view source로 이동했다.

무언가 코드가 잔뜩 나왔다.
간단히 정리해 보자면

  • DB에 저장되어 있는 user-agent라면, 해당 user-agent에 맞는 id 값을 조회한다
  • DB에 저장되어 있지 않는 user-agent라면, user-agent, client-ip, guest 순서대로 DB에 삽입한다
  • 조회한 id값이 admin일 경우 문제가 풀린다

가장 중요한건 이부분이다. 
문제를 풀려면 id가 admin인 값을 불러와야 하는데, 애초에 insert할때 id를 guest로 하드코딩 해두었다.
그렇다. 이 문제 역시 SQL Injection으로 쿼리를 조작해서 하드코딩 된 부분을 우회하여
id가 admin으로 insert 될 수 있도록 풀어야 하는 문제이다.

풀이 방법은 매우 간단하다.

php 코드에 나와있듯이, insert는 user-agent, ip, id 순으로 삽입된다.
여기서 우리가 변조할 수 있는 부분은 user-agent이기 때문에, 
user-agent를 testtest', '127.0.0.1','admin')-- a 이런식으로 변조함으로써 임의의 데이터를 삽입하고,
하드코딩된 데이터는 주석처리 시켜버리는 방식으로 injection을 시도하면 된다.

이렇게 변조하여 request를 보내게 되면 done! 이라는 문자열이 보인다.
즉 insert가 잘 이루어졌다는 말이다.
insert가 잘 이루어 졌다면 user-agent가 testtest인 사람의 id는 admin이 될 것이다.

Injection이 잘 되었나, user agent를 testtest로 변조한 뒤 request를 보내보았다.

끄읕

정상적으로 admin이 불러와짐을 확인할 수 있다.

728x90
반응형