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
Wargame/pwnable2017. 6. 18. 18:38

pwnable.kr 사이트의 fd 문제를 열어보면 다음과 같은 화면을 볼 수 있다.


file descriptor에 대한 문제인 것 같다.

우선 ssh로 접속을 해보자.

fd, fd.c, flag 파일이 존재한다.

fd.c 파일을 열어보자.

fd.c 파일은 위와 같이 코딩되어 있다.

32 바이트 크기의 buf가 전역변수로 선언되어 있다.

fd 파일을 실행할 때 인자가 없으면 그냥 종료한다.

fd 변수에 1번째 인자 값에서 0x1234를 뺀 값을 저장하고

len 변수에 read()함수로 fd에 있는 값을 buf에 저장한 바이트 수를 저장한다.

buf에 저장된 문자가 LETMEWIN이면 system()함수로 flag 파일을 읽는다.


위에 분석한 내용을 가지고 문제를 풀어보자.


우선, file descriptor가 무엇인지 알아야 한다.

리눅스에서는 모든 프로세서는 file descriptor로 동작하게 된다.

file descriptor 중 0, 1. 2 는 시스템에서 사용하기 때문에 사용자가 실행하는 프로세서는 이 값을 제외한 값을 갖는다.


 0( standard input )

 키보드 입력을 받는다.

 1( standard output )

 입력된 값을 출력한다.

 2( standard error )

 에러 내용을 출력한다.


키보드 입력을 통해 buf에 LETMEWIN을 넣어야 하기 때문에 fd 변수에 저장되는 값이 0이 되어야 한다.

따라서 0x1234(4660)을 입력을 하면 키보드 입력을 받는다.


flag를 읽어온 것을 볼 수 있다. 이 값을 입력하면 문제가 풀린다.

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

[pwnable.kr] bof  (0) 2017.07.25
[pwnable.kr] collision  (0) 2017.06.25
Posted by Imp3rio
Wargame/webhacking2017. 6. 9. 08:35

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

<script>alert(1);</script>

위 스크립트를 넣어야 하는 것 같다.

우선 넣어보도록 하자.

no hack

위와 같이 출력이된다. 즉, 필터링이 되어 있다는 것을 알 수 있다. 하지만 어떤 문자가 필터링 되어 있는지 알 수 없기 때문에 가장 많이 필터링 거는 특수문자들을 확인해 보자.

<>()/ 

문자열을 넣었더니 필터링 되지 않는 것을 알 수 있다.

그렇다면 script 문자열과 alert 문자열이 필터링 되어 있다는 것인데, 문자열 사이에 공백을 넣어 입력해 보자.

<s c r i p t>a l e r t(1);</s c r i p t>

공백 문자로 우회가 되지 않았다. 

url을 보면 다음과 같이 요청이 된다.

code라는 변수에 입력란에 입력한 값이 URL 인코딩되어 GET 방식으로 요청하는 것을 확인할 수 있다.

공백 대신에 NULL을 입력하여보자.

code=<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t(1);</s%00c%00r%00i%00p%00t>


url에 위와같이 넣으면 문제가 풀린다.

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

[webhacking.kr] 38번 문제  (0) 2017.06.18
[webhacking.kr] 35번 문제  (0) 2017.06.18
[webhacking.kr] 24번 문제  (0) 2017.06.08
[webhacking.kr] 18번 문제  (0) 2017.05.05
[webhacking.kr] 17번 문제  (0) 2017.05.04
Posted by Imp3rio
Wargame/webhacking2017. 6. 8. 22:10

webhacking.kr 사이트의 24번 문제에 접속하면 다음과 같은 화면을 볼 수 있다.

ip 주소와 agent 정보가 나온다. 소스보기를 보면 index.phps를 볼 수 있다는 정보가 있다.


index.phps를 보면 다음과 같다.


코드를 보면 두 번째 if 문에서 ip 값을 채우는 것을 볼 수 있다.

