日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Bypass Preventing CSRF

發布時間:2024/5/15 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Bypass Preventing CSRF 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CSRF在過去的n年(n>2)一直都火,在bh/defcon/owasp等會議上多次探討CSRF的攻防[具體你可以看看以往的那些pp].前 段時間PLAYHACK.net上發表了一個總結性的pp:Preventing CSRF,然而CSRF是很難徹底防止的,這個也是我說CSRF卑鄙無恥的一個原因,下面我的一些Bypass Preventing CSRF的tips:


0x01.HTTP Referer

其實國內的CSRF攻擊由來已久了,比如n年前的各大下載網站防止盜鏈,n前dvbbs的一個xss利用了csrf提升權限等等.在下載網站防止盜鏈的過程中很多就使用了通過判斷HTTP Referer來限制,但是這樣的Prevent很容易就被繞過了.
??
?? 0x01a.Attack From Inside
很多人都忽律了從site'內部'的攻擊.
1.很多的web app都支持link/img等標簽,然而通過這些標簽訪問的url的Referer都是本站的,所以攻擊者只要在你的bbs 或者blog等上通過那些標簽發一個你構造好的url,然后就是引誘admin了 :)
2.ie有很多特點如:txt/圖片等里面的html/js會被執行,當年你可以通過上傳你的構造的代碼...[注意這里txt里js執行的domain和txt是同一個]
?? 0x01b.偽造http header
1.客戶端腳本:
????a.js
?????? XMLhttp.setRequestHeader() 但是xmlhttp不可以跨區域[當然你可以利用0x01a.2里的方式上傳],所以一般的是要結合xss.
????b.as
???? * XML.addRequestHeader()
???? * LoadVars.addRequestHeader() as里直接設置Header是有一些限制的,比如 .addRequestHeader("Refere", "AAA"); 這樣是不行的.Rapid7在06年發布了一個可以繞過的巧妙方法: .addRequestHeader("Referer:http://anywhere\r\nX-foo", "bar"); 直接放到第1個參數. 這個bug已經被Adobe fix了,但是在htm調用swf時swf可以使用任意后綴,我們同樣可以利用類似0x01a.2里的方法一樣把swf上傳[具體可以參考 《Discuz!/phpwind flash標簽的xss》]

2.服務端腳本:
???? 基本上所有的服務端語言都有發http包的功能,如php的fsockopen(),asp的xmlhttp等等,所以可以通過外面服務端腳本來偽造一個 Referer[其實就是類似于nc] 這個一般只對于單純的限制Referer而且沒有身份驗證的[因為你cookie沒辦法傳遞],所以這個基本可以YY的.
????
????
0x02.Hidden value

之所以用'Hidden value'做標題,是因為PLAYHACK文中寫 '0x03a: Cookies Hashing' 和'0x04: One-Time Tokens'里產生的hash都是通過hidden value來傳遞.但是我們一樣可以通過一些手段得到這個hash.

0x02a.利用xss執行js-xmlhttp在xmlhttp.responseText里得到hash:
????
xmlhttp.open("GET", siteurl+"admincp.php?action=members", false);
xmlhttp.send();
var echo = xmlhttp.responseText;
var reg = /\<input type=\"hidden\" name=\"formhash\" value=\"([\w\d]+)\">/i;
var arr=reg.exec(echo);
var formhash=arr[1];

0x02b.利用as里的xml.onData/LoadVars等得到hash:

import RegExp;
var xml:XML = new XML();
xml.onData = function(s) {
????tb1.text = getFirstMatch(new RegExp("<input type=\"hidden\" name=\"formhash\" id=\"formhash\" value=\"(\\w+)\">", "ig"), s, 1);
}
xml.load(url+"post.htm");
function getFirstMatch(re, s, i) {
????var m = null;
????if ((m = re.exec(s)) != null) {
????????return m[i];
????}
}
得到hash后,如果原來app里用的'Request變量'那么我們可以直接通過xml.load等get提交我們構造的變量,如果是post我們可以通過LoadVars等提交:

var _l3 = new LoadVars();??
????????
_l3.decode(unescape("formhash="+hash));
_l3.send(url, "", "POST");

但是需要加載crossdomain.xml[而且只可以提交到crossdomain.xml里設置的domain].如果沒有 crossdomain.xml或者crossdomain.xml里設置不符合我們的要求,我們可以把crossdomain.xml改為任意后綴然后 通過System.security.loadPolicyFile()來加載.

0x03.CAPTCHA Image

也就是我們經常看到的圖片驗證碼,如果拋開用戶感覺等不談,就安全上應該是比較安全的防止crsf的方法,目前還沒有什么通用的破解方法,現在有很多通過分析圖片格式來得到驗證碼的,但是這些都是基于gui的,沒辦法利用到crsf上來.

要突破CAPTCHA Image只有具體問題具體分析了,通過分析原代碼找到app的一些邏輯錯誤/算法問題來想辦法繞過.比如有的圖片驗證碼是根據cookie來計算判斷 的,那么我可以通過xss得到cookie來'算'出這個驗證碼,又如驗證碼保存到session沒有清空,可以暴力這個驗證碼[詳細見lake2的文 章:輕輕繞過你的驗證碼]等等.

小結:
?? 在上面的文字里,其實主要介紹的一個思路是通過http的請求來偽造提交的數據,然后通過分析這個數據得到你要的東西.按這個思路你可以不須拘泥于js/as等腳本,還有很多腳本/語言可以實現如java/jvm? :)
??
[最后,感謝那些和我一起交流探討的人們.]??

參考:

0.Preventing CSRF:http://www.playhack.net/view.php?id=31
1.XMLHttp參考手冊:http://suwei.nanshapo.com/tech/webdev/ajax/xmlhttp/
2.Flash Lite 2.x ActionScript 語言參考: http://livedocs.adobe.com/flashlite/2_cn/main/wwhelp/wwhimpl/js/html/wwhelp.htm
3.HTTP Header Injection Vulnerabilities in the Flash Player Plugin:http://www.rapid7.com/advisories/R7-0026.jsp
4.Discuz!/phpwind flash標簽的xss :http://superhei.blogbus.com/logs/11792433.html
5.Request變量與csrf :http://superhei.blogbus.com/logs/11412189.html
6.輕輕繞過你的驗證碼 :http://blog.csdn.net/lake2/archive/2006/09/15/1224897.aspx

總結

以上是生活随笔為你收集整理的Bypass Preventing CSRF的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。