본문 바로가기
category/웹해킹(webhacking.kr)

웹해킹(webhacking.kr) - 35번

by 자운대고라니 2020. 11. 30.
반응형

안녕하세요??

자운대 고라니입니다.

오늘은 wargame.kr old-35번 문제를 풀어보겠습니다.


문제의 첫 화면이다. 간단하게 phone을 적으라는 text박스가 있다.

일단 view-source를 이용하여 소스코드를 확인해봤다.

소스코드 중 중요한 부분을 캡처하였다.

일단 phone에 아무런 값을 넣어봤는데,

위의 사진처럼 id=guest로 고정돼있다.

 

 

풀이의 조건은 phone에 어떠한 값을 넣으면 insert into chall35(id,ip,phone) value..... 를 이용하여 데이터베이스에 값을 저장한 후, id=admin and ip=myip 라는 값을 가진 데이터가 있다면, 문제가 풀린다.

 

하지만 preg_matchstrlen 함수를 활용하여서 id에는 'admin'이란 값을 넣을 수 없게 되었기에 정상적인 경로로 

'admin'을 넣을 수는 없다고 판단되었다.

 

 


 

이럴때는 insert부분의 취약점을 활용하여 id='admin'이라는 값을 넣을 수 있다.

데이터를 insert 할 때 , 을 활용하여 두개의 데이터를 동시에 넣을 수 있다.

ex) insert into DB(id,pw) values('admin', '1234'),('guest', '4321) -> ('admin', '1234'),('guest', '4321) 둘 다 들어감

 

위와 동일한 방식으로 쿼리문을 만들어보자.

$_GET['phone']은 preg_match에 의한 필터링이 제대로 안돼 있다는 것을 확인할 수 있다.

이를 활용해서 injection을 시도해봤다.

 

"select ip from chall35(id,ip,phone) values('guest', 'myip', $_GET['phone'])"

"select ip from chall35(id,ip,phone) values('guest', 'myip', 1234),('admin', 'myip', 4321)"

 

1234),('admin', 'myip', 4321 phone에 넣으면 'admin'이란 값을 테이블에 넣을 수 있다.

확인해봤다.

 

 

문제가 풀렸다.

처음 푸는 사람이라면 score가 올라간 것을 확인할 수 있다.

 

반응형

댓글