MENU

HDWiki6.0代码审计

December 16, 2019 • Read: 1081 • 代码审计阅读设置

0x00 前言

这次审的是HDWiki-v6.0UTF8-20170209,网上都有,很早的一个CMS了,比较闲所以玩一玩,还是黑盒加白盒的思路。

环境:

phpstudy

php5.2.17

mysql5.7.26

apache2.4.39

phpstorm

0x01 操作

首先创建一个管理员账号,该款cms的后台存在在管理员账号的系统设置选项。

image-20191215233201828

URL:

http://localhost/index.php?admin_main

image-20191215233318675

这里做了权限的校验,如果是普通用户访问这个URL提示权限不足,大概率越权挖不到了。只能看看先试着找找功能模块的漏洞。

image-20191215233508830

1.前台处存储型XSS

这里黑盒测试的注册模块,email处存在存储型XSS,直接在后台打cookie,但是有字符长度限制,不过还是可以用短地址payload。

URL:

http://localhost/index.php?user-register

前台注册模块尝试在email处直接插入XSS payload,但是发现提示邮箱格式不正确。

image-20191215234827038

这里用burp抓包看了下,填写时,前后端会实时校验写入的内容,但是可以绕过哈哈,先写入一个正确的地址,抓包时改用XSS payload,再提交。

image-20191215234554940

image-20191215235621608

测试登录admin账号到后台查看。成功弹框。

image-20191215232138372

代码分析:

这里分析下造成存储型XSS的成因。

根据功能找到注册模块,在/control/user.phpdoregister()函数中。跟进到底传参和验证逻辑,在第50行代码之后。

image-20191216125548363

可以看到post传入的值在经过去空白符后直接存入到变量email。然后把存储的变量带到一个叫docheck()的函数中,猜测这个是校验代入值的函数,CTRL+B跟进这个函数。

image-20191216143759076

继续跟进docheckemail()函数。

image-20191216144010307

看逻辑是通过if判断参数值的长度,查库是否已经存在该邮箱,如果成功的话进入到分支:

image-20191216144439048

继续跟进checkemail()函数

image-20191216144610919

看这个是正则匹配格式的,该处也没有对HTML代码或者JS代码字符进行处理,所以就造成了XSS漏洞。

修复方案:

1、使用htmlspecialchars()函数对接受参数进行处理。

2、限制特殊字符的传入,如(<>等等)。

2.后台处文件上传

代码分析:

存在后台文件任意文件上传,在admin_filemanager.php中。

image-20191216155815075

image-20191216160112941

image-20191216160006196

在代码258行之后,可以看到并没有对文件类型做限制,导入任意文件格式都可以被上传。

image-20191216160543399

修复方案:

1、白名单验证上传类型。

3.后台处任意文件删除

抓包点了下后台文件管理处的文件删除按钮,看到目录类似这种单一文件名的,就尝试../看能不能越到上一目录删除指定文件,没想到竟然成功了。

image-20191216161421514

目前该文件存在于C:phpstudyWWWhdwikifont.php

我在上上级目录创建了一个C:phpstudy1.txt

image-20191216161622891

提示删除成功。

image-20191216161703173

image-20191216161730309

文件也没了。

代码分析:

定位到admin_filemanager.php代码157行之后。

image-20191216162016201

可以看到传入的currentdir被处理的反斜杠,而文件名fname并没有做任意处理,直接构造../斜杠就可以删除已知的任意文件。

修复方案:

1、文件存储单独建一个表作为记录。

2、存储文件插入数据到表中记录,返回文件的id。

3、删除时,通过查询文件id对文件进行删除。

4.后台模板编辑GETSHELL

找到这里能直接编译页面源码。那么就插入phpinfo先尝试下。

image-20191216164620071

成功。

image-20191216164807038

5.后台任意文件下载

看到后台文件管理模块存在下载按钮,形如这种链接。

http://www.keefe.is/index.php?admin_filemanager-down-C:/phpstudy/WWW/hdwiki/index*php

那么尝试构造X:/XXX/filename*type看看能不能下载。

知道HDWiki存在config.php存在网站根目录。

构造链接如下:

http://www.keefe.is/index.php?admin_filemanager-down-C:/phpstudy/WWW/hdwiki/config*php

image-20191216170350509

尝试下载成功,看能不能跨web目录下载其他的文件。

这里在C盘建了一个1.txt

http://www.keefe.is/index.php?admin_filemanager-down-C:/1*txt

image-20191216170637149

成功。

原文作者:Keefe

原文链接:HDWiki6.0代码审计

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

Last Modified: March 20, 2020