2020 安恒元旦月赛 Web 题目 Write Up

2

守护

  • tags:抓包重放、Web 小游戏
  • 难度:简单
  • 分值:50

打开靶机是个打飞机的小游戏(为啥飞机离恒星这么近还没被烧化?为啥要通过打陨石来保护恒星?陨石难道会砸坏恒星嘛233333这个出题人绝对是个物理鬼才),左上角显示目前的分数。

当一局游戏结束,会告诉你最终得分,并与你之前最高分进行比较。

那思路就十分明确了,直接开着 burp 玩儿游戏,等游戏结束,看看 burp 拦截下来的包,其中一个是向 /flag post 数据,body 栏中有个record = 5,将其改大,再重放给服务器,即可得到flag。

地图

  • tags:目录扫描、filter查看源码、变量覆盖
  • 难度:中等
  • 分值:100

打开靶机是一个工控系统的界面,看到这个界面就想到了攻防世界的 Web 题,然后开始瞎点,果然跟攻防世界一样按钮都是假的23333。直接查看源码搜索 href ,发现有个 index.php,一开始没注意,以为这个就是当前页面,然后扫了下目录才知道有两个 index 23333。

之后访问 index.php,又一通瞎点,发现转到了 index.php?page=index,那这就有点意思了,赶紧用 filter 搞一波源码:

不能有base,跟京津冀线下一个套路,用 rot 代替 base,查看源码即可得到网页源码。

稍微转一下码,发现这个代码写的太混乱了,整理一下:

<?php
$page = $_GET['page'];
if (isset($page)) {
	if (preg_match("/^. base. $/",$page)){
		echo $page;
		die("</br>not base");
	}
	else{
		if ($page === 'index.php') {
			die('Ok');
		}
		include($page);
		die();
	}
}
$hashed_key = 'df01c5786c5d7d83211a8f5f22f6bdb8468e23494ad698cb86c02d128473beef765952cdd5504cbe4657a6334f6b4f7b';
$parsed = parse_url($_SERVER['REQUEST_URI']);
$query = $parsed["query"];
$parsed_query = parse_str($query);

if($parsed_query!=NULL){
	$action = $parsed_query['action'];
}

if($action==="auth"){
	$key = $_GET["key"];
	$hashed_input = hash('sha384', $key);
        //echo $hashed_input.'n';
	if($hashed_input!==$hashed_key){
		die("no way to get flag!");
	}

	echo file_get_contents("/flag");
}
?>

代码逻辑:

  • 首先,服务器将收到的数据解析,比如传参 a = 1,服务器就会执行 $a = ‘1’
  • 其次,需要传递 action = auth,进入到 getflag 的代码段
  • 最后传递参数 key,让 key 的 sha384 和一个特定哈希值相等即可

一开始我以为这题核心在于爆破哈希值,然后我爆破了4位大小写字母以及一百万以下纯数字都没跑出来,就有点怀疑人生,后来一拍脑门,我都能定义变量了,直接把 hashed_key 覆盖不就得了。

payload:

http://183.129.189.60:10002/index.php?action=auth&amp;key=a&amp;hashed_key=54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31

About the author

1 comment

Imagin 丨 京ICP备18018700号-1


Your sidebar area is currently empty. Hurry up and add some widgets.