ciscn_2019_c_1 1

步骤:

先checksec,看一下开启了什么保护

可以看到开启了nx保护,然后把程序放入ida里面,观察程序代码

先shift+f12观察是否有system和binsh函数

 

 

 发现没有system和binsh函数,所以我们考虑可以用libc泄露来做这道题

进入程序得主界面

 

 在进入encrypt程序中按f5查看伪c代码

 

 

 

 

 

 

我们可以看到程序对输入得大小写和字符等进行了一个简单的加密,

注意if(v0>=strlen(s))可以跳出这个if循环

而strlen()函数的特性时读取到\0时会结束所以我们可以payload前以\0开头,从而绕过if加密

接下来我们判断需要溢出的字符数量

 

 

 

 

 

 

 可以看到需要88个字符可以造成溢出,而\0站一个字符所以我们在加上87个a就可以造成溢出

由此构建我们的exp

完整exp如下

 

 

 

注意:在第一个payload中我们需要让程序获得libc后能继续返回到程序初,所以我们将返回地址设为了mian的地址

           在第二个payload中,该程序在unbantu中的64位程序,所以我们还需要一个ret_addr来让payload保持栈对齐

            本地和远程所获得的libc版本是不一样的,当本地失败后,远程试一下

 

 

 

 

 

 成功获得 flag

 

posted @   庄周恋蝶蝶恋花  阅读(1362)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示