攻防世界 web 新手题小结

01view_source

方法:在下用的firefox,鼠标右键可查看页面源代码,试了试不行。那么F12,即可得到。
收获:鼠标右键不能用,与前端函数有关,在该页面中我们可以发现有这两个函数,

1. document.oncontextmenu=new Function("return false") //是右键菜单禁用;
2. document.onselectstart=new Function("return false") //是禁止选中页面上的内容;
3. document.onselectstart=new Function("return false")//是禁止复制在页面上选中的内容;(补充)

 

02get_post

HTTP通常的两种请求方法是get和post.

方法一:首先进入容器会看到

那么就在url后加上?a=1,然后得到

这时有三种方法:1.用firefox插件Max HacKBar,,得到flag;

方法二:用burp抓包,send to repeater,加上b=2 send,得到flag;

方法三:不用插件,,某位大佬的。在查看器中进行如图修改,即可得到flag。

 

03robots

方法:在url后加上robots.txt,会得到,然后访问flag_1s_h3re.php,即可得到flag。

收获:当一个搜索机器人(有的叫搜索蜘蛛)访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,那么搜索机器人就沿着链接抓取。并且,robots.txt必须放在一个站点的根目录下,而且文件名必须是小写。robots.txt就是告知搜索引擎哪些是允许访问的,哪些是不想被搜索引擎收录的。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。但是,robots.txt不是防火墙,不能阻止访问。

 

04backup

方法:在url后加上Index.php.bak,访问,在f12中,即可得到flag.

收获:常见的备份文件后缀名有:.git  .svn  .swp  .bak  .bash_history  .~

  php的备份有两种:*.php~和*.php.bak。  这道题也可以用py脚本解决,扫目录,即可得到地址。也可以用御剑扫描进行解决。

 

05cookie

分析:首先会看到这个,然后f12查看,cookie,,然后就在url后加上cookie.php,访问,看到,提示我们在响应头里。

方法一:burp抓包,并send to repeater,而后send,在响应头里即可得到flag。

方法二:firefox,访问http://220.249.52.133:54804/cookie.php,f12,在网络一栏中,可看到访问cookie.php的数据包,

收获:Cookie是当主机访问Web服务器时,由 Web 服务器创建的,将信息存储在用户计算机上的文件。一般网络用户习惯用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 Session 跟踪而存储在用户本地终端上的数据,而这些数据通常会经过加密处理。

 

06disabled_button

方法一:打开后,发现,f12,在查看器一栏中,将disabled改为abled或直接将disabled=""删除,然后按钮就可以点了。点击即可得到flag.

方法二:审计form表单代码,post传值auth=flag,也可以得到flag.

(但是我在用Burp实现的时候却无法成功,如下图),如果哪位大佬懂的话,希望在评论区指点小弟下。

收获:html的相关标签及相应的属性

 

07weak_auth

题目简介:打开后,如图

需要输入账号和密码,然后随便输入,会出现弹窗(please login as admin)在f12发现

方法:burp爆破,配置好之后,打开,抓包,send to Intruder,

然后设置爆破点为password:将admin两边的$去掉,将password的值两边加上$.

加载字典,load加载字典,然后开始爆破

发现,密码为123456时length不一样,于是在响应包里得到flag。

收获:burp的爆破功能,以及用Python,c++创建字典的方法.


08command_execution

题目:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。

waf,web应用防火墙,Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。所以本题环境没有waf。

方法一:1.在文本框内输入127.0.0.1 | find / -name "flag.txt" ,查找flag所在位置

2.在文本框内输入 127.0.0.1 | cat /home/flag.txt 可得到flag

方法二:1.在文本框中输入127.0.0.1 && ls 查看当前目录下的文件

2.输入127.0.0.1 && ls../ 查看上一级目录

3.输入127.0.0.1 && ls../../  查看上一级目录

4.输入127.0.0.1 && ls../../../  查看上一级目录,发现有个home的文件,不妨打开看看

5.输入127.0.0.1 && ls ../../../home 查看该文件,发现flag.txt

6.输入127.0.0.1 && cat ../../../home/flag.txt 打开该文件,

方法三:requests库,这是xctf平台某位大佬的解题方法。同时requests库的相关使用参见这位大佬的requests库基本使用   和这位大佬的Python-第三方库requests详解    ,个人感觉收益颇丰。

收获:

| 的作用为将前一个命令的结果传递给后一个命令作为输入

&&的作用是前一条命令执行成功时,才执行后一条命令

还有相关指令要学习,find ,cat ,ls  等指令。

 

09simple_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;
}
?> 

题目:打开后出现如下代码,

进行代码审计:1.get传参给$a和$b,如果$a==0 且 $a ,则返回$flag1;

2.is_numeric()函数,如果$b是数字或者数字字符串,则返回ture,exit()执行;否则,并且$b>1234

,则返回$flag2; 

3.这里要注意一点,php语言是弱类型比较,php中有两种比较符号

=== 会同时比较字符串的值和类型;

== 会先将字符串换成相同类型,再作比较,属于弱类型比较;

所以如果$a=string(string是任意字符串),则‘string’==0为真;

$b=12ss,则‘12ss’==12为真,

方法一:返回flag1.   url后加上index.php?a=string (string为任意字符串),得到flag1的一半,还有半截未显示出来

<?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;
}
?>

Cyberpeace{647E37C7627CC3E401

在url后加上index.php?a=0&b=1235a,得到flag1的另一半(别问我咋知道的,瞎试试出来的,现在还没搞懂,懂的大佬可在评论区指点一下)

<?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;
}
?>

