存储型xss漏洞复现
-
function stripfxg($string,$htmlspecialchars_decode=false,$nl2br=false) { $string=stripslashes($string); if ($htmlspecialchars_decode==true){ $string=htmlspecialchars_decode($string);//转html实体符号 } if ($nl2br==true){ $string=nl2br($string); } return $string; } /*传入字符串,默认参数$htmlspecialchars_decode=false,,$nl2br=false,先对传入的字符串进行stripslashes()调用, 返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。 实例: <?php $str = "Is your name O\'reilly?"; // 输出: Is your name O'reilly? echo stripslashes($str); ?> 接着if($htmlspecialchars_decode==true)决定是否对字符串调用htmlspecialchars_decode()此函数的作用和 htmlspecialchars() 刚好相反。它将特殊的HTML实体转换回普通字符。 被转换的实体有: &, " (没有设置ENT_NOQUOTES 时), ' (设置了 ENT_QUOTES 时), < 以及>。 最后根据一个nl2br()函数只是根据变量执行换行,并不是重点*/
-
梳理完上述的函数,要想借由这个函数触发xss,需要达到以下几点: ①如果传入的字符串$string在调用之前被类似htmlspecialchars()处理过, 则需要在在调用stripfxg()函数第二个参数$htmlspecialchars_decode传入true, 执行翻转,并将调用stripfxg的string进行类似echo的操作,才会显示在页面上,即xss触发。 ②如果传入的字符串$string在调用之前未被类似htmlspecialchars()处理过, 则在调用stripfxg()函数第二个参数$htmlspecialchars_decode按照默认的false也可, 但同样的是对调用stripfxg的string进行类似echo的操作,才xss触发。
-
全局检索stripfxg的调用:
由于是复现,故知道了漏洞位置,真实审计过程,需要进行筛选,甄别 -
在...zt/show.php,有如下代码: $gsjj=$gsjj. stripfxg($content,true); //第二个参数传入true会进行thmlspcialchars翻转,使得出于安全考虑的xss过滤无效
-
尝试调试/zt/show.php,访问/zt/show.php:
在show.php文件下断点,看缺少的参数是哪里的
发现卡壳的位置在第六行代码,跟进发现在top.php出现如下代码: -
//略 if($id<>0){ //参数缺失 $sql="select * from zzcms_user where id='$id'"; }elseif ($editor<>"" && $editor<>"www" && $editor<>"demo" && $domain<>str_replace("http://","",siteurl)){ $sql="select * from zzcms_user where username='$editor'"; }elseif(isset($editorinzsshow)) { $sql="select * from zzcms_user where username='".$editorinzsshow."'"; }else{ showmsg ("参数不足!");//这句被执行了。出现了上述的弹窗 } //回溯$id的传值过程,发现如下同文件下的代码: $id=isset($_REQUEST['id'])?$_REQUEST['id']:0; //至此了解到,访问zt/show.php失败是由于访问时没有传递字段id,经由三目运算符使得$id=0,被if语句捕获,出现了弹窗。
-
传递id字段,/zt/show.php?id=1(由if语句,只要设置id字段非0即可),继续调试
不再进入弹窗分支,后边分支做了语句拼接$sql="select * from zzcms_user where id=’$id’"执行了查询: -
$rs=query($sql); $row=num_rows($rs); if (!$row){ showmsg ("不存在该用户信息!",siteurl); }