# php 代码审计
# php sql 注入
1day 去敏 cnvd 漏洞复现:
- 梦想 CMS 后台 Bo***.cl***.php 文件存在 SQL 注入漏洞
漏洞说明:https://www.cnvd.org.cn/flaw/show/CNVD-2020-59466
http://localhost:8081/lmxcms1.4/admin.php?m=book&a=reply&id=1)%20and% 20updatexml(0,concat(0x7e,user()),1)%23
通过寻找到漏洞存在的文件,查找相关的 sql 注入,根据可输入的变量与变 量在代码中的执行流程来寻找,跟踪变量在代码中的行走轨迹,并进行过滤的 绕过,最后将数据库中执行的代码打印出来进行闭合并爆出敏感信息
- LmxCMS V1.4 前台 Ta***.cl***.php 存在 SQL 注入漏洞
漏洞说明:https://www.cnvd.org.cn/flaw/show/CNVD-2019-05674
对比 1.4 与 1.41 文件代码不同更方便 - Beyond Compare 4
http://localhost:8081/lmxcms1.4/?m=tags&name=%25%36%31%25%32%37%25%.....
进行新旧版本的对比之后,寻找更新的代码,用 beyond 工具可以很方便的,看出来被更新过的文件,通过更新来判断哪些漏洞被修复依次来判断出之前的 版本的漏洞的产生点。其次,此漏洞是因为用户的浏览器会自动进行一次 url 解 码,而前台的代码仍旧含有 urldecode 函数,导致用户编码两次的恶意 sql 注入 代码被执行。
# php 文件操作
- 文件读取
有敏感的函数,是从敏感函数全局搜索跟踪变量,进行可控变量的寻找, 然后绕过相关过滤机制,进行任意文件读取的一种操作。
- 文件下载
从功能点挖掘,因为是没有文件下载对应函数的,抓包分析对应代码,看 下载的变量是否可以控制,追踪此变量所在的方法及最终被谁控制的,这个控 制此变量的因素是否能人为的修改,如果能够人为修改,是否有相应的过滤, 有过滤的话还需要绕过过滤;需要将网站界面代码和数据库统统对应上,分析 数据库中的数据来源及人为可控程度,进而依据此漏洞来读取敏感文件如数据 库配置文件。
- 文件删除
关键字挖掘 - 文件删除搜索关键字 unlink,对应函数 del_file,查看调用,后 台 delfile 函数调用,如何处理 delfile 函数,受参数控制,进行测试,构造 Payload - 确定过滤 - 重新构造 Payload - 配合重装机制实现重装漏洞。
- 未授权漏洞配合文件删除
代码执行逻辑问题,文件在后台被删除的时候虽然已经跳转到了登录界面,但是仍然可以继续执行此前的代码,导致恶意命令执行成功。
# php RCE
- 常见漏洞关键字
1 | 如下 |
- RCE 挖掘思路
常规或部分 MVC 模型源码可以采用关键字的搜索挖掘思路。
框架 MVC 源码一般会采用功能点分析抓包追踪挖掘思路,可能会把代码进 行封装,不在用原有的函数而是采用框架封装后的代码。
依然是从函数出发,全局搜索出来可能执行系统命令的函数如 system,查 看是否有可控变量,进行追踪变量,判断是否能绕过相关过滤。
- linux 命令拼接
通过 & 或者 | 可以拼接命令,如果前边或者后边的语法有问题则会报错但是拼接另外一边的正确命令仍然会被执行,如 xxxx&id&1.txt 则会出现 id 的执行效果。
# php 反序列化
- 自动审计或搜索关键字找到文件及代码段
1 | 寻找关键词unseriral(),找到之后判断魔术方法会执行到哪里,看是否能执行到魔术方法,进行构造,伪造参数绕过相关过滤。 |
# tp 代码审计
- tp 框架漏洞挖掘
一般分为 1day 和 0day,1day 的话是网络上已经确定了有此版本对应框架的 漏洞,但是未公开处来 poc,在 github 上也能搜索到安全更新等关键词,可以拿 到新更新的源码和之前的版本用 beyond 版本进行对比,审计 1day 代码审计, 获取 1day 的 exp。
主要还是查代码,走流程,看功能或者特定函数,看过滤,判断能否绕过,打断点,追踪数据流,对应 url 地址与代码端进行漏洞的挖掘。框架 0day 就别 想了,太难了,可以对照搞几个 1day 尝试一下。
- 利用官方更新说明探针
https://github.com/top-think/framework
https://github.com/Mochazz/ThinkPHP-Vuln
# net 代码审计
asp.net 可以用 C# ,VB.NET ,Jscript.net 等等来开发,但是通常首选都是 C#和 VB.NET,审计 asp.net 的时候,首先得弄明白他的结构,他并不像 php 那么单纯。在 asp.net 应用中,需要进行观察的文件有:.aspx,.cs,.ashx,dll。
.aspx 是页面后的代码,aspx 负责显示,服务器端的动作就是在.cs 定义的
.cs 是类文件,里边是程序和函数
.ashx 是一般处理程序,主要用于写 web handler, 可以理解成不会显示的 aspx 页面
.dll 就是 cs 文件编译之后的程序集
# java 代码审计(没听)
没听懂,我日他妈,真他妈难