2.21.3 urldecode

urldecode()

urldecode()函数使用参考

http://www.php.net/manual/zh/function.urldecode.php

<?php
if(eregi("hackerDJ",$_GET[id])) {
echo("

not allowed!

");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
echo "
Access granted!

";
echo "
flag

";
}
?>

tips:

代码审计需要满足两个条件:1. id里面不能包含字符串“hackerDJ”

2. id经过urldecode()之后等于字符串“hackerDJ”

利用浏览器默认对提交的数据进行一次url解码

所以对“hackerDJ”二次编码

payload:

http://123.206.87.240:9009/10.php?id=%68ackerDJ

二次urldecode注入

示例代码:

以此代码为例,本来使用了魔术引号的方法,直接提交将会出现单引号

但因为进行了urldecode解码就导致了二次注入问题

成功绕过..

DocCms漏洞分析

代码分析

在/content/search/index.php中,首先对参数keyword进行非法字符检测,

进一步追溯checkSqlStr函数,看代码如何过滤,在/inc/function.php中

checkSqlStr函数对传入的字符串进行正则匹配,检测是否函数非法字符。

继续看在/content/search/index.php中的get_search_result函数:

参数keyword进行非法字符检测后,进行url解码,然后拼接到SQL语句中执行。

如果我们传入双重url编码的字符串,将绕过非法字符检测,然后经urldecode解码,带入数据库中执行,导致SQL注入漏洞存在。

此时就可以使用sqlmap的chardoubleencode.py进行双重编码进行注入了

Last updated

Was this helpful?