Security/Wargame

[Webhacking.kr] Challenge 8

rootnix 2014. 6. 10. 17:42



요 몇일째 웹해킹에 재미들려서 webhacking.kr 을 열심히 풀어헤치는중

다른 문제들도 풀이를 하나씩 써 나갈거지만 8번 문제를 풀다가 풀이가 쓰고 싶어서 먼저 써본다.




8번문제 링크에 접근하게 되면



이와 같은 화면을 보게 된다.



일단 문제를 풀기 위해 소스를 한번 살펴보자

/index.phps

로 접하게되면 다음과 같은 소스를 볼 수 있다.




문제를 solve 하기 위해선 'lv0' 테이블의 id가 admin 이어야 solved 된다.

이 id를 구해오기 위해서 'HTTP_USER_AGENT' 를 where문으로 찾는다.


그리고, 해당 'HTTP_USER_AGENT'의 대한 데이터가 없으면, 새로운 'guest' ID의 데이터를 추가하게 된다.


즉 우리가 해야 하는건, admin 이란 id를 가진 agent 를 추가해야하는데,

우리는 agent 값을 조작해서, insert 구문에 SQL Injection 을 행하는 방법이다.



우리가 먼저 알아야 할 것이 있는데,

Insert 문은 한번에 하나의 데이터만 삽입해야하는 것이 아니다.

다시 말해, insert는 여러개의 데이터를 한번에 삽입할 수 있다.



위의 예제를 보면, VALUES 에 여러개의 괄호로 여러개의 데이터가 삽입 가능하다.


즉 우리는 이 문제를 해결하기 위해서

첫번째 데이터에 임의로 데이터를 넣어주고,

두번째 데이터는 서버사이드스크립트에 의해 삽입되도록 두번

2개의 데이터가 삽입될 것이고.


해당 문제는 1번 Index 의 값을 가져와 체크하기 때문에

우리가 넣은 첫번째 데이터를 검사하게 될 것이다.


그렇게 되면 우리가 첫번째로 넣음 admin 데이터에 의해서

문제가 해결될 것이다.


그럼 실제로 문제를 풀어보자


'HTTP_USER_AGENT'를 조작하기 위해서는 HTTP REQUEST를 수정할 수 있어야 하는데.

이는 HTTP REQUEST 툴이나, 파로스 또는 직접 코딩을 하여 조작하면 되겠다.


필자는 Python 을 통해 코드를 작성하여 문제를 해결 하였다.




위와 같이 UserAgent 를 통해 SQL Injection 을 수행한다면
해당 문제를 풀이하는 결과를 볼 수 있다.