当前位置: 首页 > news >正文

代码审计-PHP专题MVC开发控制视图URL路由文件定位SQL注入文件安全1day分析

//MVC源码架构

index.php/content/id/1

index.php?m=list&a=index&classid=11

-MVC流程:

1、Controller截获用户发出的请求;

2、Controller调用Model完成状态的读写操作;

3、Controller把数据传递给View;

4、View渲染最终结果并呈献给用户。

-MVC各层职能:

1、控制器Controller层–负责响应用户请求、准备数据,及如何展示数据。

2、模块Model层–管理业务逻辑和数据库逻辑,提供连接操作数据库的抽象层。

3、视图View层–负责前端模版渲染数据,通过HTML方式呈现给用户。

-MVC对审计主要影响:

1、文件代码定位问题

2、代码过滤分析问题

3、前端安全发现问题

PHP常见漏洞关键字:

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()等

通用关键字:

$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等

注释关键字:

通过开发者对代码的优化注释搜索功能代码段

MVC开发审计入口常见方法:

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

-功能法:框架MVC模型源码一般会采用功能点分析抓包追踪挖掘思路

-对比法:可以通过前后修复版本文件及代码不同特征进行针对挖掘思路

-特征法:数据库监控挖SQL注入,文件监控挖上传删除写入等,后续补充

-工具法:后续讲到(IASTDASTSASTAI项目等)

-调试法:动态插桩调试

MVC开发审计流程方法:

1、搞清URL路由对应(逻辑代码,静态页面等)

路由逻辑就是c文件下index目录下的List文件

http://127.0.0.1:85/index.php?m=list&a=index&classid=5

?m=list

ListAction.class.php文件

a=index

index目录

classid=5

就是这里的魔术方法

为了验证我们的猜想,我们在List文件下输出一个123,再看一下页面

2、搞清核心配置文件(提交接受,全局过滤等)

3、搞清是否为开发框架(ThinkPHP,Yii等)

LmxCMS MVC SQL注入

https://www.cnvd.org.cn/flaw/show/CNVD-2023-98192

https://www.cnvd.org.cn/flaw/show/CNVD-2019-05674

利用方式:Payload (URL编码两次,借助解码绕过)

绕过思路:name-->url解码-->filter_sql-->url解码

也就是说我们传入两层url加密代码,传入name后进行urldecode解码,然后传入filter_sql进行过滤,但是这里我们是一层url加密代码,然后在进行url解码从而造成sql注入

漏洞关键点在于这个p函数,这里将p传入$data,然后下面把name传入$data再传给$name。

再追踪一下这个p函数,看到这里有一个$mysql_retain

是过滤

但是我们目前没找到sql查询,我们再看其他函数

这里一个getNameDate方法,看起来像一个查询语句,控制where =name这里,在看其他方法

就在这下面有一个oneModel,我们在追踪看一下

我们再点击下面的oneDB,找到了sql查询语句

所以这里既找到了sql注入,也找到了可控变量

但是我们在前面找到了sql过滤,所以我们正常没办法进行注入的,但是有一个方法是关键

这个urldecode就是关键

我们先将payload加上去,然后再看一下,有报错提示

这里我们把payload进行url编码然后再进行url编码即可成功攻击,这里的关键在于我们url编码一次我们浏览器会自动解析一次,就成了普通没有编码的payload,但是我们注意到代码中有一个urldecode,也就是说他会再次进行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

1、搜索:

删除(unlink)->delbackdb#delOne()->BackdbAction.class.php

2、功能:

备份数据删除->delbackdb#delOne()->BackdbAction.class.php

admin.php?m=backdb&a=delbackdb&filename=../../1.txt

追踪一下就能找到这里

这里我们新建一个1.txt,尝试删除

成功删除

Rockoa MVC SQL注入(1)

参考文章:https://xz.aliyun.com/news/18185

安装搭建:http://www.rockoa.com/view_anzz.html

URL:a是方法 m是目录如果有多层目录则d是最外层目录 m由文件名|目录

路由地址:
http://127.0.0.1:85/index.php?a=check&m=login&d=&ajaxbool=true&rnd=360870
a代表方法、m代表目录、d是最外层

找到了这里

再看一眼表单数据

就是这里了,确定了url路由我们找sql注入的入口

入口就是opendkq这个文件下的insert方法

然后再追踪一下就能发现是sql语句相关的

代码审计:

既然我们找到了这个sql注入的入口,那我们就找一下谁引用了这个方法

在这里我们找到了谁引用了这个方法

这里可以看到是senddata方法引用了这个addkqjs这个方法

或者可以再看谁又引用了senddata这个方法,但是这里这个方法是私有方法,原本是想直接通过路由查找,所以我们继续查找谁引用了这个方法

这里能看到,有一个公共方法引用了这个senddata

