2019-NCTF web writeup(上)

2019-NCTF web writeup


收货

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

2019NCTF题目

  • 0x01 easyphp


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'."
"
; } 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'."
"
; } 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,这个时候我也没太明白该怎么绕过。
2019-NCTF web writeup(上)_第1张图片
有了这个就好聊了,所以直接构造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}

  • 0x02 simple XSS

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

  • 0X03 Fake XML cookbook

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 = "" + username + "" + password + ""; 
    $.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打开后发现存在回显
2019-NCTF web writeup(上)_第3张图片
题目已进行提示说flag就在/flag里直接构造payload:2019-NCTF web writeup(上)_第4张图片

  • 0X04 True XML cookbook

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

  • 0x05 Upload your Shell

一进去发现类似博客的页面,题目说让我找上传点,不难发现存在一处图片的上传点。
2019-NCTF web writeup(上)_第7张图片
话不多说,直接上传东西就完事了。发现只能上传图片,呜呜呜,不过这也是基本操作,考察上传绕过就完事了,我尝试了%00截断并未成功,MINE类型绕过也是并未成功,就先传一个普通的照片叭,居然告诉我这个。。。
弹个alert出来告诉我上的存在,所以payload很明显,用

你可能感兴趣的:(CTF知识点总结,2019NCTF)