sql注入(二)--联合查询及实际用途

预备

假设先前已存在两个表create_test和goods:
在这里插入图片描述
在这里插入图片描述

练习

问题1:已知goods中id等于2的字段内容,且已知还存在表create_test,想要通过goods中id=2来导出create_test中的内容:

在这里插入图片描述
解决:使用联合查询:
在这里插入图片描述
局限:前提是这两个表的列数必须相同(该处均为3列)。

问题2:如何查询不同列数的两个表,下例中为联合查询另一个表(该表为4列):

在这里插入图片描述
解决:
实战1:也可以通过如下语句,来猜测确定goods表中的列数 ,(注意此处默认不知道sqltest的列数及其中的内容),当select后面为n个任意数字,代表选中n列,不管在sqltest表中是否存在这些内容:
在这里插入图片描述
实战2 在已知goods表的列数情况下,进一步 猜测sqltest的列名 ,例如图一为在第二个位置猜测sqltest中有一个列名为name,则如果真实存在,会在联合语句中name替代的位置(这里是替代第二个,而在sqltest中name实际位于第一列),显示所有name的内容;图二为猜测了sqltest中不存在的列名:
在这里插入图片描述
在这里插入图片描述
实战3 也可以插入一个函数来 查看该数据库的版本 (该版本为8.0.11)
在这里插入图片描述

问题3:若网站将union过滤时,想要猜测另一张表(sqltest)的每一个列名

解决:
实战4 可以 通过and 加 exists函数来对其列名进行猜测 (若存在name列,虽然无法显示,但是会成功运行;下面则是猜测stu_ID,由于不存在该列名,因此导致前半句select * from goods where id = 2也无法顺利执行从而报错),作用类似于and 1=1
在这里插入图片描述
实战5 可能网站过滤了union字段,但是可能没有过滤大小写的问题,即在网站url中输入的union可以修改为Union,uNion,UNION等,即: 绕过 -------原理:url中区分了大小写,而sql语句在执行时不区分大小写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值