作者简介
李斌,现汽车之家高级安全工程师,资深白帽子。曾职于奇虎360多年,熟悉代码审计、渗透测试等Web安全领域。
前言
不知不觉代码审计的艺术系列已经陪大家走了十季,已有十篇非常精彩的内容,感兴趣的同学可以查看以下的链接:
白帽子分享之代码审计的艺术—第七篇
设计缺陷和逻辑相关的漏洞是目前漏洞挖掘者比较关注的。
最近在国外漏洞披露平台hackerone上就有位白帽子挖掘到了Uber的一个修改任意账户密码的逻辑漏洞获得了$10000的丰厚奖励。
所以如何在源码中找逻辑漏洞是安全和开发人员必须熟悉的技能,主要总结了安装问题、找回密码这两篇内容,本篇讲的是代码审计中的安装问题。
0x01 设计缺陷&&逻辑漏洞挖掘的脑图:
0x02 无任何验证 :
程序安装完成后不会自动删除安装文件,也不会生成lock来判断是否安装过导致的重装漏洞,之前出现过的漏洞代码如下:install/index.php
install的引导文件里没有判断lock导致可以直接重装
0x03 代码的逻辑问题 :
1.Step1判断lock文件可直接Step2绕过
install/index.php的缺陷代码和分析如下:
2. 判断lock文件的代码有问题
还有一种是在判断lock文件是否存在的代码上有问题了,我们看下缺陷代码:
可以看到这里判断了Lock是否存在,但是if(file_exists($lockfile) && ($_a=='template' || $_a=='setting' || $_a=='check')这里除了判断lock还判断了$_a,并且使用&&导致$_a为空时就绕过了lock的验证最终导致可继续重装。
0x04 变量覆盖 :
在install/index.php中
file_exists($insLockfile)这里判断lock文件是否存在并退出,但是这行代码foreach($_request as $_k => $_v) ${$_k} = _runmagicquotes($_v);存在变量覆盖,所以可以直接将$insLockfile变量覆盖为1就使得file_exists($insLockfile)的返回为0,从而可以继续重装。
0x05 判断lock后无exit :
缺陷代码如下:
检查是否存在install.lock,然后用javascript的方式告诉用户“系统已安装过”,然后跳转。问题在于这个脚本根本还没有使用exit函数来结束,程序会继续运行,导致可继续重装。
本篇的内容,我们就介绍到这里,下一篇欢迎持续关注。
其他推荐:
1、重磅分享 | 白帽子黑客浅谈顾问式销售与服务
2、安全观点:企业信息安全十大痛点,你中招了?
3、招人必看!301浅谈国内安全人才薪酬现状
4、白帽黑客成长独白:301消失的那几年
5、邻居说WiFi安全不重要,结果被“黑”傻了
6、美女iPhone丢了后,黑客跟妹子干了这样一件事
7、不看后悔:为什么企业招不到安全人才?你知道吗?
8、我有笔钱,想给你。
长按二维码关注301公众号