2016西安华山杯CTF Web部分Writeup

2016华山杯在西安西电举办,时间9月10日9:00-21:00

本渣本着重在掺和的心态参加了线上的比赛,实力不济,不要见笑。(其实做到后期真心做不下去了。。。)

先写一下Web题目的writeup

0x01 签到 10′

给出二维码扫描得到flag,主要是提交格式的熟悉

0x02 打不过~ 50′

提交的值没法点击,查看源代码,将代码<input>标签

%e5%9b%be%e7%89%872

value=submit修改为type=submit  disable=true去掉

%e5%9b%be%e7%89%873

或者根据代码知道Password的参数是GET提交,可以直接在URL后边加上?Password=xxx(注意P需要大写)

提交之后在响应头中找到str属性

%e5%9b%be%e7%89%874

将值base64解码,得到的是md5加密后的值,然后cmd5解密,得到1931b

提交Password=1931b返回flag

%e5%9b%be%e7%89%875

0x03 系统管理 100′

看着有些熟悉,是实验吧的原题http://www.shiyanbar.com/ctf/1810

查看源代码

%e5%9b%be%e7%89%876

根据代码需要构造user的值md5后开头是0e,百度之,有个神奇的站点记录好了很多值http://www.219.me/posts/2884.html

POST提交username=xxx之后,返回提示user.php

访问user.php得到password的提示

%e5%9b%be%e7%89%877

需要用php反序列化,根据代码要求构造

password=a:2:{s:4:”user”;b:1;s:4:”pass”;b:1;}

同时满足username和password要求后返回flag的值

%e5%9b%be%e7%89%878

0x04 简单js 100′

实验吧原题:http://www.shiyanbar.com/ctf/9

查看源代码,需要计算a的值,可以将代码复制修改后运行,也可以直接在Firefox中的DOM中查看到a节点的值

%e5%9b%be%e7%89%879

输入值得到flag

%e5%9b%be%e7%89%8710

0x05 弹弹弹! 150′

根据提示知道是XSS,测试发现<script>标签被过滤了,直接用<img>标签触发XSS就可以得到flag

%e5%9b%be%e7%89%8711

0x06 233 一句话木马 150′

查看源代码,注释中是jsfuck编码,复制到浏览器中运行之,得到

%e5%9b%be%e7%89%8712

有一点比较蛋疼,得到的结果很多浏览器不支持复制,Firefox浏览器虽然支持复制,但是直接运行时Firefox有保护机制没运行成功,这就非常尴尬了。。。

最后用在线JSfuck解码站点+Firefox搞定

在线解密站点http://www.jsfuck.com/

解码后得到的值为:

┼攠數畣整爠煥敵瑳∨䁥祳ぴ㍧≴┩>

这是asp木马经常使用的编码,使用unicode2ansi工具时出现乱码,解码不对,最后用winhex完美解决

将这段话复制到winhex中,使用unicode格式,winhex会自动将这段代码转换,得到一句话密码,构造flag就ok了

%e5%9b%be%e7%89%8713

0x07 PHP很烦人 200′

PS: 无间道没做出来。。。

查看源代码

%e5%9b%be%e7%89%8714

根据代码使用php伪协议绕过user认证,保证user是admin

%e5%9b%be%e7%89%8715

输出hello admin! 然后包含class.php,但是直接访问file=class.php无果

需要使用php伪协议读取class.php文件

%e5%9b%be%e7%89%8716

经过解码后得到class.php源代码

<?php
	calss Read{//f1a9.php
		public $file;
		public function _toString(){
			if(isset($this->file)){
				echo file_get_contents($this->file);
			}
			return "__toString was called!"
		}
	}
?>

同样的方法得到index.php文件

<?php
	$user = $_GET["user"];
	$file = $_GET["file"];
	$pass = $_GET["pass"];

	if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
		echo "hello admin!<br>";
		if(preg_match("/f1a9/", $file)){
			exit();
		}else{
			include($file);//class.php
			$pass = unserialize($pass);
			echo $pass;
		}
	}else{
		echo "you are not admin!";
	}
?>

根据index.php给出的代码,需要php反序列化构造pass参数

pass=O:4:”Read”:1:{s:4:”file”;s:10:”./f1a9.php”;}

将所有条件拼接得到flag

%e5%9b%be%e7%89%8719

待续。。。

您可能还喜欢...