Webhacking 8번
포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.
8번 웹페이지이다.
hi guest가 출력되며 소스코드를 볼 수 있다.
코드를 보자.
필요한 부분만 가져왔다.
모르는 함수의 기능부터 알아보자.
- trim() // 문자열의 양끝 공백을 제거한다. (원본유지)
- getenv() // 문자열로 리턴해준다.
이번은 get형식으로 데이터를 입력받지 않고, HTTP_USER_AGENT로 값을 입력 받는다.
chall8 테이블의 id갯수가 70개를 넘으면 chall8 테이블을 지우며, id의 값이 admin이면 테이블이 비워지며 문제가 해결된다.
문제를 해결하기 위해 우리는 2가지 과정을 거쳐야한다.
1. insert into 부분에서 id가 admin에 해당하는 데이터 삽입
2. select id ~~쿼리에서 id가 admin인 agent값 삽입
첫번째 과정을 수행하자.
우리는 공격점을 HTTP_USER_AGENT 부분으로 잡아야한다.
하지만 이부분에서 공격을 진행하려면 burp suite가 사용되어야 한다.
burp suite의 사용법에 대해서는 생략한다.
burp suite로 현재 웹페이지를 리다이렉션 시키면서 캡쳐된 화면이다.
User-Agent 부분을 변조하여 해당부분의 문법을 만족시켜 쿼리문을 주입해보자.
User-Agent : a','1','admin');--
어.. 쿼리 에러가 떴다..
그 후 수많은 한줄 주석처리( %23, #, --, //)등등 다 해봤지만 모두 쿼리 에러를 불러왔다.
그래서 일단 주석처리는 뒤로 하고 문법을 맞추는데 초점을 두었다.
User-Agent : a','1','admin'),('b
성격상 최소한의 데이터로 문제를 해결하고 싶었지만 일단 에러가 나기에..
정상적으로 값이 삽입되었다.
이제 id가 admin인 agent 값을 User-Agent를 통해 삽입해주자.
우리는 a로 값을 주었기에 a만 입력해주면 된다.
User-Agent : a
문제 해결
시행착오
1. insert into 부분에서 주석처리로 문제가 해결되지 않는데, 그 이유를 모르겠다.