[HackCTF]Pwnable - third line
1. bof_pie
binary :
main은 볼게 없다. 들어가자마자 welcome이 실행됨
welcome :
j0n9hyun :
대충 페이로드가 생각이났다. 근데 PIE가 걸려있어서 base주소로 할 수가없다. 그러므로 welcome_addr에서 welcome_offset을 빼서 base_addr을 구하고 거기에 j0n9hynun_offset을 더해서 j0n9hyun을 실행시킬 것이다.
exploit :
2. yes or no
binary :
3. RTL_world
binary :
NX가 있으니가,, RTL 을 하자 > 그냥 문제 이름도 RTL이다.
main :
이 부분에서 bof가 발생하고 우린 여기서 rtl을 해주면 된다.
exploit :
바이너리를 확인해서 dummy(144) + sys_addr + dummy(4) + sh_addr로 페이로드를 구성했다.
p.s 이외에도 코스에서 돈을 벌어서 shell sword를 구입하면 주소를 던져주는데 이건 libc에 /bin/sh주소니까 딱히 신경 안써도 될 것 같다. 그리고 나는 문제를 풀 때 도커환경에서 gef를 사용하는데 원래는 페다에서 start > find "/bin/sh" 했던게 gef에서는 start > grep "/bin/sh"을 해서 주소를 찾아야한다. 그리고 sys_addr은 그냥 info func에서 system@plt주소로 찾았다.
4. g++ pwn
binary :
vuln.c :
get_flag.c :
exploit :
우리는 dummy(60)+sfp(4) 총 64개를 채우고 ret에 get_flag를 넣어야하는데 위에 vuln.c를 보면 32개 밖에 입력을 못받는다.
그래서 I가 You로 치환되는걸 이용하여 I를 21개 > You 63개 + A해서 64개를 맞춰주고 뒤에 flag_addr을 넣었다.