이 if은 REMOTE_ADDR 이라는 이름의 쿠키에 값이 들어있으면 ip 값을 채운다.

ip 값을 채울 때 "12", "7.", "0." 문자열을 없애고 채우는 것을 알 수 있다.

즉, str_replace() 함수를 우회하여 ip 값이 127.0.0.1이 되면 된다.


ip 값이 127.0.0.1이 되기 위해서는 112277..00..00..1이 되면 된다.

Cookie 매니저를 이용해 REMOTE_ADDR 이름의 쿠키를 생성하면 다음과 같다

쿠키 매니저가 없으면 개발자 도구를 이용해 콘솔에 다음 명령어를 입력하면 된다.

javascript:document.cookie="REMOTE_ADDR=112277..00..00..1;"


위와 같이 설정하고 페이지를 새로고침하면 문제가 풀린다.

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

[webhacking.kr] 35번 문제  (0) 2017.06.18
[webhacking.kr] 23번 문제  (0) 2017.06.09
[webhacking.kr] 18번 문제  (0) 2017.05.05
[webhacking.kr] 17번 문제  (0) 2017.05.04
[webhacking.kr] 16번 문제  (0) 2017.05.04
Posted by Imp3rio
Wargame/webhacking2017. 5. 5. 00:29

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

SQL Injection 문제이고 index.phps 페이지를 제공해 주었다.

index.phps 페이지를 보면 다음과 같다.

no라는 변수를 받아서 여러가지 문자를 필터링한다.

id='guest'이고 전달받은 no변수의 값에 대해 challenge18_table에 있을 경우 해당 id를 변수 q에 저장한다.

q의 값이 admin이면 문제가 풀리는 것 같다.

일단 id가 admin 이어야하기 때문에 기존 where문을 이용하면 안될 것 같다.

즉, id='guest' and no=$_GET[no] 이 조건을 무효화 시켜야 한다.

그러기 위해서 no 값에 0을 넣으면 true and false가 되기 때문에 무효시킬 수 있다.

그리고 나서 admin의 no값을 찾아야 하는데, 페이지만 봐서는 알 수가 없다.

일단 1을 넣으면 다음과 같은 화면을 볼 수 있다.

guest의 no 값이 1인것을 알 수 있다.

chellenge18_table에 어떤 데이터들이 들어 있는지 모르지만 guest의 no 값이 1이기 때문에

admin의 no 값은 2일 확률이 높다.

no=0%0Aor%0Ano=2를 입력해보면 문제가 풀린다.

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

[webhacking.kr] 23번 문제  (0) 2017.06.09
[webhacking.kr] 24번 문제  (0) 2017.06.08
[webhacking.kr] 17번 문제  (0) 2017.05.04
[webhacking.kr] 16번 문제  (0) 2017.05.04
[webhacking.kr] 15번 문제  (0) 2017.05.04
Posted by Imp3rio
Wargame/webhacking2017. 5. 4. 23:43

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

14번 문제와 유사한 것 같다.

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

unlock 변수에 엄청나게 복잡한 수식이 들어있다.

이를 계산해서 입력을 해야 되는 것 같다.

계산기를 이용해서 사칙연산에 맞춰 계산을 시도해도 된다.

하지만 필자는 디버깅을 통해 값을 알아내도록 하겠다.

페이지 소스에서 디버거 부분을 들어가면 다음과 같은 화면을 볼 수 있다.

sub() 함수가 있는 부분에 중단점을 걸고 아무 값이나 넣고 버튼을 누르면 아래와 같이 unlock의 값을 확인할 수 있다.

확인한 값을 따로 적어 놓고 해당 값을 입력창에 넣어 버튼을 누르면 다음과 같이 Password를 알 수 있다.

Password 값을 제출하면 17번 문제가 풀린다.

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

