记一次实战GetShell_IP

前言

本文为实战过程中遇到的问题思考及记录,旨在与大家进行交流与分享。如观后有灵感一闪,请勿随意对互联网站点进行非法测试。

PS:截至投稿前,已将漏洞提交厂商并验证其已完成修复。

记一次实战GetShell_数据库_02

记一次实战GetShell_IP_03

前期测试

前期通过测试发现网站存在源码备份文件,可以直接下载网站源码。

链接:http://www.abc.com/web.rar

记一次实战GetShell_IP_04

按照常规思路下载了源码后,查看里面的数据库即可知道管理员的密码,此处进行尝试。将asp后缀的数据库文件修改为mdb后缀打开

记一次实战GetShell_数据库_05

记一次实战GetShell_穷举_06

此时发现数据库的Admin_Pass的内容是18位长度类似MD5字符串,直接拿去CMD5解密是解密不了的。因为不是常规的16或32位密文。

记一次实战GetShell_IP_07

通过查看源码,发现其验证方式如下:

记一次实战GetShell_数据库_08

通过Mid函数取32位MD5中第4位开始的18位字符串。

记一次实战GetShell_数据库_09

密码穷举

由上述已经得到了密码的加密方法,通过编写个小脚本即可进行弱密码的穷举。如下:

记一次实战GetShell_IP_10

使用上述穷举的弱口令用户登录后台管理,后台地址为admin。

记一次实战GetShell_IP_11

记一次实战GetShell_IP_12

登录后发现当前为受限管理员,很多功能无权限使用,抓包查看该功能请求。

记一次实战GetShell_穷举_13

发现cookie信息里有:

Angel_aspAdmin=UserName=zhanch&UserPass=adc3949ba59abbe56e&UserID=10

其中我们可以从数据库中获取到admin的UserPass及UserID,于是尝试替换是否能有权限访问该页面?于是进行测试:

记一次实战GetShell_穷举_14

替换后访问发现并没有成功,而是返回登录页面。

记一次实战GetShell_IP_15

登录分析

由于上述替换后并没有访问成功,于是结合源码进行登录分析。

记一次实战GetShell_穷举_16

通过上述代码,发现程序在判断是否已登录的操作,除了校验Cookie中的UserID、UserName、UserPass外,还会验证IP,这就是上述修改为admin的Cookie后返回登录页面的原因。

此IP的值是在每次登录的时候,在校验了账号密码正确后,会把登录客户端的IP更新同步到数据库中,代码如下:

记一次实战GetShell_IP_17

记一次实战GetShell_IP_18

找到获取客户端IP的代码如下:

记一次实战GetShell_IP_19

发现此处可以通过X-Forwarded-For的方式进行IP伪造。此处伪造IP为数据库里admin记录的IP。

记一次实战GetShell_IP_20

成功返回了页面,说明admin管理员上次备份了网站后没有再登录过,或者admin登录的IP地址较固定。

此时开启X-Forwarded-For,并修改Cookie为:

Angel_aspAdmin=UserName=admin&UserPass=18cca7781212ba1922&UserID=1

即可以Admin管理员的权限管理网站。

记一次实战GetShell_数据库_21

如上,即使管理员密码破解不出来,若运气好,数据库记录的IP是管理员常登录的IP的情况下,用此方法也有几率登录管理后台。

记一次实战GetShell_数据库_22

后台GetShell

登录管理后台后,数据库备份拿Shell是计算机基本操作,但此处也有坑点。正常来说上传图片马,通过数据库备份成asp后缀,即可拿Shell。但实际如下:

首先上传图片马

记一次实战GetShell_数据库_23

然后通过数据库备份成asp脚本

记一次实战GetShell_数据库_24

记一次实战GetShell_数据库_25

提示备份成功,但实际访问却是:

记一次实战GetShell_IP_26

查看源代码后发现,当前数据库路径是写死的,所以再怎么改成图片文件路径也没有用,备份的还是原来数据库的文件。

记一次实战GetShell_IP_27

记一次实战GetShell_穷举_28

去看备份的文件

记一次实战GetShell_数据库_29

看文件大小也就知道,这绝不是我们的图片马shell。

此处需用到恢复的功能进行GetShell,如下:

记一次实战GetShell_穷举_30

记一次实战GetShell_IP_31

记一次实战GetShell_IP_32

如上成功GetShell

记一次实战GetShell_IP_33

后记

后来和小伙伴一起交流,问他思路,他说直接管理后台暴力破解登录后台。

记一次实战GetShell_数据库_34

后来回想了一下,当时第一次穷举并没有使用Top1000的弱口令,而是使用Top200的弱口令,导致我没有穷举到admin的密码。

其次当我看到后台有验证码时,就并未去验证其验证码是否会失效。

所以说,渗透测试是一门艺术,一千个观众眼中就有一千个哈姆雷特。有时候思路也是很重要的,得多思考多尝试,但总言之,不管黑猫白猫,能抓住老鼠就是好猫。

本文完。


记一次实战GetShell_IP_35