Wargame/webhacking2017. 6. 18. 19:42

webhacking.kr 사이트의 35번 문제를 보면 다음과 같다.

index.phps가 힌트로 주어져있다. 들어가보면 다음과 같은 코드를 볼 수 있다.

phone 변수를 GET 방식으로 받으며, phone 변수에 있는 값을 %, * 등의 문자로 필터링을 진행한다.

그리고 insert 문으로 '사용자 id', '사용자 ip', phone 변수값 을 넣는다.

그 다음 id가 'admin'이고, ip가 '사용자 ip'인 ip를 select문으로 가져오며, 가져온 값이 '사용자 ip'와 같으면 문제가 해결된다.


id가 admin이고 ip가 '사용자 ip'인 데이터를 넣어야 한다.

왜냐하면 insert 문에서 '사용자 id', '사용자 ip'를 넣기 때문에 id가 'admin'이고 ip가 '사용자 ip'인 데이터는 있을 수가 없기 때문이다.


insert문을 보면 다음과 같다.

insert into challenge35_list(id,ip,phone) values('$_SESSION[id]','$_SERVER[REMOTE_ADDR]',$_GET[phone])


phone 변수에 입력할 수 있기 때문에 아래와 같은 쿼리문을 만들 수 있다.

insert into ~~~~~ values('id','ip',phone1),('id','ip',phone2);


위와 같은 쿼리문을 이용하면 앞쪽에 있는 'id','ip'phone1 이 insert되는 것이 아니라 뒤쪽에 있는 'id','ip',phone2가 insert 된다.


따라서 아래외 같이 입력을 하면 해결될 것 같다.

1),('admin','사용자 ip', 2


입력을 하면 아래와 같은 화면이 나타난다.


쿼리 에러가 발생했다.

위의 쿼리문이 맞는 것 같은데 에러가 발생한 것이다.

의심해 볼 수 있는 것은 작은따옴표( ' )를  없애는 기능이 있는 것 같다.

이를 우회하기 위해 char()함수를 이용해 아래 공격문을 만든다.

1),(char(97,100,109,105,110),char(사용자 ip),2


char 함수는 10진수 아스키 값을 인자로 받으며, 해당 문자(열) 반환한다.

따라서 사용자 ip도 10진수 아스키값을 넣어주어야 한다.

참고로 .은 46이다.


입력창에 위 공격문을 넣으면 문제가 풀린다.



'Wargame > webhacking' 카테고리의 다른 글

[webhacking.kr] 39번 문제  (0) 2017.06.18
[webhacking.kr] 38번 문제  (0) 2017.06.18
[webhacking.kr] 23번 문제  (0) 2017.06.09
[webhacking.kr] 24번 문제  (0) 2017.06.08
[webhacking.kr] 18번 문제  (0) 2017.05.05
Posted by Imp3rio