记录一次lmxcms审计sql注入到rce审计全过程

欢迎各位师傅关注我的个人公众号: Gat4by

前言:马上过年了就要忙起来了,后面大年初一初二可能没时间玩电脑了,趁着这几天手感火热,审一审比较著名的梦想cms。

项目源码: http://www.lmxcms.com/down/

安装好了这个cms后台进去长这样,看着这界面写的挺糙的,一眼满是漏洞的感觉,今天来审计练习一下RCE漏洞。

我审计PHP的CMS的RCE的思路就是先去找是否有eval()函数的存在,先来一手全局查找eval()函数,接着我们锁定eval()函数中是变量而不是预定义常量的。

于是来到一处eval()函数处,这里很奇怪eval函数是根据$temdata的data字段取值出来,也就是说他是根据传入变量的data列取出参数,开发人员还是比较谨慎,data都是提前写好放进数据库里的,那么我们跟进一下数据库看看。

$temdata是调用model模型类的caijiDataOne()方法获取的,并且GET请求获取到的参数cid作为传入参数。

接着让我们跟进一下caijiDataOne()方法,发现做了一个sql查询。

因为我本地环境这里没有预设该表所以为空表,但是正常的业务逻辑也不会使得data列中有诸如whoami什么的语句,那不送洞给黑客嘛。

此时再观察一下我们的cms的url不难发现,其实管理员admin.php为其后台管理入口路由,通过m和a来进行调用程序。

这是管理员登录进入后的页面admin.php?m=Index&a=index。

管理员登录页面 admin.php?m=Login&a=index。

其实此时便可以猜测该cms的管理员路由其实是由m和a两个参数来进行索引,m表示加载的controller文件。

回到我们刚刚存在eval()函数的php文件中,先来看项目架构,这里我审计的是后台漏洞,就主要看以下几个部分,c目录应该就是controller层,controller下还有admin、index、install这些目录,重点我们关注admin目录。

然后发现刚刚登录调用的是LoginAction.class.php所以路由中m=Login,那么我们要寻找AcquisiAction.class.php的路由自然是m=Acquisi。

接着还有个发现,发现该路由中存在许多方法比如index(),login()这些的,然后index()是判定登录状态的,没有登录则会跳转到登录页面,我这里猜测了一下a传参应该就是调用路由中的方法,那么我们再登录抓包验证一下。

好家伙!到这里我们代码审计的路由寻找问题解决了,此时已经知道m是路由对应的是c/admin下的action控制文件,a代表调用其文件中的方法。

回到我们要审计的文件开始进行审计,路由就是m=Acquisi&a=showCjData。

阿巴阿巴......一来就直接sql报错,不道怎么回事0.o?

打上断点开始调试咯,开始给lid,id,cid这几个参数进行传参。

单步调试,先给lid进行传参,从mysql监控器中发现是一点都没过滤啊。

但是页面出现报错,意思是咱们字段不匹配,union查询后跟的字段数应该和前一个select查询字段数语句相同,前面那个select语句是查询全部字段,查的是lmx_cj_list表。

那个表居然有29个字段!!!

那么试试新的payload,我这里为了防止字段类型不匹配导致报错,所以全设置的为null,接着奇怪的地方来了,payload在web报错了,但是查看sql监控后带入数据库管理工具又能成功执行,说明便不是该字段的问题,想起还有两个字段没有尝试,都尝试尝试下

lid=1 union select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null --+

新添加字段id=1和cid=1,web报错后此时看sql监控,发现其他两个参数lid和cid压根没有带入,但是根据前面我们成功用payload带入到sql查询语句,说明lid字段是可控的,很大概率存在sql注入,剩下的应该看如何构造sql语句了。

因为cid是通过get方式获取的,所以cid以get方式传参,另外两个参数我们尝试丢postdata中传参,三个参数此时都带入sql语句中了。

我们对另外两个字段尝试使用union select拼接看看,同样的报错因为union前后select查询的字段数应该相同。

不得不说sql监控工具yyds!此时知道了id参数查询的表为lmx_cj,另一个参数cid貌似没带入sql语句中执行,先解决lmx_cj表的字段匹配问题。

4个字段,postdata更改payload。

lid=1 union select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null --&id=1 union select null,null,null,null --

