Njctf2017-Writeup

这次比赛暴露了一些知识层面的不足, 也有一些遗憾的事。MISC就不在这里写了。只写WEB

get flag

通过更改flag的值,如改成flag.txt,可以看到返回的base64编码。这同时也是一个目录遍历漏洞
过滤了|, 但是可以通过&&来绕过.
最后结果如下:
get-flag

login

这个和sqli-labs的一道题很像。一般我们在创建数据库的时候,都喜欢这样

1
2
3
4
create table table_name(
username varchar(40),
password varchar(32),
);

如果在得到用户输入的长度超过声明的位数时,就可能导致同一个用户名。
这题就是如此,注册一个admin     a的用户,然后数据在判断的时候会将其截断,以admin用登录。

text wall

这个题明明我已经看到解法了,但是没找到隐藏的源文件…
是一个PHP反序列化的解法。

必须满足三个条件

  1. 应用程序中必须包含一个实现某个PHP魔幻方法(__wakeup, __destruct)的类

  2. 当调用脆弱的unserialize()时,必须声明攻击期间所使用的所有的类,否则必须为这些类支持对象自动加载

  3. 传递给反序列化操作的数据必须来自于一个文件,所以服务器上必须包含有一个包含序列化数据的文件。
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
33
34
35
<?php
class Example{
var $v = "";
function __destruct(){
eval($this->v);
}
}
class foo{
public $file = "";
public $data = "";
function __wakeup(){
file_put_contents($this->file, $this->data);
echo "call _wakeup";
}
}
# 实例化一个类并传入参数
$var = "phpinfo()";
$test = new Example();
$test->v = 'phpinfo();';
echo serialize($test);
# 实例化第二个类并传入参数,再将其序列化。
$test2 = new foo();
$test2->file = 'un_test.php';
$test2->data = '<?php phpinfo();?>';
//echo serialize($test2)."<br/>";
$str = $_GET['name'];
echo $str.'<br/>';
var_dump(unserialize($test));
# eval("phpinfo()");
# 上述这个不会执行,因为'phpinfo()' 这并不一条完整的语句,会报错为
# Notice: Undefined index: name in C:\phpStudy\WWW\test.php on line 3
# Parse error: syntax error, unexpected $end in C:\phpStudy\WWW\test.php(6) : eval()'d code on line 1
# 而 eval("phpinfo();");会正确执行
# 同时,如果 @eval('phpinfo()'); 不会报错,因为有 @
?>

所以在cookie中看到 list=xxx 之后,分析一下得到前40个字符是后边序列化内容的sha1值。
.index.php.swo文件中我们可以看到源类为:

1
2
3
4
5
6
7
8
9
10
<?php
$lists = [];
Class filelist{
public function __toString()
{
return highlight_file('hiehiehie.txt', true).highlight_file($this->source, true);
}
}
........
?>

那么这是一个文件包含类型的漏洞。首先构造a:1:{i:0;O:8:"filelist":1:{s:6:"source";s:9:"index.php";}} 来读到flag的位置。

text-wall
再重新构造一个反序列化字符串上传即可。

be admin

这个题是一个oracle padding的题。无奈的是我知道这个题但是我解不出来。还没有理解好oracle padding的事,等理解完了再来更新。

文章目录
  1. 1. get flag
  2. 2. login
  3. 3. text wall
    1. 3.1. be admin
|