Bài báo cáo thực hành LAB 05: SQL Injection | Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh

Bài báo cáo thực hành LAB 05: SQL Injection của Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|36086670
lOMoARcPSD|36086670
Lab 5. SQL Injection
SQL injection là một kỹ thuật chèn mã khai thác các lỗ hổng trong giao diện giữa các ứng
dụng web và máy chủ cơ sở dữ liệu. Lỗ hổng bảo mật xuất hiện khi đầu vào của người
dùng không được kiểm tra chính xác trong các ứng dụng web trước khi được gửi đến máy
chủ cơ sở dữ liệu phía sau
1. Get started
#vi /etc/hosts
# vi /etc/ apache2/sites-available/ 000-default.conf
lOMoARcPSD|36086670
2. Get Familiar with SQL Statementsmysql -u root -pseedubuntu
Xem các database đang có:
Show database;
lOMoARcPSD|36086670
Xem DB User;
Use Users;
In ra tất cả các bảng của cơ sở dữ liệu đã chọn:
show tables;
Thông tin dữ liệu bảng Credential.
lOMoARcPSD|36086670
Xem thông tin của nhân viên có tên Alice:
3. SQL Injection Attack on SELECT Statement
Đăng nhập vào www.SEEDLabSQLInjection.com
lOMoARcPSD|36086670
Mã PHP home.php không an toàn, nằm trong thư mục /var /www/SQLInjection, được
sử dụng để tiến hành xác thực người dùng. Đoạn mã sau cho biết cách xác thực người
dùng
Trong đoạn code này, ta nhận thấy input_ name nhận GET request từ text box
không thông qua tiền xử lý, hơn nữa, phần check data và data trong câu lệnh SQL là
không tách biệt (input name có thể không cần phải là một “input name”). Nhận thấy
điều đó, ta có thể chèn một số câu lệnh SQL vào ô text username!
Như ta đã biết, comment trong SQL là #, ta sẽ dùng nó để ngắt dòng kiểm tra
password. Một vài db sẽ dùng username là ‘admin’ để quản lý nên sẽ dùng nó để tấn
công
Nhập : admin ‘ # Dấu ‘ để
close tag ‘ ở phía
lOMoARcPSD|36086670
trước để có ‘$input_name=admin’ #
lOMoARcPSD|36086670
Kết quả thu được
lOMoARcPSD|36086670
Đăng nhập thành công với user admin và xem được thông tin trên database
4. SQL Injection Attack from webpage
Sau khi đăng nhập qua username admin, ta biết được username của một vài nhân viên,
tiếp tục bằng SQL injection để truy cập vào một account với username ‘Alice’
Code: Alice’ #
lOMoARcPSD|36086670
5. SQL Injection Attack on UPDATE Statement
Nếu một lỗ hổng SQL injection xảy ra với câu lệnh UPDATE, thiệt hại sẽ nghiêm
trọng hơn, vì những kẻ tấn công có thể sử dụng lỗ hổng này để sửa đổi cơ sở dữ liệu.
Trong ứng dụng Quản lý nhân viên, có trang Chỉnh sửa hồ sơ cho phép nhân viên cập
nhật thông tin hồ sơ của họ, bao gồm username, email, địa chỉ, số điện thoại và mật
khẩu
The PHP file is located in the /var/www/SQLInjection directory
Ta cần nhắm đến vị trí của input_nickname, bi vì đây là vị trí dễ sửa đổi nhất
không cần quan tâm đến việc update các giá trị khác !
Thực hiện theo phương pháp chèn code SQL và them # để bỏ qua đoạn code phía
sau !
Nhiệm vụ 5.1:
Điều chỉnh mức lương của chính bạn. Như được hiển thị trong trang Chỉnh sửa Hồ sơ,
nhân viên chỉ có thể cập nhật biệt hiệu, email, địa chỉ, số điện thoại và mật khẩu của
họ; họ không được phép thay đổi mức lương của họ. Giả sử rằng bạn (Alice) là một
nhân viên bất mãn, và sếp Boby đã không tăng lương cho bạn trong năm nay. Bạn
lOMoARcPSD|36086670
muốn tăng lương của chính mình bằng cách khai thác lỗ hổng SQL injection trong
trang Edit-Profile. Đăng nhập vào tài khoản Alice và chọn edit profile
Chèn đoạn code: trước ‘, không được chứa kí tự đặc biệt nào để tránh bị hiểu nhầm
(không copy code từ một nơi khác vì dấu ‘ dễ bị nhầm lẫn)
‘, salary = 500000 where Name = ‘Alice’ #
Thay đổi lương của Alice lên 500000!
Kết quả:
lOMoARcPSD|36086670
Nhiệm vụ 5.2:
Điều chỉnh lương của người khác. Sau khi ng lương, bạn quyết định trừng phạt ông
chủ Boby của mình. Bạn muốn giảm lương của anh ta xuống 1 đô la. Hãy chứng minh
cách bạn có thể đạt được điều đó.
Code:
‘, salary = 1 where Name = ‘Boby’ #
lOMoARcPSD|36086670
Kết quả
Nhiệm vụ 5.3
Sửa đổi mật khẩu của người khác. Sau khi thay đổi mức lương của Boby, bạn vẫn
không hài lòng, vì vậy bạn muốn đổi mật khẩu của Boby thành một thứ mà bạn biết,
sau đó bạn có thể đăng nhập vào tài khoản của anh ta và gây thiệt hại thêm.
Ta thấy rằng mật khẩu bị băm thông qua hàm sha1, trước khi đổi mật khẩu theo ý, ta
cần băm mật khẩu ra mã cần thiết
Mật khẩu đặt là 21110432
Mã băm thu được: e55c076438b7b81463b8d4c5fe56d04a99e6d9df
Quy trình: code
‘, Password = ‘e55c076438b7b81463b8d4c5fe56d04a99e6d9df’ where Name =
‘Boby’ #
lOMoARcPSD|36086670
Đăng nhập với tài khoản của Boby và mật khẩu đã đặt !
Tấn công thành công
lOMoARcPSD|36086670
| 1/15

