BugkuCTF

---------WEB----------

web2:

查看源码

 

计算器:

更改参数值-----maxlength="1"

BugkuCTF_第1张图片

 

 

 web基础$_GET:

$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

定义 http://123.206.87.240:8002/get/?what=flag

 

web基础$_POST:

$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

BugkuCTF_第2张图片

 

 

 

 

 

 

 

矛盾:

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

观察if(!is_numeric($num))应该是截断 http://123.206.87.240:8002/get/index1.php?num=1%00

 

web3:

BugkuCTF_第3张图片

查看源码

 

直接HTML解码

 BugkuCTF_第4张图片

 

 

 域名解析:

BugkuCTF_第5张图片

 

 修改host文件

BugkuCTF_第6张图片

 

 再次访问http://flag.baidu.com/即可得到flag

 

你必须让他停下:

BP抓包重发即可

BugkuCTF_第7张图片

 

 

变量1:

flag In the variable !
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);");
}
?>

前面直接include了flag1.php,这里的意思就是把这个文件中的代码导进来,所以猜测flag应该是一个变量。
后面isset需要变量是已经定义的,同时后面的正则\w,匹配字母或数字或下划线或汉字。
结尾的\$\$ args代表了可变变量,也就是假如arg是一个变量名,\$\$ args则代表了另一个变量。
那么猜测arg是全局变量GLOBALS

构造url:http://123.206.87.240:8004/index1.php?args=GLOBALS
返回的结果:

BugkuCTF_第8张图片

 

 web5:

BugkuCTF_第9张图片

 

 查看源码

BugkuCTF_第10张图片

 

 放在控制台解码

BugkuCTF_第11张图片

 

 得到ctf{whatfk}将其大写后填写即可

 

 

 头等舱:

进去之后这样显示

BugkuCTF_第12张图片

 

 BP抓包即可

BugkuCTF_第13张图片

 

 

 

网站被黑:

御剑扫描

BugkuCTF_第14张图片

 

发现后台url打开

BugkuCTF_第15张图片

 

BP暴力破解

BugkuCTF_第16张图片

 

 

 管理员系统:

BugkuCTF_第17张图片

在请求头添加X-Forwarded-For:127.0.0.1

 

BugkuCTF_第18张图片

 

 

 BP发现

BugkuCTF_第19张图片

 

 

base64解码得到test123

 

BP修改参数即可得到flag

BugkuCTF_第20张图片

 

web4:

 

 源码发现一大堆东西

BugkuCTF_第21张图片

 

此提示拼接 eval(unescape(p1) + unescape('%35%34%61%61%32' + p2))

完成后解码得到

BugkuCTF_第22张图片

 

由此得出 if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;

67d709b2b54aa2aa648cf6e87a7114f1将其输入提交即可得到flag

BugkuCTF_第23张图片

 

 

flag在index里:

进去之后显示

 

 

 

 查看源码并没有什么

此时这里用到了php的封装协议:http://php.net/manual/zh/wrappers.php.php

解释此协议含义:首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。
而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。
如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。

继续做题:

在url中添加 http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

得到base64解码即可得到flag

BugkuCTF_第24张图片

你可能感兴趣的:(BugkuCTF)