-
[Webhacking.kr] 8번 풀이Wargame/webhacking.kr (old) 2019. 3. 2. 18:56
index.phps로 접근해 소스 코드를 보았다.
getenv()
환경 변수의 값을 가져오는 함수
trim()
맨 앞과 맨 뒤의 여백 제거
strtolower()
문자열 소문자로 변환
소스를 해석해보면, \$agent는 나의 접속 환경 값, \$ip는 나의 IP주소 값으로 초기화한다.
str_replace()를 이용하여 .과 /의 값을 _로 대체한 후,
union 등의 필터링된 문자열을 포함하는지 검사한다.
\$_SERVER[HTTP_USER_AGENT] 값도 str_replace()를 이용하여 '(싱글 쿼터), \" 를 공백으로 대체하고,
이 값을 이용하여 쿼리를 검색한다.
[$_SERVER 변수 값 정리] https://intro0517.tistory.com/111
쿼리를 검색한 결과 값이 존재하면 'hi \$ck[0]'을 페이지에 출력하고
쿼리 검색 결과 값이 admin이면 문제가 풀린다.
쿼리 검색한 결과 값이 존재하지 않는 경우에는 insert문을 이용하여 데이터 베이스에 값을 삽입한다.
우선 페이지에 'hi \$ck[0]'을 출력해보기로 하였다.
나의 User_Agent 값은 변경되지 않았기때문에 새로고침(F5)하면 페이지에 출력될 줄 알았으나,
숫자만 증가하고 출력되지 않았다.
fiddler를 사용하여 User-Agent 값을 변경해보자..!
(이때, User-Agent 값에 필터링 되는 문자열을 넣지 않도록 주의한다.)agent : test로 데이터 베이스에 새로운 값이 삽입되었을 것이다.
확인을 위해 다시 User-Agent 값은 test로 request 하였다.
'hi guest' 가 페이지에 출력되었다.
insert 구문을 자세히 보니 id 값을 guest로 설정해준다. ck[0]은 id 값이다.
id 값을 admin으로 설정해 데이터 베이스에 삽입한다면, admin으로 접속이 가능할 것이다.
또한, insert구문에서 value가 아닌 values를 사용하여 데이터를 삽입한다..!
values를 사용하면 ,(콤마)를 이용하여 여러 개의 데이터를 한 번에 삽입할 수 있다.
MySQL을 이용하여 테스트하였더니, 한 번에 두개의 데이터가 삽입되는 것을 확인할 수 있었다.
이를 이용하여 id 값이 admin인 데이터를 삽입해보기로 하였다.
User-Agent의 값을 쿼리 구문에 맞게 변경해보았다.
insert into lv0(agent, ip, id) values('kk', '11', 'admin'),('b', '$ip', 'guest')
agent : kk, ip : 11, id : admin의 데이터와, agent : b, ip : 내 IP, id : guest의 데이터가 삽입되었을 것이다.
다시 User_Agent : kk로 변경하여 request하면 admin으로 접속이 될 것이다.
예상대로 User-Agent의 값을 kk로 변경해주었더니,
id의 값이 admin이 되어 문제가 풀렸다.
'Wargame > webhacking.kr (old)' 카테고리의 다른 글
[Webhacking.kr] 10번 풀이 (0) 2019.03.03 [Webhacking.kr] 9번 풀이 (0) 2019.03.02 [Webhacking.kr] 6번 풀이 (0) 2019.03.02 [Webhacking.kr] 5번 풀이 (0) 2019.03.02 [Webhacking.kr] 4번 풀이 (0) 2019.03.02 댓글