Pwnable.kr fd


lob를 풀고 Pwnable.kr 을 풀었다.

fd가 read의 파일 디스크립터이다. 

파일 디스크립터 : 윈도우에서의 handle 과 같이 시스템으로부터 할당받은 파일을 대표하는 정수의 값이다.

0이면 표준 입력, 1이면 표준 출력 , 2이면 표준 에러이다.


fd가 파일 디스크립터이니 0으로 만들고 buf를 입력받게 만든 후 LETMEWIN을 입력하면 flag를 읽어줄 것이다.


입력값에서 0x1234를 뺀 게 0이 되면 되니 0x1234를 10진수로 만들고 나온 4660을 입력하면 buf 를 입력할 수 있게 된다.


4660을 argv[1]으로 입력하고 buf입력에서 LETMEWIN을 입력하면 flag를 읽어준다!

'write up > pwnable' 카테고리의 다른 글

LOB gremlin  (0) 2018.12.27
LOB gate  (0) 2018.12.27

LOB gremlin


코드는 전 문제와 같다.

하지만 버퍼의 크기가 줄여져서 버퍼에 쉘코드를 넣어 실행시키지 못할 것 같다.

그렇기 때문에 buffer 의 뒷 부분에 쉘코드를 넣어 실행하였다.

NOP(20byte)+뒤에 nop값 주소(4byte)+NOP(100byte)+shellcode(25byte)


gdb 에서 r `python -c' print "\x90"*24+"A"*100'` 을 넣어보았다. A 즉 41이 나오는 부분을 ret 에 넘겨주면 nop sled로 shell 이 실행될것이다.


얻은주소들로 payload를 짜면 쉘이 실행되고 다음 level의 비밀번호를 볼 수 있다.


'write up > pwnable' 카테고리의 다른 글

Pwnable.kr fd  (0) 2018.12.27
LOB gate  (0) 2018.12.27


LOB gate


코드를 보니 strcpy를 하는데 크기를 지정해주지않아서 bof 로 풀면 되겠다 생각을 하였다.


버퍼 크기를 보니 256 바이트이기 때문에 sfp 까지 260바이트를

nop+쉘코드+nop으로 채워주고 ret에 nop이 들어간 주소를 넣어주면 되겠다 생각을 하였다.

우선 먼저 nop sled 를 사용하기 위해 주소를 찾아야했다.

gdb를 해야하는데 gremlin은 gdb 에서 실행이 안되니 복사본을 만들어준다


gdb에서 nop을 주고 그 주소로 ret를 변조하면 된다.


payload 에서 nop을 줄 만큼 gdb 에서 줘보고 주소를 확인해보았다. 


필요한 것을 모두 구했기 때문에 payload를 작성하였다.

이렇게 payload를 작성하고 엔터를 따악 누르


이렇게 쉘이 따인다 다음 레벨 gremlin 의 password가 나온다

'write up > pwnable' 카테고리의 다른 글

Pwnable.kr fd  (0) 2018.12.27
LOB gremlin  (0) 2018.12.27

+ Recent posts