sqli-labs day1(2)
回顾和增加基础知识
url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加个%
空格是%20,单引号是%27, 井号是%23,双引号是%22
判断sql注入(显错和基于错误的盲注):单引号,and 1=1 和 and 1=2,双引号,反斜杠,注释等
判断基于时间的盲注:在上面的基础上,加个sleep函数 ,如sleep(5) (函数不同数据库有所不同) 例子: ' and sleep(5)
sql注入的基本步骤
(跟sqlmap的步骤基本一致)
1.判断是什么类型注入,有没过滤了关键字,可否绕过
2.获取数据库用户,版本,当前连接的数据库等信息
3.获取某个数据库表的信息
4.获取列信息
5.最后获取数据
回顾:真正查询数据库的各种信息时,发现位置不够用,需要使用数据库链结函数,常用的有concat和concat_ws,其中concat_ws的第一个参数时连接字符串的分隔符,还会用到group_concat把查询出来的多行连接起来。
concat_ws()的第一个参数会被html编码,所以使用char函数将十进制ASCII码转化成字符,如char(58)对应 :
用的较多的是
concat_ws(char(32,58,32),user(),database(),version())
复习mysql_fetch_array()函数
mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。
重复了一下less1的操作后,开始接下来的学习,因为less1的基础讲的比较详细,接下来就直接操作了
less2 基于错误的GET整型注入
payload
?id=1 union select 1,2,concat_ws(char(32,58,32),dataname(),id,username,password) from users%23
less3 基于错误的GET单引号变形字符型注入
首先加个单引号 报错如下
可以看到报错那里多了一个),这就是单引号注入的变形,可以推理出对应的左边也应该有个(
把包住错误sql语句的单引号去掉可以看到错误的sql语句是 '1'') LIMIT 0,1
1的右边多了个' 所以代码应该是id=('$id') 看一下代码确实是这样
![](https://img2018.cnblogs.com/blog/1398474/201810/1398474-20181016175750273-1440666703.png)
得出payload:
less 4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)
首先加了个' 没有报错,原因是php中双引号可以包含单引号
这个让我想到了之前几次实验没有注意这个问题,看了下代码发现真的都是被单引号包着!
所以这次使用双引号看报错
![](https://img2018.cnblogs.com/blog/1398474/201810/1398474-20181016182638672-1639793124.png)
发现右括号,推理原代码为:id=("$id")
查看代码发现变量上没有双引号
![](https://img2018.cnblogs.com/blog/1398474/201810/1398474-20181016182650677-1712855761.png)
但是不影响注入
pyload:
![](https://img2018.cnblogs.com/blog/1398474/201810/1398474-20181016182710279-775393093.png)
?id=0") union select 1,concat_ws(char(32,58,32),id,username,password),3 from users limit 1,1--+