攻防世界web新手(补)

上次因为时间原因有部分的新手题的wp没有发布,这篇帖子是上一篇的补充上一篇的博客我放在这里博客地址因为我的疏忽题号标记错误标了8道实则里面是有前9道新手题,有需要的可以去看看。好了废话不多说开始解题之旅吧。

第十题command_execution
在这里插入图片描述
我们可以看到题目在题干的位置已经给出了很明显的提示是命令注入的漏洞,在这里我要补充一句,什么是ping以及waf。简单理解ping就是系统自带的一条命令,用来检测网络是否畅通的命令,而waf则是我们平常所说的防火墙,阻止一些恶意请求的。当然这只是笼统意义上的讲如果有兴趣的话可以看看这位大佬写的博客对waf有更详细的解释博客地址。再回到我们这一题。我们打开题目
在这里插入图片描述得到如图,我们先进行简单的测试,
在这里插入图片描述输入127.0.0.1发现下方显示出如图所示的东西,我们打开我们的cmd面板同样输入ping 127.0.0.1
在这里插入图片描述发现返回结果相同,证明我们的猜测是正确的,执行了系统命令。再加上没有waf,所以我们可以用拼接命令。关于Windows下的基本命令我不在过多阐述,如果需要可以看看这位大佬的博客博客地址。这题只需要我们用到ls命令跟cat命令足够。我们开始命令拼接。命令拼接之前我介绍一下命令拼接的几种形式
1.A&B 简单的相连关系A命令的是否执行与B命令是否执行无关
2.A&&B A执行为成功的时候B命令才会执行。
3.A|B A的输出作为B的输入值。
4.A||B A执行失败的时候B才会执行。
了解以上知识后我们就发现除了的四种方式,其余的方式都能解决这一题,我就以第三种为例。进行命令的拼接,用ls命令查看全部文件如下图。

在这里插入图片描述
看到这么多文件却没有我们要找的flag,那我们就一个个打开看看。当我们打开home时在这里插入图片描述发现了flag,之后我们再用cat命令打开这个文件就得到了flag
在这里插入图片描述

这题是最基本的命令注入漏洞。所涉及的知识也就是Windows下的命令以及其语法,不过这道题的分析过程是我们必须掌握的。

第十一题xff_referer
在这里插入图片描述
刚开始我打开题目的时候一脸懵,什么时xff,什么又是referer。伪造的用途又是什么,所以百度这个最好的工具人就派上了用场。经过我简单的了解,所谓xff就相当于于一个通行证证明请求来源的IP以及经过的代理服务器,类比于唐僧的通关文牒。而referer则是代表我是从哪个链接过来的例如你从谷歌点进我的博客,那么你的请求头便会带上。两者的格式分别是xff格式:X-Forwarded-For IP地址。referer的格式是:referer:地址。了解完基本知识进入题目。在这里插入图片描述
发现IP地址必须是123.123.123.123所以我们要用到在暴破中使用的Burp进行抓包与改包。在这里插入图片描述然后在数据包中加上X-Forwarded-For 123.123.123.123
在这里插入图片描述

放包得到如下的页面
在这里插入图片描述·所以我们再在后面补上referer:https://www.google.com
在这里插入图片描述再进行放包flag就出来了。
在这里插入图片描述这题主要考察xff以及referer的理解与使用。如果知道并明白他们的用途这题便非常好解决了。
第十二题simple_js
在这里插入图片描述
根据上一个simple_php题目的类型来看这个应该是js代码的审计,我们打开题目

在这里插入图片描述
发现让输密码,没有一点提示,我们怎么知道密码。。。我们随便输一个,提交在这里插入图片描述

假的密码,哈哈哈。题主还是有一点恶趣味的。既然是js代码的审计,我们就老样子查看页面源代码。
在这里插入图片描述

我们可以看到无论我们输入什么最后都会出现这句恶趣味的话,但我们看到第22行有一组神奇的字符串,我们很容易想到x是表示16进制的数所以我们对它进行小小的转化得到了一个数组。可是数组也不是flag因为题目上已经规定了flag的形式并且我们以往的做题经验来看数组也不一个flag,这时我们看到第7行的数字,因为按照代码的意思来讲第七行应该是输错密码的提示,我们记得是一串英文,但为什么变成数组了呢?我们这时想到ASCLL值是数字与字符转换的桥梁,所以这串数组大概率是flag的ASCLL值
所以我们将他进行转换便得到了flag。这题结束。
这一题考察的其实就是简单的js代码审计如果我们能看懂代码,这一题便迎刃而解了。

web新手区的题到这里就结束了,这简单的12题我断断续续的做了一个星期,也通过这12题的练习也对我的基础知识有了一个巩固,实践与学习相结合才是最好的学习方式,希望大家看过之后也能有所收获,我有错误的地方也请指正。

这道题是一个 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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值