[webhacking.kr] 24번 문제  (0) 2017.06.08
[webhacking.kr] 18번 문제  (0) 2017.05.05
[webhacking.kr] 16번 문제  (0) 2017.05.04
[webhacking.kr] 15번 문제  (0) 2017.05.04
[webhacking.kr] 14번 문제  (0) 2017.05.04
Posted by Imp3rio
Wargame/webhacking2017. 5. 4. 23:29

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

어떤 정보도 볼 수 없으니 일단 페이지 소스를 보도록 하자.

mv() 함수와 kk() 함수가 정의되어 있다.

mv() 함수는 특정 키가 눌렸을 때 큰 별이 이동하는 것을 정의한 함수이고

kk() 함수는 작은 별을 생성해서 출력해주는 함수이다.

mv() 함수에서 동작하는 키 값을 보니 아스키값으로 되어 있는 것을 알 수 있다.

100, 97, 119, 115는 각각 d,a,w,s이고 각각 오른쪽, 왼쪽, 위, 아래 순으로 큰 별을 이동하도록 정의되어 있다.

124는 문자( | )로 페이지 이동이 이루어진다.


소스 분석을 통해서 아스키값이 124인 | 를 입력하면 다음과 같은 화면을 볼 수 있다.

Password가 출력이 됐다.

이 값을 제출하면 16번 문제가 풀린다.

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

[webhacking.kr] 18번 문제  (0) 2017.05.05
[webhacking.kr] 17번 문제  (0) 2017.05.04
[webhacking.kr] 15번 문제  (0) 2017.05.04
[webhacking.kr] 14번 문제  (0) 2017.05.04
[webhacking.kr] 12번 문제  (0) 2017.05.04
Posted by Imp3rio
Wargame/webhacking2017. 5. 4. 23:08

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

난감하기 그지없다.

아무런 정보 없이 알림창 하나만 나타나니 일단 burpsuite로 패킷을 잡아보자.

맨 아래줄에 password가 쓰여있다.

이 값을 제출하면 15번 문제가 풀린다.


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

[webhacking.kr] 17번 문제  (0) 2017.05.04
[webhacking.kr] 16번 문제  (0) 2017.05.04
[webhacking.kr] 14번 문제  (0) 2017.05.04
[webhacking.kr] 12번 문제  (0) 2017.05.04
[webhacking.kr] 11번 문제  (0) 2017.05.04
Posted by Imp3rio
Wargame/webhacking2017. 5. 4. 23:02

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

아무런 설명도 되어있지 않고 Editbox 하나와 버튼 하나가 있다.

뭘 의미하는 건지 모르기 때문에 일단 페이지 소스를 보자.

Edit box의 이름은 input_pwd라는 것을 알 수 있고 이를통해 패스워드를 입력해야 하는 것을 유추할 수 있다.

버튼을 클릭하면 ck() 함수가 호출되는 것을 알 수 있다.

ck() 함수를 보면 ul 변수에 url을 저장하고 indexOf() 함수를 이용해 ".kr" 문자열의 위치값을 저장한다.

".kr" 의 위치값이 저장된 ul에 30을 곱하고 입력받은 input_pwd의 값과 비교한다.

두 개의 값이 같으면 Password를 alert() 함수를 이용해 출력해준다.


현재 url은 http://webhacking.kr/~~~~~ 이다.

순서대로 세 보면 ".kr"의 위치는 17임을 알 수 있다.

* IT와 관련해서 숫자는 0부터 센다.

17*30의 값인 510을 입력하자.


다음과 같이 알림창으로 Password를 출력해준다.

이 값을 제출하면 14번 문제가 해결된다.

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

[webhacking.kr] 16번 문제  (0) 2017.05.04
[webhacking.kr] 15번 문제  (0) 2017.05.04
[webhacking.kr] 12번 문제  (0) 2017.05.04
[webhacking.kr] 11번 문제  (0) 2017.05.04
[webhacking.kr] 10번 문제  (0) 2017.05.04
Posted by Imp3rio