此时又发现了报错,同样是字段不匹配的问题。

我们查看sql监控工具,一切豁然开朗!我之前id=select 1,2,3和cid=select 4,5,6就是为了区别不同表的相同参数id,因为sql报错只报错一个所以先解决第一个带入查询的id对应的lmx_cj表的字段id,接着发现get请求的cid对应的是lmx_cj_data的id,那么继续解决union的字段匹配问题。

cid对应数据表有七个字段 。

完整payload如下。

此时三个参数的sql构造问题得到完美解决,三个参数可控且成功将payload带入执行!

以下这两行代码很关键,我们逆推eval()函数执行$data是从$temdata的data字段获取的,$temdata又是通过cid进行查询的,再看sql监控,当我们带入cid查询时是查询的lmx_cj_data表。

这里跟进一下 caijiDataOne()函数同样可以证明是lmx_cj_data表,其表第三个字段即是要取的data列数据。

那么思路就明确了,我这里本地演示的是空表,但是实际情况下别人不可能是空表,此时就要利用select union select 的特性来构造无中生有,当前面的select查询的数据无效,则会判定union后的select语句来进行查询结果带入回显,我们使得cid对应的payload的第三个null改为phpinfo();即可,但是此时依然报错,且sql监控没我们的关于lmx_cj_data表的执行语句。

判断应该是构造闭合的问题,我们接着打上引号闭合好phpinfo();

看看cid=1 union select null,null,'phpinfo();',null,null,null,null

发现成功执行phpinfo(),rce到手!

Sql监控跟踪发现成功带入phpinfo();

总结: 在代码审计过程中,发现存在sql语句交互且eval()函数执行参数是从sql语句查询出来的,这时候先查看是否存在sql注入,可以先利用union select查询空字段去判断sql语句是否成功带入payload,带入后我们再进一步去尝试rce。

  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