这里我们也能看到type默认为9,刚好符合if后面的语句,因此我们就可以传入$sn的值即可

insert->opendkqAction.php->addkqjs()->senddata()->zktimeAction()

/task/openapi/opendkqAction.php文件下的zktimeAction方法

POST /index.php?m=opendkq|openapi&d=task&a=zktime HTTP/1.1

POST /index.php?m=opendkq|openapi&d=task&a=zktime HTTP/1.1

Host: 192.168.1.4:89

这里就存在延迟注入

{"xxx":{"sn":"123'andsleep(0)#"}}

Rockoa MVC SQL注入(2)

安装搭建:http://www.rockoa.com/view_anzz.html

URL:a是方法 m是目录如果有多层目录则d是最外层目录 m由文件名|目录

select->getuserid()->querydataAction()->openbaseAction.php

/task/openapi/openbaseAction.php文件下的querydata方法

这里getuserid使用来源在openbaseAction.php这个文件里面

这里getuserid控制$adminid,$adminid从baseoptid来的,并且basemodenum不能为空,才能进入到$uid

我们的攻击语句就是baseoptid

路由地址

POST /index.php?m=openbase|openapi&d=task&a=querydata HTTP/1.1

{"baseoptid":"1","basemodenum":"xxx' OR SLEEP(0.04)#"}


文章转载自:

http://VmkTcKDB.sftpg.cn
http://fv2sEhaZ.sftpg.cn
http://Mv1goDZm.sftpg.cn
http://gs4TMcxy.sftpg.cn
http://kglPOfRb.sftpg.cn
http://IrV4Wtou.sftpg.cn
http://ESwvAZrA.sftpg.cn
http://CNgy0dO1.sftpg.cn
http://JThURVts.sftpg.cn
http://2Mb1ORPk.sftpg.cn
http://HWwsnz0r.sftpg.cn
http://IfS9WeW1.sftpg.cn
http://f1vY6AJD.sftpg.cn
http://yuAmO0Qm.sftpg.cn
http://LV9GjrNI.sftpg.cn
http://Uhjqj8Op.sftpg.cn
http://edPGufJG.sftpg.cn
http://fUVB3iUN.sftpg.cn
http://uvInpRjz.sftpg.cn
http://mUfBId85.sftpg.cn
http://FZPbf3ZN.sftpg.cn
http://0iy8qvtQ.sftpg.cn
http://oylR9Bbt.sftpg.cn
http://hHjb4zoT.sftpg.cn
http://r6wlCN3z.sftpg.cn
http://rAFKkXvy.sftpg.cn
http://Wp44u4cT.sftpg.cn
http://iYkXquAT.sftpg.cn
http://t4CzMffx.sftpg.cn
http://cCb8i7bl.sftpg.cn
http://www.dtcms.com/a/388241.html

相关文章:

  • npm install 报错 proxy...connect ECONNREFUSED 127.0.0.1:xxxx
  • 第九章 Arm C1-Premium 核心内部内存直接访问指南
  • 微信小程序-7-wxml常用语法和发送网络请求
  • 数据结构9——树
  • 第三方软件测评机构:【Python Requests库实战教学】
  • 信用违约风险分类预测:XGBoost +SHAP实践案例
  • TypeScript 基础
  • 蔡勒公式的介绍
  • 云蝠智能大模型呼叫全栈适配阿里云国产GPU
  • OpenCV与深度神经网络的风格迁移
  • 百度股价突破120美元创年内新高,AI云成为增长新引擎
  • EFFICIENT STREAMING LANGUAGE MODELS WITH ATTENTION SINKS论文阅读
  • Blockview
  • [Dify] Agent 模式下的流程自动化范式解析
  • Java泛型:类型安全的艺术与实践指南
  • React+antd实现监听localStorage变化多页面更新+纯js单页面table模糊、精确查询、添加、展示功能
  • 事件驱动临床系统:基于FHIR R5 SubscriptionsBulk Data的编程实现(中)
  • 电源滤波器如何“滤”出稳定电力
  • 非连续内存分配
  • CKA08--PVC
  • 贪心算法应用:分数背包问题详解
  • What is Vibe Coding? A New Way to Build with AI
  • 【Anaconda_pandas+numpy】the pandas numpy version incompatible in anaconda
  • 【3D点云测量视觉软件】基于HALCON+C#开发的3D点云测量视觉软件,全套源码+教学视频+点云示例数据,开箱即用
  • 卡尔曼Kalman滤波|基础学习(一)
  • MoPKL模型学习(与常见红外小目标检测方法)
  • 数据驱动变革时代,自动驾驶研发如何破解数据跨境合规难题?
  • Cmake总结(上)
  • Linux笔记---非阻塞IO与多路复用select
  • 一文读懂大数据