74cms代码审计–储存型XSS漏洞代码审计

0x00 功能点发现加白盒审计 简历xss(假漏洞)

功能点发现:

发现该站存在简历管理的功能,也就是相当于自己填一些个人信息, 那么个人填信息就可能存在xss漏洞,进行实验。

图片[1]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

payload写好。

图片[2]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

以管理员身份登录后台进行查看:

图片[3]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

发现被过滤了。

图片[4]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

图片[5]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

白盒审计:

根据url找到对应代码

图片[6]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

图片[7]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

inserttable 我们找到该函数 之前分析过。 把我们输入的内容进行插入。 并没有进行过滤, 那为什么 没有成功?

function inserttable($tablename, $insertsqlarr, $returnid=0, $replace = false, $silent=0)
 {
   global $db;
   $insertkeysql = $insertvaluesql = $comma = '';
   foreach ($insertsqlarr as $insert_key => $insert_value) {
      $insertkeysql .= $comma.'`'.$insert_key.'`';
      $insertvaluesql .= $comma.'\\''.$insert_value.'\\'';
      $comma = ', ';
   }
   $method = $replace?'REPLACE':'INSERT';
   $state = $db->query($method." INTO $tablename ($insertkeysql) VALUES ($insertvaluesql)", $silent?'SILENT':'');
   if($returnid && !$replace) {
      return $db->insert_id();
   }else {
       return $state;
   }
}

查看数据库的数据 也是被过滤过的 奇怪 问题出到哪里了?是在哪里被过滤了。

图片[8]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

前端也没有过滤。

图片[9]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

那就奇怪了 到底哪里过滤了

最后进行数据库检测 看了很多遍 源代码 也没发现这个是怎么过滤的

图片[10]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

终于找到凶手了 再全局配置中 对所有参数进行过滤,6

该功能文件包含了 personal_common.php

图片[11]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

而personal_common.php包含了 common.inc.php

图片[12]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

而common.inc.php 对所有的传参变量调用了过滤函数进行过滤。

至此解决疑问了。

0X01友情链接XSS储存型(真漏洞)

这个漏洞就简单了 但是也很鸡肋 – – 用管理员身份去添加一个有xss的链接

然后就触发了。这里主要是分析代码。

先看功能点触发漏洞:

图片[13]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

图片[14]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

甚至我的数据库监控平台都触发了,看来是真没过滤 (笑)

图片[15]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

接下来进行白盒代码审计:

图片[16]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

抓个包找到对应的代码路径 进行审计。找到问题出的地方了。

图片[17]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

先建立一个疑问:为什么没有过滤我们的传参。

看完代码就解决了 因为我们的payload是写在图片地址上传过来的 ,如上图 用的$_FILES 传过来的

那么我们看看 他admin的配置函数;

图片[18]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

可以看到并没有对_FILES进行限制。

我们再做个实验验证我们的想法:我们朝着名称这里放payload。

图片[19]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

再次触发弹窗。这是怎么回事?理论上应该被过滤了不是吗 哈哈

图片[20]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

代码是不会骗人的 我们再去仔细翻翻代码:

图片[21]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

找到了 原理 关于管理员的过滤 是只对 特殊的符号 ‘ “ \ 这三个符号进行转义 他并没有管xss的过滤

也理解,毕竟都admin身份了 还在乎xss吗。

那就破案了,这个洞就处在 他的过滤上了

再看看数据库 ,确实没有过滤。

图片[22]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

那我们再试试特殊符号。

图片[23]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

可以看到转义了。

图片[24]-74cms代码审计–储存型XSS漏洞代码审计-Drton1博客

这个洞就结束了。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论