PHP黑魔法
大部分函数的使用已经在之前详细介绍过了,这里我就针对每一种函数大概介绍一下其主要存在的利用方法。
1.md5()
md5()
函数绕过sql注入。我们来看一个例子。
代码示例:
$password=$_POST['password'];
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0){
echo 'flag is :'.$flag;
}
else{
echo '密码错误!';
}
这里提交的参数通过md5
函数处理,然后再进入SQL查询语句,所以常规的注入手段就不行了,那么如果md5后的转换成字符串格式变成了'or'xxxx
的格式,不就可以注入了么。md5(ffifdyop,32) = 276f722736c95d99e921722cf9ed621c
转成字符串为'or'6xxx
2. eval()
在执行命令时,可使用分号构造处多条语句。类似这种。
<?php
$cmd = "echo 'a';echo '--------------';echo 'b';";
echo eval($cmd);
?>
3. ereg()
存在%00
截断,当遇到使用此函数来进行正则匹配时,我们可以用%00来截断正则匹配,从而绕过正则。
4. strcmp()
这个在之前介绍过,就是数组绕过技巧。
5. curl_setopt()
存在ssrf漏洞。
代码示例:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET['Ameng']);
#curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
#curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_exec($ch);
curl_close($ch);
?>
使用file协议进行任意文件读取
除此之外还有dict协议查看端口信息。gopher协议反弹shell利用等。
6.preg_replace()
此函数前面详细介绍过,/e模式下的命令执行。
7.urldecode()
url二次编码绕过。
代码示例:
<?php
$name = urldecode($_GET['name']);
if($name = "Ameng"){
echo "Plase~";
}
else{
echo "sorry";
}
?>
将Ameng进行二次url编码,然后传入即可得到满足条件
8. file_get_contents()
常用伪协议来进行绕过。
9. parse_url()
此函数主要用于绕过某些过滤,先简单了解一下函数的基本用法。
代码示例:
<?php
$url = "http://www.jlx-love.com/about";
$parts = parse_url($url);
print_r($parts);
?>
执行结果——>
Array
(
[scheme] => http
[host] => www.jlx-love.com [path] => /about
)
可以看到这个函数把我们的变量值拆分成一个几个部分。那么绕过过滤又是说的哪回事呢?其实就是当我们在浏览器输入url时,那么就会将url中的\转换为/,从而就会导致parse_ur
l的白名单绕过。