一次对最新版Metinfo CMS的代码审计
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
一次对最新版Metinfo CMS的代码审计

0×00:前言
挖掘米拓cms时发现系统存在一处过滤函数多次调用引起的sql注入,遂记录下来与师父们一起学习下,有啥不足之处,菜鸟勿喷 O(∩_∩)O
0×01:漏洞调试
由于代码繁杂,直接发送payload进行调试。
payload:/admin/?n=language&c=language_general&a=doModifyParameter&editor=1&data[system]=1%27%20or&site=0&appno=0&editor=cn&data[system]=2\%27%20where%20id=1%20and%20sleep(3)%23
在app/system/language/admin/language_general.class.php的doModifyParameter下断点
往下走,metinfo对传入的参数进行了全局过滤,可以看到我们的payload中的单引号反斜杠被转义
再往下走会有一个sql查询语句,查询语句的结果影响到漏洞语句是否执行,所以需要构造payload为数据库中存在的语句
再往下走,经过stripslashes函数之后,转义字符被去除,value已经是正常的payload,但是代码下一步使用preg_replace("/\'/", "''", $value)将单引号替换为两个单引号,所以payload中的反斜杠有了用武之地,他将其中一个单引号转义
这样的sql语句可以成功被执行
0×02:黑盒测试
白盒审计完毕,搭建起环境测试一下。
0×03:总结
代码审计中,可以重点关注下stripslashes,preg_replace这一类的函数,如果在将数据插入数据库之前进行了不合理的使用,就可能造成安全隐患。
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_390655 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
文章目录