安全服务面试总结(第三弹 MySql注入详解)

MySql的5.0版本以上提供了INFORMATION_SCHEMA(数据库信息表)

联合查询注入

攻击者通常回来利用order by 语句来判断当前sql语句有几列,然后再利用union 进行下一步的攻击。
union select TABLE_NAME from INFORMATION_SCADHE.TABLES where TABLE_SCACHE =database() 查询表名
union select COLUMN_NAME from INFORMATION_SCACHE.COLUMNS where TABLE_NAME=‘user’ 查询字段

报错注入

http://localhost/sqli.php?name=’ or extractvalue(1,concat(user(),0x7e,version())) # &pass=1

http://localhost/index.php?name=’ or updatexml(1,concat(user(),0x7e,version()),1) # &pass=1
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
改变XML_document中符合XPATH_string的值
updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出数据库信信

可以看粗来,报错注入的原理就是利用一些特殊函数,故意使用 其他函数作为不符合 这些特殊函数的格式要求的参数。这是由于格式不符合要求,就会报错,但是由于他的参数是别的SQL语句,这些sql语句也回执行,这样就能达攻击的目的。

盲注

盲注也可以叫做布尔型注入,主要使用在存在SQL注入漏洞但是不能直接查询爆出内容的地方,主要依靠逻辑的真假来实现爆出数据,盲注的效率相对较低。
要想使用盲注,就得先明白 and 和 or 的逻辑。除此之外,还得了解一些常用的函数
在这里插入图片描述substr(database(),1,1)指的是截取数据库名从第一个字符开始截取一个,然后与’t’作比较
以此类推,逐个判断。

时间盲注

基于时间的盲注主要使用下面三个函数:
if(A,B,C) 表达式A正确则返回B,错误则返回C
sleep() 将程序运行延时暂停,sleep(5)则延时5秒再继续执行
benchmark() 指定语句执行的次数

and if(substr(database(),1,1)=‘a’,sleep(5),1) --+
如果数据库名第一个字符为a则会延时5秒执行,否则返回的是1

与盲注相同,这里也需要逐一去判断。这两种方式效率是真的低。

堆叠注入

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

宽字节注入

由于在一些网站的配置中,会存在magic_quotes_gpc选项, 它会将post,get 接收的 ’ " / 这些字符自动加 反斜线转义,而反斜线是一个合法的字符,没有办法形成闭合,所以也没有办法进行注入。
实际操作过程中会使用%d5’ 来突破php的转义
127.0.0.1/?id=%d5’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值