Preview text:

lOMoARcPSD| 36086670 lOMoARcPSD| 36086670 Lab 5. SQL Injection
SQL injection là một kỹ thuật chèn mã khai thác các lỗ hổng trong giao diện giữa các ứng
dụng web và máy chủ cơ sở dữ liệu. Lỗ hổng bảo mật xuất hiện khi đầu vào của người
dùng không được kiểm tra chính xác trong các ứng dụng web trước khi được gửi đến máy
chủ cơ sở dữ liệu phía sau 1. Get started #vi /etc/hosts
# vi /etc/ apache2/sites-available/ 000-default.conf lOMoARcPSD| 36086670
2. Get Familiar with SQL Statementsmysql -u root -pseedubuntu Xem các database đang có: Show database; lOMoARcPSD| 36086670 Xem DB User; Use Users;
In ra tất cả các bảng của cơ sở dữ liệu đã chọn: show tables;
Thông tin dữ liệu bảng Credential. lOMoARcPSD| 36086670
Xem thông tin của nhân viên có tên Alice:
3. SQL Injection Attack on SELECT Statement
Đăng nhập vào www.SEEDLabSQLInjection.com lOMoARcPSD| 36086670
Mã PHP home.php không an toàn, nằm trong thư mục /var /www/SQLInjection, được
sử dụng để tiến hành xác thực người dùng. Đoạn mã sau cho biết cách xác thực người dùng
Trong đoạn code này, ta nhận thấy input_ name nhận GET request từ text box mà
không thông qua tiền xử lý, hơn nữa, phần check data và data trong câu lệnh SQL là
không tách biệt (input name có thể không cần phải là một “input name”). Nhận thấy
điều đó, ta có thể chèn một số câu lệnh SQL vào ô text username!
Như ta đã biết, comment trong SQL là #, ta sẽ dùng nó để ngắt dòng kiểm tra
password. Một vài db sẽ dùng username là ‘admin’ để quản lý nên sẽ dùng nó để tấn công
Nhập : admin ‘ # Dấu ‘ để close tag ‘ ở phía lOMoARcPSD| 36086670
trước để có ‘$input_name=admin’ # lOMoARcPSD| 36086670 Kết quả thu được lOMoARcPSD| 36086670
Đăng nhập thành công với user admin và xem được thông tin trên database
4. SQL Injection Attack from webpage
Sau khi đăng nhập qua username admin, ta biết được username của một vài nhân viên,
tiếp tục bằng SQL injection để truy cập vào một account với username ‘Alice’ Code: Alice’ # lOMoARcPSD| 36086670
5. SQL Injection Attack on UPDATE Statement
Nếu một lỗ hổng SQL injection xảy ra với câu lệnh UPDATE, thiệt hại sẽ nghiêm
trọng hơn, vì những kẻ tấn công có thể sử dụng lỗ hổng này để sửa đổi cơ sở dữ liệu.
Trong ứng dụng Quản lý nhân viên, có trang Chỉnh sửa hồ sơ cho phép nhân viên cập
nhật thông tin hồ sơ của họ, bao gồm username, email, địa chỉ, số điện thoại và mật khẩu
The PHP file is located in the /var/www/SQLInjection directory
Ta cần nhắm đến vị trí của input_nickname, bởi vì đây là vị trí dễ sửa đổi nhất mà
không cần quan tâm đến việc update các giá trị khác !
Thực hiện theo phương pháp chèn code SQL và them # để bỏ qua đoạn code phía sau ! Nhiệm vụ 5.1:
Điều chỉnh mức lương của chính bạn. Như được hiển thị trong trang Chỉnh sửa Hồ sơ,
nhân viên chỉ có thể cập nhật biệt hiệu, email, địa chỉ, số điện thoại và mật khẩu của
họ; họ không được phép thay đổi mức lương của họ. Giả sử rằng bạn (Alice) là một
nhân viên bất mãn, và sếp Boby đã không tăng lương cho bạn trong năm nay. Bạn
lOMoARcPSD| 36086670
muốn tăng lương của chính mình bằng cách khai thác lỗ hổng SQL injection trong
trang Edit-Profile.
Đăng nhập vào tài khoản Alice và chọn edit profile
Chèn đoạn code: trước ‘, không được chứa kí tự đặc biệt nào để tránh bị hiểu nhầm
(không copy code từ một nơi khác vì dấu ‘ dễ bị nhầm lẫn)
‘, salary = 500000 where Name = ‘Alice’ #
Thay đổi lương của Alice lên 500000! Kết quả: lOMoARcPSD| 36086670 Nhiệm vụ 5.2:
Điều chỉnh lương của người khác. Sau khi tăng lương, bạn quyết định trừng phạt ông
chủ Boby của mình. Bạn muốn giảm lương của anh ta xuống 1 đô la. Hãy chứng minh
cách bạn có thể đạt được điều đó. Code:
‘, salary = 1 where Name = ‘Boby’ # lOMoARcPSD| 36086670 Kết quả Nhiệm vụ 5.3
Sửa đổi mật khẩu của người khác. Sau khi thay đổi mức lương của Boby, bạn vẫn
không hài lòng, vì vậy bạn muốn đổi mật khẩu của Boby thành một thứ mà bạn biết,
sau đó bạn có thể đăng nhập vào tài khoản của anh ta và gây thiệt hại thêm.

Ta thấy rằng mật khẩu bị băm thông qua hàm sha1, trước khi đổi mật khẩu theo ý, ta
cần băm mật khẩu ra mã cần thiết
Mật khẩu đặt là 21110432
Mã băm thu được: e55c076438b7b81463b8d4c5fe56d04a99e6d9df Quy trình: code
‘, Password = ‘e55c076438b7b81463b8d4c5fe56d04a99e6d9df’ where Name = ‘Boby’ # lOMoARcPSD| 36086670
Đăng nhập với tài khoản của Boby và mật khẩu đã đặt ! Tấn công thành công lOMoARcPSD| 36086670