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