360hackgame

第一关

提示要从hack.360.cn进去,改一下refere就可以了。

第二关

让我们找密码?那就找了~结果找到了这样一段js代码~

1
2
3
<script src="Public/js/encode.js" language="javascript">
var password = eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('9 5$=["\\8\\3\\4\\3\\2\\2\\1\\3\\2\\3\\3\\2\\2\\7\\3\\1\\4\\1\\3\\2\\1\\3\\1\\3\\2\\2\\2\\1\\3\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\2\\1\\3\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\2\\1\\3\\1\\3\\2\\2"];6 c(){e["\\f\\g\\d\\a\\b"](5$[0])}',17,17,'|x2b|x5d|x5b|x21|_|function|x29|x28|var|x72|x74|O0|x65|window|x61|x6c'.split('|'),0,{}));
</script>

看起好烦啊,那就输出看看咯。
先在本地调试看看

1
2
3
4
<script>
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('9 5$=["\\8\\3\\4\\3\\2\\2\\1\\3\\2\\3\\3\\2\\2\\7\\3\\1\\4\\1\\3\\2\\1\\3\\1\\3\\2\\2\\2\\1\\3\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\2\\1\\3\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\1\\4\\1\\3\\2\\2\\1\\3\\1\\3\\2\\2"];6 c(){e["\\f\\g\\d\\a\\b"](5$[0])}',17,17,'|x2b|x5d|x5b|x21|_|function|x29|x28|var|x72|x74|O0|x65|window|x61|x6c'.split('|'),0,{}));
document.write(_$)
</script>

结果来了一个jsfuck的一段代码。
解一下,get flag!

第三关

解码?给了这么一段16进制


0x253444253534253435253335253439253434
25343525373725344425353325343125373825
34442534342536372536372534462535342536
42253637253444253534253435253738253439
25343425343525373725344625353325343125
37382534442534342534352536372534442535
34253435253332253439253434253435253738
25344425353325343125333125344425353325
34312533312534452534332534312533302534
46253433253431253344

先转ascii,


%4D%54%45%35%49%44%45%77%4D%53%41%78%4D
%44%67%67%4F%54%6B%67%4D%54%45%78%49%44
%45%77%4F%53%41%78%4D%44%45%67%4D%54%45
%32%49%44%45%78%4D%53%41%31%4D%53%41%31
%4E%43%41%30%4F%43%41%3D

urldecode


MTE5IDEwMSAxMDggOTkgMTExIDEwOSAxMDEgMTE2IDExMSA1MSA1NCA0OCA=

ase64decode


119 101 108 99 111 109 101 116 111 51 54 48

to ascii


welcometo360

done!

第四关

发现图片后面还有一个图片。然后。。。。

第五关

google.

1
2
3
php spy: angel  
aspx spy: admin
jsp spy: ninty

第六关

之前做到过。一开始想到的时bat,后来想到vim的就swp了。然后发现了这么一坨。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 echo htmlsepcialchars($str); } public function __call($method,$args) 
{ if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX')))

{ if(method_exists($this,'_empty')) { $this->_empty($method,$args); }
elseif(file_exists_case(C('TEMPLATE_NAME'))){ $this->display(); }
elseif(function_exists('__hack_action')) { __hack_action(); }
else{ _404(L('_ERROR_ACTION_').':'.ACTION_NAME); } }else
{ switch(strtolower($method))
{ case 'ispost' : case 'isget' : case 'ishead' : case 'isdelete' : case 'isput' : return strtolower
($_SERVER['REQUEST_METHOD']) == strtolower(substr($method,2));
case '_get' : $input =& $_GET;break;
case '_post' : $input =& $_POST;break;
case '_put' : parse_str(file_get_contents('php://input'), $input);break;
case '_param' : switch($_SERVER['REQUEST_METHOD'])
{ case 'POST': $input = $_POST; break; case 'PUT': parse_str(file_get_contents('php://input'), $input);
break; default: $input = $_GET; } if(C('VAR_URL_PARAMS'))
{ $params = $_GET[C('VAR_URL_PARAMS')]; $input = array_merge($input,$params); }
break; case '_request' : $input =& $_REQUEST; break;
case '_session' : $input =& $_SESSION; break;
case '_cookie' : $input =& $_COOKIE; break;
case '_server' : $input =& $_SERVER; break;
case '_globals' : $input =& $GLOBALS; break;
default: throw_exception(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_')); }
if(!isset($args[0])) { $data = $input; }elseif(isset($input[$args[0]]))
{ $data = $input[$args[0]]; $filters = isset($args[1])?$args[1]:C('DEFAULT_FILTER');
if($filters) { $filters = explode(',',$filters); foreach($filters as $filter)
{ if(function_exists($filter)) { $data = is_array($data)?array_map($filter,$data):$filter($data); }
} } }else{ $data = isset($args[2])?$args[2]:NULL; } return $data; } }
protected function _getNextKey()
{ $str = base64_encode("p7367p0r578pn8ons4n44p9qs9sqrq4s82c4372b97049560dfae1865e668fb3a");

return md5($str); } public function __destruct() { if(C('LOG_RECORD')) Log::save(); tag('action_end'); } }

根据这个就能拿到flag了

1
$str = base64_encode("p7367p0r578pn8ons4n44p9qs9sqrq4s82c4372b97049560dfae1865e668fb3a"); return md5($str);

第七关

无限脑洞题

Lilei20140305

第八关

代码审计,尝试了很多很多很多次之后终于过了=。=

1
include('template/' . $lang . '.php.html');

对传进来的$lang没有过滤,直接include进来可能导致文件包含漏洞。

preg_replace /e 这个/e可以造成代码执行漏洞。

1
2
3
4
5
6
if (!file_exists($default_path))
mkdir($default_path, 0777, true);
$destination = $default_path . basename($filename);
echo 'Saving your image to: ' . $destination;
$jfh = fopen($destination, 'w') or die("can't open file");
fwrite($jfh, $GLOBALS['HTTP_RAW_POST_DATA']);

这里他创建了一个777的目录,然后写入,文件名没有过滤,可以显示相对路径,$HTTP_RAW_POST_DATA 可以使用post往文件里写shell,直接getshell。

1
return file_get_contents($templateFile);

可以返回文件源码。

第九关

xss

第十关

没搞定,看了writeup
把应该是把cookie中的display当作get参数交了。然后在乌云上找了个洞就getflag了~