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 @ 2021-07-20 13:39  庄周恋蝶蝶恋花  阅读(1350)  评论(2编辑  收藏  举报