PHP代码审计|大纲|知识点



1、学习计划:审计项目漏洞Demo->审计思路->完整源码框架->验证并利用漏洞
2、学习内容:PHP,JAVA网站应用,引入框架类开发源码,相关审计工具及插件使用
3、必备知识点:环境安装搭建使用,相关工具插件安装使用,掌握前期各种漏洞原理及利用
4、开始前准备:审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等
5、挖掘漏洞根本:可控变量及特定函数,不存在过滤或过滤不严谨存在绕过导致的安全漏洞
6、代码审计的基本流程:
功能点或关键字分析可能存在漏洞
抓包或搜索关键字找到代码出处及对应文件
追踪过滤或接受的数据函数,寻找触发此函数或代码的地方进行触发测试

无涉及代码框架|SQL注入

Fortify代码审计工具下载以及简单使用:https://blog.csdn.net/weixin_61240867/article/details/131786965
简单sql代码分析:P50 14:00
听课笔记
1、若sql语句没有带入到mysql_query函数,那么不会产生注入漏洞。
2、定点挖掘技巧:
(1)、顶点挖掘关键啊字
可控变量:变量接受 get post 接受关键字 $ GET
特定函数:
输出 print
数据库操作函数
特定关键字:
select insert update sql执行语 == sgl注入漏洞
搜索特定关键字尝试寻找特定漏洞:
如:搜索echo print 尝试挖掘的就是xss漏洞
如:搜索$ GET $ POST 尝试挖掘的就是安全漏洞
(2)、定点挖掘功能点:
如:我要挖掘文件上传,会员中心存在文件上传的操作地址,抓包分析找到源码中的特定文件代码段,进行文件上传代码分析
挖掘!
拓展:视漏洞而定
sql注入 可以借助数据库监控-监控到当前页面和数据库的交互过程 (SQL执行语句)
断点调试: 访问页面对应代码进行断点调试(执行过程前后顺序,调用文件列表等)
可使用Seay源代码审计系统进行数据库监控、全局搜索关键字等(下载:https://github.com/f1tz/cnseay)
动态调试|Maccms SQL 注入分析(附注入盲注脚本):https://www.cnblogs.com/ichunqiu/p/9548754.html
双重编码绕过:源代码将%5c自动转为\,%25%35%63 转为%5c get出url编码
3、绕过魔术引号:宽字节注入、二次注入(需要insert与update配合且变量可控制)。
4、断点动态调试:https://www.cnblogs.com/ichunqiu/p/9548754.html

MVC|文件上传|断点调试

1、文件上传漏洞挖掘:
(1)关键字搜索(函数、关键字(源码注释)、全局变量等):比如$_FILES(获取上传文件的相关信息),move_uploades_file等
(2)应用功能抓包:寻找任何可能存在上传的应用功能点,比如前台会员中心,后台新闻添加等。
(3)漏洞举例:逻辑漏洞-先上传文件再判断后缀名,通过MIME类型来判断文件类型、前端校验文件类型而服务端未校验。
2、看函数时,看深紫色的函数。
3、断点调试
编译器:phpstorm、vscode–xdebug调试,用来观察文件上传所调用的函数。
4、MVC开发模式(思想)
模型Model – 管理大部分的业务逻辑和所有的数据库逻辑。模型提供了连接和操作数据库的抽象层。
控制器Controller - 负责响应用户请求、准备数据,以及决定如何展示数据。
视图View – 负责渲染数据,通过HTML方式呈现给用户。
https://www.cnblogs.com/wsybky/p/8638876.html
了解这个模型可以帮助更快找到文件上传核心代码
5、thinkphp
这是建立在MVC模式上的一个开发框架。
thinkphp以MVC为标准的一套框架。相当于thinkphp的框架是MVC,而基于thinkphp的网站的框架是thinkphp。
有框架的代码审计相当于审计这个框架。

项目类RCE|文件包含、下载、删除

1、一些漏洞关键字
SQL注入:
select insert update mysql_query mysqli等
文件上传:
$FILES,type=”file”,上传,move_upload_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等
通用关键字:
$GET $POST $REQUEST $FILES $SEVER
2、xhcms-无框架-文件包含跨站-搜索或应用-include
通过功能点或者关键字分析可能存在漏洞抓包或者搜索关键字找到代码出处
通过对应文件追踪过滤或者接受的数据函数
寻找出发此函数或者代码的地方进行触发测试
通过应用及URL地址等分析可能存在xss及包含安全
抓包找到xSS无过滤代码块及文件包含有后缀需绕过代码块
3、根据网站的功能初步判断网站有哪些漏洞,如涉及到用户交互的,那么首先应当猜想是否存在sql,xss
而涉及文件操作的比如说下载音频之类的,考虑文件操作类的漏洞。
4、黑盒无法得知参数,不易得知文件删除的传参,所以,文件删除漏洞一般存在于白盒代码审计中。
一般网站存在一个install.lock文件,如果此文件存在那就证明该网站的数据库不是初次安装;如果可以将这个文件删除,那么就会重新安装数据库,之前的数据全部清空(清空后,相当于这个网站被重置了,知道什么后果了吧)
unlink,delfile是php中对应删除的函数删除数据库安装文件,可以重装数据库。