目录
工具和常见的几种思想
常见的点
一套简单的CMS源码审计
总结
这篇是关于php;
常见的也是php的代码审计,类似java框架,asp.net,python的Django还是有漏洞之类的,只是比较固定和稀少;
像php这种语言本身就是弱语言类型(很多点都利用了弱类型比较和转换),功能函数也是奇多(导致了其与sql,xml等语言的花式组合),加之处理一个问题的方法也是奇多(其中就难保不会出现漏洞)
当然php的thinkphp框架,有机会来(这款框架就安全性没有其他几种语言那么强的安全措施,倒转还有一个烂大街的log写webshell的常见问题,以及最近挺火的远程代码执行)
1
工具和常见的几种思想
1工具
这里 我介绍两款免费常用的审计工具和一款php编写调试工具
1.Seay源代码审计系统
下载地址:
https://www.waitalone.cn/seay-source-code-auditv2.html
2.(PHP代码审计工具——rips)
下载地址:
https://sourceforge.net/projects/rips-scanner/
使用教程:
https://www.cnblogs.com/Jewel591/p/7477483.html
3.phpstorm
如果对于版本没有什么要求
直接按照http://www.3322.cc/soft/17468.html激活即可
这款工具的调试运行,作者还是多提醒一点
.php等文件必须在www文件夹下,其他的搜下就知道了
4.xdebug
这款debug暂时还没有用,不过看各位前辈经常用到,特提出来
2几种常见的审计思想
其实个人认为就两种,由点破面,由面破点
当然还有
1.由点破面
根据经验和工具找漏洞关键词,来溯源调用过程
看是否可控,可控后看调用的输入入口
如果单个可控条件满足我们的要求,但是无法实施漏洞触发,再全局看下哪里有满足我们条件的地方,组合起来触发
其中用到我们的工具Seay源代码审计工具
2.由面破点
通读全文,理清大意,再根据问题关键词,勾画对应位置 ---英语阅读
深入理解一套CMS源码就是这样
3.如果追求速度,那么无疑第一种最好,也是入门首选,暂时只专注于问题地方(作者目前也是用的第一种)
2
常见的点
这里就不写那些有的没的了,只详细给出作者认为个人目前阶段审计挖掘常用的点
1推荐学习
1.php常见漏洞
2.php常见漏洞函数
3.有一个代码审计的项目蛮有趣的,
https://github.com/hongriSec/PHP-Audit-Labs,也是作者这几天在学习的内容
4.这里还是想推荐sqli-labs注入天书,因为审计中存在很多硬刚sql注入的正则绕过
5.也可以参考作者的个人博客总结
http://47.106.140.244/2018/09/%e5%88%9d%e6%8e%a2php%e5%ae%a1%e8%ae%a1/
http://47.106.140.244/category/%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/
2分类
太多,显得臃肿,太少,显得不走心
所以这里作者把知识点分类(读者也可以自己去找下思维图)
分类
0.防护类
1.sql注入
2.代码或命令执行
3.文件操作
4.其他类
5.其他的情况
0.防护类先把它单独拉出来分析,总没错
sql,xss过滤函数等等
无外乎看看正则过滤,preg_replace,replace等等
具体的绕过,下面分析
1.SQL注入类这个问题,作者反复想了下
主暂时分为三类
没有任何防护
硬刚正则
二次注入
没有任何防护
漏洞嘛,多找找,极具耐心,总能找到一个点的
翻看了以前dede的漏洞,发现很多都是漏掉的防护点导致的问题
自己以前审计的大米cms的存储xss,就是没有任何防护,sql防护倒是可以
不多说
硬刚正则这个可能是极有意思的主题了
目前看到绕过正则的一共这几种
(1)查找正则匹配遗留的关键词
等于= 换成regexp like等
延时注入的代替 推荐一篇文章:https://www.cdxy.me/?p=789
除开-- + -- - # %23等,还有一个很有意思的注释 ;%00
(2)其实,更多的作者看到的结合其他的奇思绕过(注释,闭合)
hpp污染,md5(str,true),超全局变量覆盖,request请求的差异等,addslashes函数和gpc滥用
这个作者只有提醒下,具体要自己慢慢接触
二次注入也简单分为两种
a.入数据库函数一次,出数据库函数一次,就还原了
b.利用其他没有检查的数据进行注入
作者看到的大多数情况都要和其他齐思结合,只能说有一个点有问题,就再去寻找另一个点与之结合突破
2.代码或命令执行像system eval 函数系统命令调用,反引号,动态函数执行就不在这讨论了,遇到了就去考虑绕过或者替换就行了
有一个点作者一直觉得很有意思,preg_replace /e修正执行代码
如果在构造正则表达式的时候,使用了/e修正符,这时,preg_replace() 就会将 replacement 参数当作 PHP代码执行。但是replacement一般都是开发者事先写好的,这是就要考虑怎样去替换掉了,超全局变量覆盖,get,post,request的请求解析顺序,hpp污染
3.文件操作作者分为四类 :上传绕过,任意文件读写,任意文件删除,文件包含
具体文件操作函数,读者自己搜下,因为都有用,所以就不挑到写了
上传绕过作者不多说什么函数问题,个人觉得黑盒的一个知识更有趣;可以不会其他,这个必须会,拿shell呀
https://github.com/c0ny1/upload-labs 推荐一套github上的源码,有20个知识点吧,就不复制过来占位置了
https://github.com/LandGrey/upload-labs-writeup/ 这套源码的解题答案(本来想写文章的,看了这篇解题,瞬间写的想法没有了,哈哈哈)
http://47.106.140.244/2018/10/%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e7%9a%84%e5%a7%bf%e5%8a%bf/ 个人博客关于文件上传的总结
任意文件读写个人遇到比较多的还是log的写shell,如thinkphp的问题
其他的看到后台写模板的情况比较多
任意文件删除
一个很容易忽视的点,开发人员和审计人员
任意文件包含
分为本地包含和远程包含,看配置文件
一般是绕过正则,进行其他有用文件的包含以及php伪协议进行其他文件内容的查看
4.其他类这个点是作者认为最有意思的,因为前面写的很多地方都有总结
这个点的宗旨就是结合各种情况进行利用
前面其实作者都写了,只提一点核心思想
既是 “有一个点有问题,就再去寻找另一个点与之结合突破”
5.其他的情况不谈学习知识,能不硬刚正则就不硬刚
这种,作者比较关心的偏门的地方和情况
header头的sql注入暂不谈crlf注入以及xss等头跳转,是开发人员对user-agent,refer,cookies进行了一个数据库的入库查询,但是并没有像post和get的数据一样进行check_sql和check_xss等检查
就构成了没有任何防护的注入
其中也有可能系统开了gpc的,但由于它们是在$_SERVERE变量中不受GPC的影响,那我们就可以去查找HTTP_CLIENT_IP和HTTP_X_FORWARDFOR关键字来快速寻找漏洞
宽字节只提一笔 也是gpc的问题有些CMS源码中并没有判断gpc情况,直接addslashes一次,如果本身就开启了,相当于两次转义了,可以使用函数 get_magic_quotes_gpc() 进行检测
超全局变量常见的三个$GET $POST $REQUEST,当然还有其他$FILE等
这个有什么用?变量覆盖结合其他点进行绕过,注入,写文件,getshell等
PHP-Audit-Labs项目day-15,还是day-14就有一个题,可以去看看
这里给出一个很有用的知识点php中双引号解析变量、而单引号不解析变量(相信很多新手都有一会双信号,一会单引号的习惯)
运行
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?


微信扫码登录