前言

最近出差了一段时间,身心疲惫啊,博客也断更了一段时间,随便写一点,缓缓
攻防世界这个平台还是挺好的,题目种类多,writeup也很多,非常适合新手入门,今天就来写写
新手练习区的题目吧。(主要是高手区的我也不会ORZ)

攻防世界:飞机直达

view_source

生成靶场以后看一下


从题目上就看出来要看源码,发现右键呗屏蔽了,F12看一下

发现flag

get_post

按照要求get传入一个a=1

发现还要post传一个b=2,继续按照要求操作,这里使用hackbar插件进行post传值:

发现flag

robots

这道题主要考的就是机器人协议,打开靶场以后直接访问一下:ip:port/robots.txt

发现一个不允许访问的路径,我们访问看一下

发现flag

backup

这道题要我们找到网站上存在的备份文件
一般来说备份文件常见的有几种形式:压缩包、文件名.bak、文件名.backup等等,在多次尝试以后,找到index.php.bak

在文件中找到flag

cookie

打开靶场看一下:

看来是考查cookie的,F12看一下

cookie提示我们到cookie.php下面寻找,打开cookie.php看一下:

网页上提示看返回,打开F12看到返回头里存在一个flag字段,找到flag

disabled_button

看题目预感到应该是按钮控件点不了,需要审查元素修改的,打开靶场看一下:

果真是,直接F12:

将此处的disable删除,就可以点击得到flag了

weak_auth

题目的翻译应该是脆弱认证吧,题目描述也是描述设置了一个简单的密码:

随手一试:admin----123456

得到flag,emmm,正确的做法应该暴力破解

command_execution

emm,命令执行?
打开靶场看一下:

发现一个ping功能,盲猜一手直接拼接的命令,加一个ls 试一下:

发现发挥了当前路径的文件,继续找一下:

这里就不加图了,最后在/home目录下找到flag.txt文件,cat就行了:

simple_php

打开靶场以后,发现一段php代码,分析一下:

<?php
show_source(__FILE__); 
include("config.php");    //这里包含了config.php
[email protected]$_GET['a'];
[email protected]$_GET['b'];    //url接收参数a和b的值
if($a==0 and $a){
    echo $flag1;    //如果$a等于0 and $a,输出$flag1
}
if(is_numeric($b)){
    exit();    //如果$b是数字或者字符串那么退出当前脚本
}
if($b>1234){
    echo $flag2;    //如果$b>1234,输出$flag2
}
?>

分析以后,可以发现flag被分成了两段,同时满足三个条件,就可以输出完整的flag
然后这三个条件我们来分析一下:
第一个:首先要保证a=0,并且a不为null,这里可能会迷惑,后面说
第二个:保证b不是数字或字符串,是的话就退出了
第三个:保证b要大于1234

这里不熟悉php的人可能会问a怎么能同时满足=0又不为null呢?b不是整数那又怎么和1234比较呢?

这里主要是利用了php的弱类型比较,因为php中有这样一个规定:字符串的开始部分决定了它的值,如果该字符串以合法的数字开始,则使用该数字至和它连续的最后一个数字结束,否则其比较时整体值为0

所以这里我们可以这样设置a和b的值
?a=JsOnGmAX&b=6666a
这样同时满足了三个条件,a为字符串,所以和0比较时,a被转化成0,然后,b不为数字和字符串,b与1234比较是,被转为成了6666,也满足了:

xff_referer

打开靶场看看;

要求我们IP地址为123.123.123.123,这里我们利用header的一个参数 X-Forwarded-For

然后发现返回变了,要求我们来源必须是谷歌,那我们再加一个header:Referer
image.png

找到flag

webshell

看一下靶场:

一句话木马,拿工具连一下,这里用的是蚁剑:

连接成功,发现目录下发现flag.txt文件

打开发现flag:

simple_js

打开靶场以后发现要求输入密码:

但是试了几个都是错误的:

右键查看一下源码,发现一段代码;

代码如下:

`

<html>
<head>
    <title>JS</title>
    <script type="text/javascript">
    function dechiffre(pass_enc){
        var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
        var tab  = pass_enc.split(',');
                var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
                        k = j + (l) + (n=0);
                        n = tab2.length;
                        for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
                                if(i == 5)break;}
                        for(i = (o=0); i < (k = j = n); i++ ){
                        o = tab[i-l];
                                if(i > 5 && i < k-1)
                                        p += String.fromCharCode((o = tab2[i]));
                        }
        p += String.fromCharCode(tab2[17]);
        pass = p;return pass;
    }
    String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

    h = window.prompt('Enter password');
    alert( dechiffre(h) );

</script>
</head>

</html>

分析一下,发现不论输入什么都会跳到假密码,而真密码是在fromCharCode

所以这里将这段Unicode编码转换为字符串得到:
55,56,54,79,115,69,114,116,107,49,50
然后,将ASCII码转到字符串,得到flag:
786OsErtk12
用到的脚本:

s = "\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
l = s.split(",")
for i in l:
    print(chr(int(i)), end="")

写在最后

花了点时间把web区新手练习题写了一下,作为新手入门难度层层递进,还是很不错,接下来会继续更新一些其他的题,以及高手进阶区的题

最后修改:2020 年 09 月 04 日 04 : 32 PM