0%

bugku刷题记录

eval

1
2
3
4
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);

这里相当于用到了两个函数

第一个file(),这个函数是把一整个文件读入到一个数组中

然后var_dump()是输出变量相关信息

所以payload为

/?hello=file("flag.php")

注意要有双引号奥

头等舱

进去页面提示什么也没有,题目为头等舱,联想到网页头,然后我们用bp抓包,然后发往repeater,最后在Respones中的Headers里面发现flag

网站被黑

题目提示有后门

后门:用于获得对程序或在线服务访问权限的秘密方式

也就是说,有别的网页喽,先用御剑扫一下,扫不出来换kali里面的dirsearch

我们用御剑扫描php文件,很快就会发现存在shell.php文件,进入后需要密码,先尝试了一下万能密码,似乎不行,然后我们直接上Bp进行爆破

最后得到密码 hack,进去后得到flag

变量1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//flag In the variable ! 
<?php

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);");
}
?>

^\w+$ 表示的是匹配都是字母的串,$$args是一个可变变量,而如果$args的值为另一个变量的变量名,$$args就可以代表另一个变量,也就是说,我们要输入包含flag的变量名,打印这个变量所包含的值才能得到flag,但是我们根本不知道该变量名。

所以可以考虑依次给args赋值php中的九大全局变量($_POST,$_GET,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$SERVER,$GLOBALS,$_ENV

所以让args=GLOBALS来打印全部变量,从而得到flag

本地管理员

由题可知,要有本地的许可,所以我们在Request中添加

X-Forwarded-For:127.0.0.1

然后接着我想用Bp爆破,可是终究没有出来,观察爆破结果,可以发现nnnnn后面有一段base64密文,解密后得到test123,所以我们猜测这是密码,然后尝试admin登录,得到flag

源代码

提示查看源代码,查看后发现一大堆url编码,按要求解码后得到

image-20220315222702123

看不懂啊看不懂,但是有一段很神奇的密文,看wp都说提交后得到flag,我也不知道为啥呜呜呜

文件包含

这种题一般都有/?file=这种格式,然后我们要用的就是filter协议,让源码转换成base64密文输出后再解密,

?file=php://filter/read=convert.base64-encode/resource=index.php

然后解密即可得到flag

文件包含这里也会有命令执行的部分,比如/?file=../flag,这里的意思一目了然。

关键函数是include,但是一般没这么容易,会有很多过滤

好像需要密码

经典爆破,这里提示我们是5位数,所以我们从00001到99999逐个爆破,并且选择有效整数为5位,然后静静等待便可得到flag

image-20220319211909723

成绩查询

一开始我以为没有回显,原来是id设置的太小了呜呜呜,果断放弃盲注,虽然我也没有注入出来,好垃圾

然后就是经典的联合注入了。不知道为啥盲注不行,很烦。