Cgiemail漏洞记录
p0nxp posted by:最近在测试的过程中,记录了一个应用的漏洞,这个应用通常用在了cpanel(虚拟主机管理面板).这次碰到了就记录一下吧,免得以后又忘记了.
cgiemail的作用简单说就是通过webcgi的方式来发送email,具体的这里不多赘述.想了解的到 项目地址.
现在我找到的关于这个程序的2个漏洞
1. CGIEmail 1.6 - 远程缓冲区溢出
2. CGIEmail 1.6 - 源代码泄露
- 先说下这个缓冲区溢出吧.具体的细节我也不太清楚,因为现在对缓冲区溢出这方面还不太了解,也不敢来分析什么的.以后接触到了可以拿来分析看看吧.
> 这个缓冲区漏洞问题出现在 cgicso 中,这个是cgiemail编译后生成的4个文件之一.应该这个漏洞的披露时间是2001年左右,比较老了.现在很少会出现这个漏洞了.但是可以在测试的时候也尝试下.
> 通常这个程序用于流行的虚拟主机管理面板 cpanel中,在测试的时候,随便找一个使用这个虚拟主机机器的站点,在url后面加上 /cgi-sys/cgicso 或者 /cgi-bin/cgicso 一般都是这2个访问点.只要返回的信息不是没有这个程序,就说明 存在该文件 因为这个漏洞现在几乎找不到了,我也没有找到例子,只能通过网上的资料来写.
> 在确人了该程序存在后,如果要利用这个漏洞还有一个前提条件.就是目标服务是否允许请求到远程主机. 可以发送一个GET请求来测试.参考
GET /cgi-sys/cgisco?fingerhost=A&query=AAA
- 接下来讲下源代码泄露这个漏洞.漏洞出现在cgiecho中,url访问点依旧和上面说的一样,不是/cgi-bin/ 就是 /cgi-sys/. 本来这个程序的作用是用于把email模板和传入的参数值输出到页面上,便于查看 官网介绍
> 但是它没有对传入email模板文件进行限制,导致我们可以传入当前站点根目录的任意一个文件作为email模板文件, 但是仅仅传入文件名,并不会泄露文件的内容.我们可以看看官网给的一个email模板文件的例子
> 通过说明和例子可以知道,如果要正常输出email文件的内容,除了文件要存在,还要传入一个 参数 这个参数就是例子中用方括号包起来的字符 [email],[yourname],[quest],[colour].如果我们提交了如下请求,那么文件的内容就会输出,而方括号里的内容就会被传入的对应值填充
GET /cgi-sys/cgiecho/test.txt?email=demo
> 这时候页面就输出文件的内容了.
> 注意:传入的参数必须和文件里方括号里的内容一致,如果文件里是 [‘email’]这种,在请求里也要对应为?‘email’=test.传入的值随意,只要不为空就可以. 这里test.txt对应的位置就是站点的根目录位置,如果文件在比如 demo/这个目录,同样加上目录/cgiecho/demo/test.txt就可以了.
> 知道了问题的原因和利用的条件,就可以去利用了. 这个漏洞有一点就是很坑,要成功利用,需要文件里有中括号包含的内容,就是有中括号,但是中括号里的内容就要靠猜了.不过通常的知道传入的参数还是挺好猜的,或者全站爬行一遍,就能找到很多参数了.注意:利用成功后会输出文件的内容,但其他包含中括号的内容如果没有猜解到,则会返回空.比如文件内有$str[‘te’]和$str[’s’],如果传入test.php?‘te’=[‘te123’],那么就会返回$str[‘te123’]和$str. 后面那个中括号里的内容就消失了,因为没有赋值.
> 这里附上个老外写的利用脚本 https://github.com/finbar-crago/cgiemail-exploit