mysql extractvalue_Sqli-labs Less-17 使用extractvalue()函数进行报错注入

本文介绍了如何利用MySQL的extractvalue()函数进行报错注入,通过构造payload来获取数据库信息。在Sqli-labs的Less-17关卡中,通过extractvalue()结合ASCII编码和substring()等函数,逐步揭示了数据库的库名、表名、字段名以及数据内容。同时,文章提到了检查输入函数check_input()对username字段的处理,说明了为何不能从username进行构造注入。
摘要由CSDN通过智能技术生成

本关我们可以看到是一个修改密码的过程,利用的是update语句,与在用select时是一样的,我们仅需要将原先的闭合,构造自己的payload。

尝试报错

Username:admin

Password:1'

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'admin'' at line 1

可以看到 admin'' 说明在对密码的处理过程中使用的是 ' 。

接下来利用盲注进行注入。

这里首先介绍一下如何使用extractvalue()函数进行报错注入。

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

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

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

正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错

select username from security.users where id=1 and (extractvalue('anything','/x/xx'));

02df1772ce437856bee9970c6aa436f7.png

使用concat()拼接 ‘  /  ‘ 效果相同,下面语句是在’anything’中查询 位置是 /database()的内容

select username from security.users where id=1 and (extractvalue('anything',concat('/',(select database()))));

f7541320ac5b7a84a5712b6f4f5a948e.png

但这里也没有语法错误,不会报错,下面故意写入语法错误:

select username from security.users where id=1 and (extractvalu

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值