目录:
漏洞复现的cmseasy5.5百度网盘链接
安装cmseasy:
1.在phpstudy上安装cmseasy
2.设置mysql密码为phpstudy内置mysql的密码并检查安装环境
3.安装后查看mysql内cmseasy是否有内容
获取用户名和密码过程:
1.查看源码发现有个remotelogin远程登录函数
2.发现admin.php下有一个无须密码可跳转的if语句
3.在front_class.php找到IP相关函数,发现有一个x_forwarded_for登录if语句
4.在浏览器扩展中搜索x forwarded for扩展插件并获取
5.先登录cmseasy进去,然后点击设置跳转页面,发现有一个cookie安全码,记住这个页面的网址
6.打开获取到的扩展插件,输入name为X_FROWARDED_FOR,Value为目标网站IP
7.先在cmseasy退出登录,然后在之前复制的网址后面加入&ishtml=1,发现无须密码也可以登录,但是只有设置页面,找到cookie安全码并记录
8.继续看cookie_password一行,发现cookie安全码先进行base64_decode()解码,然后xxtea_decrypt()解密,然后unserialize()反序列化。
9.先找到解密函数xxtea_decrypt,然后找与其对应的加密函数xxtea_encrypt
10.因为是对$user赋值,发现其结构是user(),以及还有一个getrow()函数也要追代码
11.先找到user类,发现其继承table类,再去找table类
12.发现talbe类在inc文件夹下的table.php内,且getrow()函数也在其中
13.发现rec_select_one()还与其他2个函数有关
14.因为cmseasy是开源的,得知会用到cmseasy_user表,查看其表结构,发现有20个字段
15.于是我们写sql注入代码时要写20列,之前追代码可知传的参是一个数组
和之前对代码解读相反:先序列化,然后加密,然后编码
16.然后执行该index.php,将得到字符串复制下来
17.首先输入127.0.0.1/cmseasy/admin跳转到登录界面,然后将act=login参数改成act=remotelogin远程登录,然后在后面添加&args=字符串
18.复制加密的字符串,然后在cmd5.com进行解密,发现密码为root
1.在phpstudy上安装cmseasy
2.设置mysql密码为phpstudy内置mysql的密码并检查安装环境
#安装前请先在mysql创建一个数据库名cmseasy,安装时间需要等1-3分钟
3.安装后查看mysql内cmseasy是否有内容
1.查看源码发现有个remotelogin远程登录函数
里面有一个cookie_password
2.发现admin.php下有一个无须密码可跳转的if语句
3.在front_class.php找到IP相关函数,发现有一个x_forwarded_for登录if语句
4.在浏览器扩展中搜索x forwarded for扩展插件并获取
5.先登录cmseasy进去,然后点击设置跳转页面,发现有一个cookie安全码,记住这个页面的网址
6.打开获取到的扩展插件,输入name为X_FROWARDED_FOR,Value为目标网站IP
#本地搭建所以是127.0.0.1
7.先在cmseasy退出登录,然后在之前复制的网址后面加入&ishtml=1,发现无须密码也可以登录,但是只有设置页面,找到cookie安全码并记录
8.继续看cookie_password一行,发现cookie安全码先进行base64_decode()解码,然后xxtea_decrypt()解密,然后unserialize()反序列化。
9.先找到解密函数xxtea_decrypt,然后找与其对应的加密函数xxtea_encrypt
将该函数及其内部用到的其他函数一起复制到一个新建的index.php内:str2long(),long2str(),int32()
10.因为是对$user赋值,发现其结构是user(),以及还有一个getrow()函数也要追代码
11.先找到user类,发现其继承table类,再去找table类
12.发现talbe类在inc文件夹下的table.php内,且getrow()函数也在其中
还用到了condition()和rec_select_one()函数,而condition()就在getrow()下面,现在要继续追代码rec_select_one()了
13.发现rec_select_one()还与其他2个函数有关
14.因为cmseasy是开源的,得知会用到cmseasy_user表,查看其表结构,发现有20个字段
15.于是我们写sql注入代码时要写20列,之前追代码可知传的参是一个数组
和之前对代码解读相反:先序列化,然后加密,然后编码
16.然后执行该index.php,将得到字符串复制下来
17.首先输入127.0.0.1/cmseasy/admin跳转到登录界面,然后将act=login参数改成act=remotelogin远程登录,然后在后面添加&args=字符串
#字符串内的+,/都要进行unicode编码,其中+为%2d,/为%2f
然后浏览器按F12,找到查看cookie值的一栏,发现login_username值已经出来了
18.复制加密的字符串,然后在cmd5.com进行解密,发现密码为root
思考:追代码很耗时耗精力,代码审计同样如此,即使是复现漏洞也不敢说完全能看懂,有时候debug能用还是用一下比较好。
链接:https://pan.baidu.com/s/1L3KAEMGBQ3nSytih15j_aw
提取码:1234
–来自百度网盘超级会员V4的分享