pikachu练习(六)

1."insert/update"注入

首先来了解一下updatexml()函数的作用

(1)updatexml的语法为:语法: UPDATEXML (xml document, XPathstring, new_value)

(2)再了解一下函数内各个参数的意义

第一个参数: fiedname是String格式,为表中的字段名。
第二个参数: XPathstring (Xpath格式的字符串)。
第三个参数: new. value,String格式,替换查找到的符合条件的

此破解方式的思路为:写一个报错注入,在报错回显时将我们所需要的信息显示出来

首先来演示update

我们首先点击注册来到此页面

之后在用户一栏输入如下代码,密码栏随意输入即可

' or updatexml(1,concat(0x7e,database()),0) or '

之后点击注册

我们可以看到,成功得到数据库名

这样一来我们可以做出少许更改,将database()改成其他函数来获得更多的信息

insert的思路与update相差不大

首先登录用户中心,并选择更改用户信息,这里就是一个update漏洞

接下来就是与上述同样的操作爆出库名,之后的逻辑就相同了

2.“delete”注入

点击删除留言后,进行抓包

发送到repeater并send

之后输入如下代码将id闭合,并将此段代码转换为特殊字符的url编码

1 or updatexml(1,concat(0x7e,database()),0)

改为如图所示形式

之后send后可以发现返回了我们需要的数据库名

在查csdn的时候我还发现了这个函数:extractvalue()

这个函数的作用是:从目标XML中返回包含所查询值的字符串
语法: ExtractValue(xm| _document, xpath. string)

第一个参数: XML document是String格式,为XML文档对象的名称,文中为doc
第二个参数: XPath_ string (Xpath格式的字符串)

同样,Xpath定位必须是有效的,否则会发生错误

使用方法与作用和上文相差不大,这里就不过多赘述了

3.“http header”注入

什么是Http Header注入
有些时候,后台开发人员为了验证客户端头信息(比如常用的cookie验证)
或者通过http header头信息获取客户端的一些信息,比如useragent、accept字段等等。
会对客户端的http header信息进行获取并使用SQL进行处理,如果此时没有足够的安全考虑,则可能会导致基于http header的SQL Inject漏洞。
————————————————
版权声明:本文为CSDN博主「yyysec」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_53571321/article/details/121692906

了解完http header,我们开始进行抓包

可以发现有上文提到的user agent

我们将其发送到repeater之后,修改user agent为如下代码

' or updatexml(1,concat(0x7e,database()),0) or '

点击send后我们可以发现,成功获得数据库名

4.盲注(base on boolian)

在某些情况下,会对报错信息进行隐藏,无法使用报错来获得信息,此时我们就需要盲注

例如,我们知道此数据库名为七位字母,但不知道具体的字母,我们就可以从头到尾一个一个去试,直到返回正确的值,便可以获得库名信息

首先判断注入类型,发现可以使用单引号闭合

当我们分别输入如下代码,得到的结果也是不同的:

kobe' and 1=1#
kobe' and 1=2#

结果分别为:

可以看到,直到and后输入条件为真,才能输出正确的信息,我们便可以此为基础,来进行盲注

我们可以盲注出数据库名的长度,数据库的名称,数据库表的数量,数据库的表名

我们接下来以最简单的数据库名的长度来进行演示:

首先输入如下代码

kobe' and length(database())>7#

可以看到,那么我们的长度就并不大于7,我们接下来再试试等于7

kobe' and length(database())=7#

 那么,我们就能直到我们的库名长度为7,接下来的库名和表名等可以更换函数来进行盲注,由于我们事先知道库名,所以盲注起来很轻松,但实际情况要比这复杂得多,应该根据实际情况来选择是否使用盲注

5.盲注(base on time)

此种方法适用于无论输入是否正确,都返回相同的数据,我们不知道自己输入的条件是否为真,所以我们在后面加入了一个时间限制,比如如下代码

kobe and sleep(5)# 没有延迟
kobe' and sleep(5)# 延迟五秒

如下种情况

无论输入何值,都会返回下面的那段话

所以,我们这时候便可以使用时间盲注

首先我们输入如下的这行代码

kobe' and if(length(database())=7, sleep(1),5)#

此代码含义为:若length(database())=7条件正确,则延迟1秒后返回,若不正确,则5秒后返回

由此可见,我们可以通过修改前面的条件,来获得更多信息,这里就不一一展示了

6.宽字节注入

首先我们先来了解一下宽字节注入的原理

有不少网站,会使用斜杠/来过滤用户输入的一些数据,这样一来,我们输入的单引号就会被mysql转义,导致无法完成单引号的闭合

宽字节注入指的是 mysql 数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字,前提是前一个ascii码要大于128(比如%df),才到汉字的范围,所以如果我们在代码中插入一个%df,就会将前面的斜杠/与%df算作一个宽字符,由于斜杠/十六进制是%5c,也就会将/%df转换为%5c%df,这个宽字节就是“運”这一汉字,这样一来单引号就不会因为斜杠/而被转义,从而完成单引号的闭合

用最简单的话来说,就是将斜杠/揉进一个汉字里,让它不影响你的单引号

例子如下:

我们先随意输入一个用户名,查询后抓包,之后将其发到repeater

然后我们讲name修改为如下代码

1%df' union select 1,2#

send后发现,成功输出我们想要的东西

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值