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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM