找了一下mysql对extractvalue()、updatexml()函数的官方介绍https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html#function_extractvalue
ExtractValue(xml_frag, xpath_expr)
知识点
解释一下这两个参数xml_frag,是xml标记片段,第二个参数它返回由 XPath 表达式匹配的元素的第一个文本子节点的文本内容(CDATA)
XPath 表达式是一种用于在 XML 或 HTML 文档中定位和选择特定节点或节点集的语法
基础语法:
1./
:/html
表示选取 HTML 文档的根节点<html>
。
//
:表示在整个文档中进行搜索,不考虑节点的具体位置。eg://div
表示选取文档中所有的<div>
元素。2.@:用@符号来选取节点的属性
eg://a[@href]
表示选取所有具有href
属性的<a>
元素。3.[]:用于筛选节点,放在方括号[]中。eg
://li[1]
表示选取第一个<li>
元素,//div[@class='content']
表示选取class
属性为content
的<div>
元素。4.文本子节点:元素内纯文本的内容
5.CDATA:只当作字符数据来处理,不进行额外转译
结合实例
后面一步一步常规注入就行了,通常还会在 concat()
中加入特殊字符(如 ~
、0x7e
、#
)来确保 XPath 解析失败
UpdateXML(xml_target, xpath_expr, new_xml)
知识点
1.此函数将给定的 XML 标记片段 xml_target
的单个部分替换为新的 XML 片段 new_xml
,然后返回更改后的 XML。xml_target
中被替换的部分与用户提供的 XPath 表达式 xpath_expr
匹配。如果没有找到与 xpath_expr
匹配的表达式,或者找到了多个匹配项,该函数将返回原始的 xml_target
XML 片段。所有三个参数都应该是字符串。
(/G是以垂直形式查询结果而非表格)
2.符号:
*:通配符eg:/*/b ,/*/b/*
|:联合 eg://b|//c
匹配 XML 目标中的所有 b
和 c
元素
g[@attribute="value"]:eg:
//b[@id="idB"]
在片段 <a><b id="idA"/><c/><b id="idB"/></a>
中匹配第二个 b
元素,//*[attribute="value"]
匹配具有 attribute="value"
的任何元素
//b[@c="x"][@d="y"]:
匹配在给定 XML 片段中任何位置出现的元素 <b c="x" d="y"/>
//b[@c="23"]|//b[@c="17"]:相当于//b[@c="23" or @c="17"],
匹配 c
属性的值为 23
或 17
的所有 b
元素
结合实例
忘记加group_concat,也可以limit一个一个查注意是limit0,1
而不是limit(0,1),哦买噶做的时候搞错了一直不行
后面常规注入就行了,本来做过一遍,没保存没掉了
Post
Pass11
找到一篇文章对原理解释很清晰
1-Web安全——初识SQL注入漏洞_select * from user where name='123' or '1'='1-CSDN博客
从网上找的源码,便于理解post传参的查询语句
界面变成登陆页面
随便输入,抓包,是post传参
报错
admin显示登陆成功
尝试--+ 登陆失败,但是-- -登陆成功,过滤了--+
尝试万能密码登陆成功
order by1,2可任意1,2,3不行
说明有两列
判断回显位1,2都可,
数据库名字回显,其实大体和get差不多
Pass12
"报错,闭合是")
尝试改过后的万能密码得到部分信息
两列,后面步骤一样了
Pass13
')闭合
万能密码无回显,用报错注入
Pass14
双引号闭合
但是没有信息回显
虽然1,2时没有有效信息,尝试1,2,3的时候爆错,说明有2列
无回显还是试试爆错注入,注意payload怎末写别搞错掉
后面一样了
Pass15
布尔盲注
无论试什么都没得回显,
尝试万能密码成功登录,所以是单引号闭合,找到注入点,尝试报错注入
还是没得回显,可能过滤了被,只能用布尔盲注了注意payload里是or
好的后面按着做就行了,哦哦最好还是先用length把长度爆出来,当然了也可以用if语句构造延时盲注,我看别人的wp还可以用sqlmap做
sqlmap
下载成功,这篇文章对sqlmap的使用解释的非常清楚SQLMAP的下载安装和使用(Windows)_sqlmap下载-CSDN博客
算了,搞了半天环境变量也添加了,就是显示无法运行我也不知如何是好
Pass16
和pass15一样,就是闭合改为")
Pass17
页面提醒重置密码,无论怎摸样都没有回显,查看源码,只对uname进行了过滤,所以uname必须为真
直接爆破出用户名admin
在passwd位置单引号,爆错,单引号闭合
后面就在password位置报错注入就ok了