lmxcms1.4更新内容包括: 增加功能: 增加采集功能,采集功能非常强大,绝对可比拟市面上的任何cms的采集功能 增加上传图片生成缩略图可以根据宽度自动缩放高度比例 增加tags可以绑定栏目 增加随机信息调用标签 randdata 使用方法看手册 增加随机调用tags标签 randtags 使用方法看手册 后台去除嵌入广告 修复功能: 数据库恢复(注意:请在升级完成后重新备份数据库,避免以前备份过的无法恢复) 搜索时间间隔参数无效的bug 修复执行sql语句由于表前缀导致的错误 相关链接标签链接有误的bug lmxcms基于php语言和mysql数据库开发,系统采用业界流行的MVC设计模式开发,使得系统结构更加清晰明了,便于进行二次开发和管理,并且lmxcms内嵌了smarty模板引擎,使程序与模板分离,如果您足够了解lmxcms完全可以自定义模板标签。 lmxcms1.4主要包括以下功能: 自定义模型:可以完全自由的根据网站需要添加修改所需字段。系统安装默认自带新闻模型和产品模型。 纯静态html生成:支持纯静态html生成,不仅可以减少数据库请求,加快页面载入速度,也更加适合搜索引擎优化(SEO)。 自定义表单:可以自由创建表单字段,每个表单可以自由组合表单所需要字段。 站内搜索:自由组合搜索条件,包括按照模型、栏目、字段、搜索模板、时间范围等,并且支持搜索关键字记录。 友情链接:支持文字和图片形式的友情链接。 广告系统:后台支持文字、图片、html三种形式的广告系统。 在线留言:支持自定义开启和关闭留言板,留言板页面支持调用留言数据。 焦点图系统:后台可以创建焦点图片,并且系统默认了5种样式的焦点图。 数据备份:后台可以备份和恢复数据库,并且可以自由下载数据库到本地。 模板管理:后台支持自定义切换模板风格,支持在线编辑模板(需要修改配置文件)。 文件管理:系统内嵌了swfupload上传插件,可以在文件管理里面来管理后台上传的各种图片、文件、附件等。 扩展变量:支持自定义扩展变量,可以在模板任意处输出该变量内容。 日志操作:后台的每一个操作都会记录到日志操作中,有需要时查看。 Tags功能:支持tags标签功能,增加信息可以选择或者自动创建,每个tags标签也可以定义不同的模板。 采集系统:支持图片远程保存,图片的各种处理等。 专题功能:支持自定义创建专题功能,增加信息可以选择专题,每个专题可以定义不同模板等。 自动、手动分词:增加、修改信息时,可以选择自动把正文或者标题提取为关键字功能。 提取描述:增加信息时可以选择自动提取正文中的第一段为描述信息。        相关阅读 同类推荐:lmxcms后台密码找回插件 企业网站源码
lmxcms基于php语言和mysql数据库开发,系统采用业界流行的MVC设计模式开发,使得系统结构更加清晰明了,便于进行二次开发和管理,并且lmxcms内嵌了smarty模板引擎,使程序与模板分离,如果您足够了解lmxcms完全可以自定义模板标签。 lmxcms主要包括以下功能: 自定义模型:可以完全自由的根据网站需要添加修改所需字段。系统安装默认自带新闻模型和产品模型。 纯静态html生成:支持纯静态html生成,不仅可以减少数据库请求,加快页面载入速度,也更加适合搜索引擎优化(SEO)。 自定义表单:可以自由创建表单字段,每个表单可以自由组合表单所需要字段。 站内搜索:自由组合搜索条件,包括按照模型、栏目、字段、搜索模板、时间范围等,并且支持搜索关键字记录。 友情链接:支持文字和图片形式的友情链接。 广告系统:后台支持文字、图片、html三种形式的广告系统。 在线留言:支持自定义开启和关闭留言板,留言板页面支持调用留言数据。 焦点图系统:后台可以创建焦点图片,并且系统默认了5种样式的焦点图。 数据备份:后台可以备份和恢复数据库,并且可以自由下载数据库到本地。 模板管理:后台支持自定义切换模板风格,支持在线编辑模板(需要修改配置文件)。 文件管理:系统内嵌了swfupload上传插件,可以在文件管理里面来管理后台上传的各种图片、文件、附件等。 扩展变量:支持自定义扩展变量,可以在模板任意处输出该变量内容。 日志操作:后台的每一个操作都会记录到日志操作中,有需要时查看。 Tags功能:支持tags标签功能,增加信息可以选择或者自动创建,每个tags标签也可以定义不同的模板。 专题功能:支持自定义创建专题功能,增加信息可以选择专题,每个专题可以定义不同模板等。 自动、手动分词:增加、修改信息时,可以选择自动把正文或者标题提取为关键字功能。 提取描述:增加信息时可以选择自动提取正文中的第一段为描述信息。 lmxcms v1.3 更新日志: lmxcms1.3增加功能: 加入专题功能 加入tags标签功能 静态模式下可以使用中文路径(服务器或者空间必须支持中文文件夹),否则为拼音模式,可以在 config.inc.php中设置路径模式 加入伪静态访问模式 加入栏目绑定域名功能 需要配合域名解析 加入后台登录密码错误次数限制 加入控制后台操作日志开关 /inc/config.inc.php 参数控制 增加设置内容信息关键字和关键字链接 增加提取正文为描述信息 增加提取标题或正文为关键字 修改内容信息页面布局 lmxcms1.3修复: 修复图片上传、水印错误 修复删除图片、文件不删除本地文件的错误 修复数据库备份因数据量过大导致内存溢出错误,优化数据库备份、恢复、下载功能
lmxcms基于php语言和mysql数据库开发,系统采用业界流行的MVC设计模式开发,使得系统结构更加清晰明了,便于进行二次开发和管理,并且lmxcms内嵌了smarty模板引擎,使程序与模板分离,如果您足够了解lmxcms完全可以自定义模板标签。 lmxcms1.4主要包括以下功能: 自定义模型:可以完全自由的根据网站需要添加修改所需字段。系统安装默认自带新闻模型和产品模型。 纯静态html生成:支持纯静态html生成,不仅可以减少数据库请求,加快页面载入速度,也更加适合搜索引擎优化(SEO)。 自定义表单:可以自由创建表单字段,每个表单可以自由组合表单所需要字段。 站内搜索:自由组合搜索条件,包括按照模型、栏目、字段、搜索模板、时间范围等,并且支持搜索关键字记录。 友情链接:支持文字和图片形式的友情链接。 广告系统:后台支持文字、图片、html三种形式的广告系统。 在线留言:支持自定义开启和关闭留言板,留言板页面支持调用留言数据。 焦点图系统:后台可以创建焦点图片,并且系统默认了5种样式的焦点图。 数据备份:后台可以备份和恢复数据库,并且可以自由下载数据库到本地。 模板管理:后台支持自定义切换模板风格,支持在线编辑模板(需要修改配置文件)。 文件管理:系统内嵌了swfupload上传插件,可以在文件管理里面来管理后台上传的各种图片、文件、附件等。 扩展变量:支持自定义扩展变量,可以在模板任意处输出该变量内容。 **志操作:后台的每一个操作都会记录到**志操作中,有需要时查看。 Tags功能:支持tags标签功能,增加信息可以选择或者自动创建,每个tags标签也可以定义不同的模板。 采集系统:支持图片远程保存,图片的各种处理等。 专题功能:支持自定义创建专题功能,增加信息可以选择专题,每个专题可以定义不同模板等。 自动、手动分词:增加、修改信息时,可以选择自动把正文或者标题提取为关键字功能。 提取描述:增加信息时可以选择自动提取正文中的第一段为描述信息。 lmxcms1.4更新内容包括: 增加功能: 增加采集功能,采集功能非常强大,绝对可比拟市面上的任何cms的采集功能 增加上传图片生成缩略图可以根据宽度自动缩放高度比例 增加tags可以绑定栏目 增加随机信息调用标签 randdata 使用方法看手册 增加随机调用tags标签 randtags 使用方法看手册 后台去除嵌入广告 修复功能: 数据库恢复(注意:请在升级完成后重新备份数据库,避免以前备份过的无法恢复) 搜索时间间隔参数无效的bug 修复执行sql语句由于表前缀导致的错误 相关链接标签链接有误的bug
当面试官询问我SQL注入、XSS、文件上传以及RCE远程命令执行漏洞的相关知识时,你可以使用以下话术进行回答: 1. 面试官:请介绍一下SQL注入漏洞。 你:SQL注入是一种常见的web应用程序漏洞,攻击者通过在用户输入中插入恶意的SQL代码,成功绕过应用程序的输入验证,从而可以执行未经授权的数据库查询、修改或删除操作。为防止SQL注入攻击,我们需要对用户输入进行严格的验证和过滤,并使用参数化查询或预编译语句来防止恶意SQL代码的执行。 2. 面试官:请解释一下XSS漏洞。 你:XSS(跨站脚本)漏洞是一种允许攻击者将恶意脚本注入到web应用程序的漏洞。当用户浏览包含恶意脚本的页面时,这些脚本会在用户的浏览器上执行,导致攻击者能够窃取用户的登录凭证、修改页面内容或进行其他恶意操作。为了防止XSS攻击,我们需要对用户输入进行合适的验证和过滤,并使用安全的编码方式来输出数据,如HTML转义或使用Content Security Policy(CSP)来限制脚本的执行。 3. 面试官:请讲解一下文件上传漏洞。 你:文件上传漏洞是指在web应用程序中存在未正确验证用户上传文件的安全问题。攻击者可以通过上传带有恶意代码的文件,从而在服务器上执行恶意操作,如执行任意命令、获取敏感数据或远程控制服务器。为了防止文件上传漏洞,我们需要对用户上传的文件进行严格的验证和过滤,限制可上传文件的类型和大小,并在保存、读取和执行文件时采取适当的安全措施。 4. 面试官:请简要说明一下RCE远程命令执行漏洞。 你:RCE(远程命令执行)漏洞是一种允许攻击者在受影响的系统上执行任意命令的漏洞。攻击者通过利用应用程序中的安全漏洞,成功注入恶意代码并执行系统命令。这种漏洞可能导致攻击者完全控制受影响的系统,进行敏感数据的窃取、服务器崩溃等恶意行为。为了防止RCE漏洞,我们需要保持应用程序和服务器的补丁更新,进行输入验证和过滤,以及使用安全编码和访问控制机制来限制恶意代码的执行。 请记住,以上是对每种漏洞的简要解释,你可以根据自己的了解和经验进行适当的展开和补充。在回答问题时,尽量用简明扼要的语言表达,并展示你对漏洞原理和相关防御措施的深入理解。祝你面试顺利!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值