Wargame/webhacking2017. 6. 18. 20:25

webhacking.kr 39번 문제를 보면 다음과 같다.

입력창 말고는 아무것도 없다.

우선 페이지 소스를 보면 다음과 같다.

index.phps가 힌트로 주어져있다.

일단 들어가 보도록 하자.

소스가 나와 있다. 분석을 해보자.


pw 변수에는 물음표가 문자열로 저장되어 있다.

POST 방식으로 받은 id에 값이 있으면 " \ "는 없애고, " ' "는 " '' "로 바꾼다.

substr() 함수를 이용해 id 값을 15글자로 잘라낸다.

select 문으로 데이터를 가져온다.

가져온 데이터가 "good"이면 문제가 풀린다.

그런데 select문을 자세히 보면 " ' "가 안닫혀 있다.

즉, 입력할 때 '를 반드시 입력해야 한다는 것이다.

하지만 " ' "를 입력하면 " '' "로 변환되기 때문에 문제가 된다.

어떻게 해야 할까 고민하면서 코드를 다시 보니

substr()함수를 이용해 15글자를 잘라낸다.

즉, 15번째 글자가 " ' "이면 총 16글자가 되며 마지막 두글자는 " '' "이다.

하지만 substr() 함수를 이용해 15글자로 잘라내기 때문에 " ' "를 입력할 수 있다.


이를 이용해 문제를 해결하면 된다.

admin         ' 을 입력하면 다음과 같이 문제가 풀린다.


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

[webhacking.kr] 49번 문제  (0) 2017.06.18
[webhacking.kr] 46번 문제  (0) 2017.06.18
[webhacking.kr] 38번 문제  (0) 2017.06.18
[webhacking.kr] 35번 문제  (0) 2017.06.18
[webhacking.kr] 23번 문제  (0) 2017.06.09
Posted by Imp3rio
Wargame/webhacking2017. 6. 18. 20:13

webhacking.kr 38번 문제를 보면 다음과 같다.


LOG INJECTION 이라고 써 있는 것을 봐선 LOG에 값을 삽입해야 하는 것 같다.

우선 페이지 소스를 보면 다음과 같다.

주석을 보니 admin.php가 힌트로 들어 있다. 일단 들어가보자

log라고 적혀있다.

이 곳에 log가 찍히는 것 같다.

페이지 소스를 보면 다음과 같다.

주석으로 힌트가 admin이라고 적혀있다.

무슨 의미인지 모르겠으니 일단 이전 페이지로 돌아가 아무 값이나 입력해 보자.

"자신의 아이피:[입력한 값]" 이 log에 찍힌다.

힌트가 admin이라고 했으니 "자신의 아이피:admin"이 찍히도록 입력해보자.

"admin"을 입력하니 위와같이 admin이 아니라고 한다.

"자신의 아이피:admin"을 입력하려면 어떻게 해야할까 고민하던 중 개행문자( \n )를 넣어보았다.

위와 같이 개행이 되어 출력이 되었다.

이를 이용해 "자신의 아이피:admin"을 넣을 수 있을 것 같다.

문제가 풀렸다.

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

[webhacking.kr] 46번 문제  (0) 2017.06.18
[webhacking.kr] 39번 문제  (0) 2017.06.18
[webhacking.kr] 35번 문제  (0) 2017.06.18
[webhacking.kr] 23번 문제  (0) 2017.06.09
[webhacking.kr] 24번 문제  (0) 2017.06.08
Posted by Imp3rio
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