bugkuweb题-ctf入门(10-17)

10、变量**

    http://120.24.86.145:8004/index1.php
    flag In the variable !    
     
     
    error_reporting(0);                    // 关闭php错误显示
    include "flag1.php";                   // 引入flag1.php文件代码
    highlight_file(__file__);              //对文件进行语法高亮显示
    if(isset($_GET['args'])){              // 条件判断 get方法传递的args参数是否存在 
        $args = $_GET['args'];             //赋值给变量  $args
        if(!preg_match("/^\w+$/",$args)){  // /^开始, \w表示任意一个单词字符,即[a-zA-Z0-9_] ,+将前面的字符匹配一次或多次,$/结尾
            die("args error!");            //输出 args error! 
        }
        eval("var_dump($$args);");         // 将字符串作为php代码执行结尾加分号 var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。$$args 可以理解为$($args)
    }
    ?>

php中超全局变量 $GLOBALS ,PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。

构建

?args=GLOBALS

最后补充一点 很多人都认为$GLOBALS[]、global只是写法上面的差别,其实不然。

前者为变量实体 后者为别名引用

eg:


 $var1 = 1;
 function test(){
 unset($GLOBALS['var1']);
 }
 test();
 echo $var1;
 ?>

因为$var1被删除了,所以什么东西都没有打印。


 $var1 = 1;
 function test(){
 global $var1;
 unset($var1);
 }

 test();
 echo $var1;
 ?>

意外的打印了1。

证明删除的只是别名,$GLOBALS[‘var’]的引用,起本身的值没有受到任何的改变。
验证了我们之前所说的东西

也就是说global v a r 其 实 就 是 var其实就是 varvar = &$GLOBALS[‘var’]。调用外部变量的一个别名而已。

11、web5

提示jsfuck

在代码中看到jsfuck

放到控制台加回车

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mNFX1f4G-1590199344227)(C:\Users\19674\AppData\Roaming\Typora\typora-user-images\image-20200502204547641.png)]

12、头等舱

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C7cZWLD1-1590199344230)(C:\Users\19674\AppData\Roaming\Typora\typora-user-images\image-20200502204831557.png)]

打开什么也没有

用bp抓包

send to repeater

bugkuweb题-ctf入门(10-17)_第1张图片

go

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hjWVZqRA-1590199344235)(C:\Users\19674\AppData\Roaming\Typora\typora-user-images\image-20200505130546609.png)]

base64解码后就发现flag

13、黑页

开御剑扫后台

bugkuweb题-ctf入门(10-17)_第2张图片

尝试admin等弱密码无效后

bugkuweb题-ctf入门(10-17)_第3张图片

开burp进行爆破,这里选择Simple list,字典选择burp自带的Passwords

sendtointruder

bugkuweb题-ctf入门(10-17)_第4张图片

爆破成功,密码是hack

登录后flag出现

14、管理员系统**

提交后显示ip被记录,吓一跳

查看源码发现最后有一段base64编码,转换为test123,猜测是密码

提交了还不对

brup抓包,添加X-Forwarded-For头

它代表客户端,也就是HTTP的请求端真实的IP

X-Forwarded-For:127.0.0.1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MC8r8fNY-1590199344239)(C:\Users\19674\AppData\Roaming\Typora\typora-user-images\image-20200503161308343.png)]

15、web4

查看源码发现

<script>
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
script>

url解码后

var p1 = 'function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b';
var p2 = 'aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").οnsubmit=checkSubmit;';
eval(unescape(p1) + unescape('54aa2' + p2));
function checkSubmit(){
    var a=document.getElementById("password");
    //获取ID名为password的文档元素,并赋给a
    if("undefined"!=typeof a){
    //判断a的类型是否undefined
        if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
        //判断:a元素的value值是否为67d709b2b54aa2aa648cf6e87a7114f1
            return!0;
        alert("Error");
        //弹框:Error
        a.focus();
        //获得焦点时,改变背景颜色
        return!1
    }
}
document.getElementById("levelQuest").onsubmit=checkSubmit;
//获取ID值为levelQuest的文档元素,点击submit时执行checksubmit函数
//onsubmit:再点击submit时发生,若返回真提交表单

输入

得到flag

16、flag在index里**

——原文链接:https://blog.csdn.net/zpy1998zpy/article/details/80585443

这道题目里有经典的本地文件包含漏洞+php伪协议的结合应用

注意到url地址 http://120.24.86.145:8005/post/index.php?file=show.php

这是一个典型的文件包含漏洞,(file关键字是提示,其实也是CTF的套路)。

这里用到了php的封装协议:http://php.net/manual/zh/wrappers.php.php
具体怎么用呢,先说结果:

http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

bugkuweb题-ctf入门(10-17)_第5张图片

现在具体说说

file=php://filter/read=convert.base64-encode/resource=index.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的信息在注释中,是得不到的。
我们再看一下源码中 存在对 …/ tp data input 的过滤,其实这都是php://协议中的其他方法,都可以结合文件包含漏洞执行

17、输入密码查看flag

提示了爆破,五位数密码

那就bp爆破

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qKfTKRuY-1590199344242)(C:\Users\19674\AppData\Roaming\Typora\typora-user-images\image-20200505130128595.png)]

从10000-99999都是五位数,慢慢来嘛

最后爆出来flag,在response查看

g的信息在注释中,是得不到的。
我们再看一下源码中 存在对 …/ tp data input 的过滤,其实这都是php://协议中的其他方法,都可以结合文件包含漏洞执行

17、输入密码查看flag

提示了爆破,五位数密码

那就bp爆破

[外链图片转存中…(img-qKfTKRuY-1590199344242)]

从10000-99999都是五位数,慢慢来嘛

最后爆出来flag,在response查看

你可能感兴趣的:(writeup)