最近打攻防演练,在演练快结束的时候获取到一个新的入口,奈何内网环境不大且过程较为曲折,写下此文记录作为总结,并记录当时的心态。
拿到目标后,经过一阵信息搜集,成功get到某个注入点,美滋滋啊。
尝试sqlmap一把梭,未果,算了,老老实实手注吧。
注入的过程当中,发现语句的长度被限制,看来得换个思路来注。
在union select的过程中,发现报了一个强制类型转换的错,并且成功注入出来了密码。
什么意思呢,下面来剖析一下。
比如在本地登录的过程中写在代码里面的sql语句是这样的:
select * from users where loginID= 'admin' and password = '1q2w3e4R!'
此时如果loginID处存在注入,且已经知道user表中的列数,则我们的注入语句如下:
admin' union select 1,2,3,4,5 --'
如果不看admin之后的数据,那么查询结果第一行的sql语句应该是:
select * from users where loginID = 'admin'
返回数据格式如下:
id (int) loginID(varchar) password(varchar) sex(varchar) age(varchar)
01 admin 1q2w3e4R! male 25
加上union select之后,就是如下的形式:
id (int) loginID(varchar) password(varchar) sex(varchar) age(varchar)
01 admin 1q2w3e4R! male 25
1 2 3 4 5
那么问题就来了,我们输入admin' union select 1,2,3,4,5 --'时,union select的数据类型是int类型的,那么现有的user表中,只有id列的数据类型是int类型,也就是说,如果按照这种格式进行查询的话,从2开始就会产生报错,此时只需要将2改成varchar类型,就会从3,也就是password字段产生报错,这样的话就可以快速注入出密码。
剖析结束,继续渗透!
上文中我们成功注入出来了登录的账号密码,进入后台之后,文件上传拿到shell。
拿到shell后,搭建隧道,上扫描器,可以直接获取权限的就只有两台机器,即一台存在17010漏洞的主机和一台mssql弱口令。
网段中还存在域
先看看mssql吧,连接上去之后,里面没有数据,但是可以执行命令。
然而更进一步的命令就执行不了了。。。
原来是有火绒啊。
使用工具强行将火绒关闭。
添加用户成功后,欲连接3389,然而尴尬的事情发生了。。。
看起来有人在线啊,盲猜这是一台个人PC。
说到这里,就可以用上一个高级东西 -- HiddenDesktop
https://github.com/WKL-Sec/HiddenDesktop
HVNC隐藏桌面插件允许我们在用户不知道的情况下与远程桌面会话进行交互的工具。也就是说使用这个工具可以忽略目标机器已经有账户在线的情况。
成功连接上目标机器!
在目标机器上找到了网段资产表,可惜没有密码,不过倒是搜集到了这个内网的其他网段。
尴尬的是目前这台机器无法通往新的网段,由于是个人PC,抓取该目标的密码之后也无法通过密码喷洒来获取其他服务器的登录凭证。
不过没关系,还有一台17010,看看这台机器有没有什么收获。
还好,这台机器的17010能够顺利利用,添加账户之后直接3389登录。
读取一波密码
读到了几个smb的通用口令,连接上之后也没有太多有用的信息。
net use发现这台机器居然连接着域控!
大喜,使用计划任务横向过去。
拿下域控,直接榨干!
之前在那台个人PC上发现了另外一个C段,从域控机器上面也可以ping通。
但是这个C段大概率是一个设备段,没有什么可以利用的点,演练活动也接近尾声,打完收工吧。
这个内网本身并没有多少能够利用的点,所以面对手中已有的机器的时候更加要仔细搜集信息,同时,杀软对抗也是一个非常重要的点,平时的知识储备会直接决定演练时的分数。
夯实安全责任
共筑网络安全