SQL注入常用函数及解析

1、前言

这篇文章主要介绍sql注入中常用的函数,以及函数之间配合使用及解析。

插入一段免责声明:以下语句仅用于实验,利用以下函数或语句对某用户、企业、业务造成影响的,一切与作者无关。

2、函数

2.1 substr()函数

substr()函数呢,意为substr(string,start,length) 对于给定的字符串string,从start位开始截取,截取length的长度。

length:待提取的字符串长度,若length为下面情况,返回整个字符串的所有字符。

1 length不指定。
2 length为空。
3 length为负值。
4 length大于字符串的长度。

举个例子:

substr(user,1,2)

取数据库长的第1位开始截取,取2的长度,假如说库名为admin,那就是截取ad。

这样注入的话靠盲注效率会不会有点低?好的,我们可以配合其它函数。

2.2 ascii()函数

ascii()呢准确的说不算是函数,其实ascii()就是返回字符的ascii码。

下面我们把ascii()和substr() 配合使用,举个例子:

ascii(substc(database(),1,1))

这个语句意思就很明显了吧,意为substr()函数从database()库名的第一位开始截取,截取长度为1.

ascii(substr(database(),1,1))=xxx

然后呢把截取的库名进行ascii()编码,假如说ascii(substr(database(),1,1))=102,通过ascii对照表,那么database()第一位就是102.

那么数据库第二位呢?

原理一样哈:

ascii(substr(database(),2,1))=xxx
2.3 exp()数字函数

先解释一下这个函数什么意思,用于计算e的x次方的函数。e为底数,x为指数。

e=2.718281828459045

举个例子:

exp(1)=2.718281828459045 这下明白了吧。

那么好,exp()函数有一个上限值,为exp(710)

exp(710)时会溢出,x大于709时会报错溢出。

那么说我们把以上函数结合使用呢?

举个例子,字符型注入,构造个poc如下:

id=1'and exp(if((ascii(substr(database(),1,1))=xxx)1,11111)) or'1'='1

这个poc什么意思呢?这里我简单解释下:

首先id=1' or '1'='1

其实这个语句传输到数据库中呢应该是 where xxx from xxx id='1' or '1'='1' 

那么exp(if((ascii(substr(database(),1,1))=xxx)1,11111))呢?

结合我们上面的内容其实就很明显了哈:

意思就是说通过substr()函数从数据库database()第一位开始截取,截取长度为1,然后把截取的结果通过ascii()编码转换,最后转换为ascii()10进制的值,然后由exp函数带出。

这里可能有点模糊?我举个简单的例子:

加入database()库名第一位是a,那么当xxx值为97的时候,语句就为exp(if((ascii(substr(database(),1,1))=97)1,11111))

这个时候其实页面就会正常返回,因为if()条件是成立的,就会返回1,最终的结果为exp(1).这样是不是就明白了呢?

2.4 extractvalue()函数

extractvalue()函数,extractvalue(XML_document, XPath_string),XML_document是String格式,为XML文档对象的名称;
XPath_string(Xpath格式的字符串),注入时可操作的地方。

以字符型注入举个例子:

id=1' and extractvalue(1,concat(0x7e,database(),0x7e))--

其实可操作的地方为concat(0x7e,database(),0xte),当然concat()内容可灵活替换。

2.5 updatexml 函数

updatexml(xml_doument,XPath_string,new_value)

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串).
第三个参数:new_value,String格式,替换查找到的符合条件的数据

以数字型注入举个例子:

id=1 updatexml(1,concat(0x7e,version(),0x7e)

3 总结

这次分享就简单到这里,具体呢还有很多方便要判断,比如说数据库的类型,以及是否屏蔽哪些参数函数?这个都需要绕过判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柳岸花又明

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

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

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

打赏作者

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

抵扣说明:

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

余额充值