9EC69324F66C7C} 

方法二:返回flag2.  url后加上index.php?a=string&b=1235a (string为任意字符串),得到flag2.

<?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;
}
?>

Cyberpeace{647E37C7627CC3E4019EC69324F66C7C} 


10xff_referer

题目:描述及打开后看到的

方法一:burp抓包,send to repeater,将X-Forwarded-For添加进去(注意位置),得到如下图

由图知,https要设置,于是再将Referer:https://www.google.com 插入进去,得到flag.

 

 

 

收获:

X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的.


11webshell

这个题的相关资料:

新手区webshell


12simple_js

题目:打开后,就让我输密码,随便输入,出现弹窗,查看源代码。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) );

 开始代码审计:简化后,就是有个16进制的字符串"\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",将其转为10进制,然后根据ASCII码表对应的字符进行转化,得到flag。

方法:python

收获:

1.fromCharCode()函数

var n = String.fromCharCode(65);
输出结果: A

2.16进制字符串转10进制,python直接输出

3.数字转字符串,用遍历,chr()函数:将数组转为相应的ASCII码字符。

 

 

 

 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
这道是一个 PHP 反序列化的目。 目描述: 提示:这次不会那么简单了,打开源代码看看? 源代码: ``` <?php error_reporting(0); highlight_file(__FILE__); class Show{ public $name; public $age; public function __construct($name,$age){ $this->name = $name; $this->age = $age; } public function __toString(){ return $this->name; } } class Flag{ public $show; public $data; public function __construct(){ $this->show = new Show('flag','0'); $this->data = file_get_contents('/flag'); } public function __destruct(){ if(preg_match('/show|flag|_|\s|\(|\)|{|}|\'|\"/i',$this->show)){ exit('hacker!'); } echo $this->show." is ".$this->data; } } if(isset($_GET['a'])){ $a = unserialize($_GET['a']); if($a instanceof Flag){ echo $a; } } ``` 分析: 首先看到这是一个传入参数进行反序列化的目,传入参数为 $_GET['a'],并且在反序列化后判断其类型是否为 Flag,如果是则输出 $a。 在 Flag 类的构造函数中有一个 $this->data = file_get_contents('/flag'),意味着我们需要获取服务器上的 /flag 文件。 而在 Flag 类的析构函数中,会对 $this->show 变量进行正则匹配,匹配的正则表达式为 /show|flag|_|\s|\(|\)|{|}|\'|\"/i,如果匹配到就会输出 'hacker!'。这里需要注意的是,$this->show 的值是 Show 类的一个实例,而 Show 类中的 __toString() 方法返回的是 $this->name 的值。 因此,我们需要构造一个序列化后的字符串,使得在反序列化后其类型为 Flag,$this->show 的值为一个 Show 类的实例,且该实例的 $name 值满足正则表达式的匹配条件。 解法: 根据目分析,我们需要构造一个序列化后的字符串,使得在反序列化后其类型为 Flag,$this->show 的值为一个 Show 类的实例,且该实例的 $name 值满足正则表达式的匹配条件。 我们可以通过手动构造序列化字符串来实现这个目标。首先构造一个 Show 类的实例,该实例的 $name 值为一个正则表达式的匹配条件,然后将该实例作为 Flag 类的一个属性,最后将 Flag 类序列化即可。 构造序列化字符串的代码如下: ``` <?php class Show{ public $name; public $age; public function __construct($name,$age){ $this->name = $name; $this->age = $age; } public function __toString(){ return $this->name; } } class Flag{ public $show; public $data; public function __construct(){ $this->show = new Show('/show|flag|_|\s|\(|\)|{|}|\'|\"/i','0'); $this->data = file_get_contents('/flag'); } public function __destruct(){ if(preg_match('/show|flag|_|\s|\(|\)|{|}|\'|\"/i',$this->show)){ exit('hacker!'); } echo $this->show." is ".$this->data; } } // 序列化 Flag 类 $flag = new Flag(); $ser = serialize($flag); echo urlencode($ser); ``` 将上述代码保存为文件 unserialize3.php 并上传到服务器上,然后访问 http://your-ip/unserialize3.php,得到序列化后的字符串: ``` O:4:"Flag":2:{s:4:"show";O:4:"Show":2:{s:4:"name";s:23:"/show|flag|_|\s|\(|\)|{|}|'|\i";s:3:"age";s:1:"0";}s:4:"data";s:45:"flag{3c75f8e2-6eb1-4f50-8901-8c3e0ae63a07}";} ``` 最后将序列化后的字符串作为 $_GET['a'] 的值传入即可,访问 http://your-ip/unserialize3.php?a=O%3A4%3A%22Flag%22%3A2%3A%7Bs%3A4%3A%22show%22%3BO%3A4%3A%22Show%22%3A2%3A%7Bs%3A4%3A%22name%22%3Bs%3A23%3A%22%2Fshow%7Cflag%7C_%7C%5Cs%7C%5C(%5C)%7B%7D%7C%27%7C%5C%22%5Ci%22%3Bs%3A3%3A%22age%22%3Bs%3A1%3A%220%22%3B%7Ds%3A4%3A%22data%22%3Bs%3A45%3A%22flag%7B3c75f8e2-6eb1-4f50-8901-8c3e0ae63a07%7D%22%3B%7D,即可得到 flag
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值