# 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
2
3
4
5
6
7
8
9
10
# 如下
SQL注入:select insert update mysql_query mysqli等
文件上传:$_FILES,type="file",上传,move_uploaded_file()等
XSS跨站:print print_r echo sprintf die var_dump var_export等
文件包含:include include_once require require_once等
代码执行:eval assert preg_replace call_user_func call_user_func_array等
命令执行:system exec shell_exec `` passthru pcntl_exec popen proc_open
变量覆盖:extract() parse_str() importrequestvariables() $$ 等
反序列化:serialize() unserialize() __construct __destruct等
其他漏洞:unlink() file_get_contents() show_source() file() fopen()等
  • RCE 挖掘思路

常规或部分 MVC 模型源码可以采用关键字的搜索挖掘思路。

框架 MVC 源码一般会采用功能点分析抓包追踪挖掘思路,可能会把代码进 行封装,不在用原有的函数而是采用框架封装后的代码。

依然是从函数出发,全局搜索出来可能执行系统命令的函数如 system,查 看是否有可控变量,进行追踪变量,判断是否能绕过相关过滤。

  • linux 命令拼接

通过 & 或者 | 可以拼接命令,如果前边或者后边的语法有问题则会报错但是拼接另外一边的正确命令仍然会被执行,如 xxxx&id&1.txt 则会出现 id 的执行效果。

# php 反序列化

  • 自动审计或搜索关键字找到文件及代码段
1
2
3
4
5
6
7
8
9
10
11
12
# 寻找关键词unseriral(),找到之后判断魔术方法会执行到哪里,看是否能执行到魔术方法,进行构造,伪造参数绕过相关过滤。
__wakeup() //使用unserialize时触发
__sleep() //使用serialize时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发
__invoke() //当脚本尝试将对象调用为函数时触发

# 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 代码审计(没听)

没听懂,我日他妈,真他妈难

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