攻防世界-web进阶区

baby_web

题目描述:想想初始页面是哪个
打开链接看到这个界面
在这里插入图片描述
这里有两种解法
法一:我们输入index.php ,就会立即跳转到1.php
那我们就对index.php抓包看看
在这里插入图片描述
在请求头看到flag:flag{very_baby_web}

法二:题目提示说初始界面,但是url后面会自动跳转到1.php,我们可以在控制台找到初始界面, 按F12进入控制台点开原始的网址就可以看到
在这里插入图片描述


Training-WWW-Robots

打开链接是这样一个页面
在这里插入图片描述
题目提示了robots,我们就看看robots协议是什么东西
在这里插入图片描述
学过python爬虫一定都知道,简单的来说他就是 网站声明 哪些文件是不允许 爬取的 声明文件,至于别人是否遵守这个 协议,它无法限制
所以我们访问一下http://220.249.52.133:47824/robots.txt
在这里插入图片描述
然后再访问一下http://220.249.52.133:47824/fl0g.php
在这里插入图片描述
最后拿到flag:cyberpeace{903178f76966037c8b7e9ac18980dcdb}


ics-06

打开链接是一个网站
在这里插入图片描述
点了所有的目录,发现只有报表中心可以点进去
在这里插入图片描述
但是在这个页面不管点什么都没有反应,同时我们注意到上面有个id=1的字眼,后来看了wp发现这是一个id爆破,真是想不到啊,那就爆破一下吧
在这里插入图片描述
在这里插入图片描述
然后intruder开始爆破,最后爆破出来id=2333
可以在bp里面的页面看到flag,也可以在网页上看到flag
在这里插入图片描述
在这里插入图片描述
得到flag: cyberpeace{06e924d21053a5a783468bd3fb3bc67a}


Web_php_unserialize

知识点:weakup()绕过,正则表达式绕过
源码:

<?php 
class Demo {
    
    private $file = 'index.php';
    public function __construct($file) {
    
        $this->file = $file; 
    }
    function __destruct() {
    
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() {
    
        if ($this->file != 'index.php') {
    
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
        } 
    } 
}
if (isset($_GET['var'])) {
    
    $var = base64_decode($_GET['var']); 
    if (preg_match('/[oc]:\d+:/i', $var)) {
    
        die('stop hacking!'); 
    } else {
   
        @unserialize($var); 
    } 
} else {
    
    highlight_file("index.php"); 
} 
?>

我们先对源码解读一下:
首先有一个Demo类,一个私有类型变量$file的值为’index.php’;
"__construct()"函数:这个函数是类创建对象(new)的时候会自动调用
destruct() (两个下划线就不写了,csdn四个下划线负责加粗字体),这个函数是对象被回收的时候调用
wakeup() 函数是反序列化时被自动调用的函数
下一段代码是get方式接收了一个var变量,首先对var进行base64解码,再去用正则匹配字符或字符串,“[oc]”匹配的是两个字母,\d是匹配整形数字,/i是不区分大小写,中间用冒号连接,主要是为了过滤反序列化字符串的前几位,这是需要绕过的

我们要得到fl4g.php就必须绕过三个东西:
1绕过wake up 函数
__wakeup()
是在反序列化操作中起作用的魔法函数,当unserialize的时候,会检查时候存在__wakeup()函数,如果存在的话,会优先调用__wakeup()函数。

绕过:

__wakeup()函数漏洞就是与对象的属性个数有关,如果序列化后的字符串中表示属性个数的数字与真实属性个数一致,那么i就调用__wakeup()函数,如果该数字大于真实属性个数,就会绕过__wakeup()函数。

2 绕过正则表达式

(preg_match(’/[oc]:\d+:/i’, $var))
而正则匹配的规则是: 在不区分大小写的情况下 , 若字符串出现 “o:数字” 或者 "c:数字’ 这样的格式 , 那么就被过滤 .很明显 , 因为 serialize() 的参数为 object ,因此参数类型肯定为对象 " O " , 又因为序列化字符串的格式为 参数格式:参数名长度 , 因此 " O:4 " 这样的字符串肯定无法通过正则匹配
绕过
而O:+4没被过滤说明绕过了过滤而且最后的值不变。

3 必须是base64加密
直接对序列化的内容进行加密

这里写一个php脚本跑一下

<?php 
class Demo {
    
    private $file = 'index.php';
    public function __construct($file) {
    
        
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值