PDA

View Full Version : [MU] Anti drop DB, drop table, delete data hiệu quả 95%



xom1b
12-02-12, 06:56 AM
Thấy mấy bạn cứ bàn về bị drop, mình không hiểu sao nếu như web được anti injection nhỉ, vì drop qua game thì khá khó vì những sv của WZ đâu có bị drop. Lâu ko vào diễn đàn thôi thì góp gió thành bão vậy, đồng thời chia sẻ 1 ít kiến thức còm về security SQL :)

Trước hết chạy trigger của bạn GateBol share (ko rõ ai là tác giả :( )


Create trigger [dbo].[Character_DeleteAll]
On [dbo].[Character]
For Delete As
Begin
if (select count(*) from deleted) > 1
begin
rollback transaction
end
End


Tiếp theo =>

Demo trong SQL 2005 config như sau (Ko có SQL 2000 để demo nhưng mò là có vì cái này là security cơ bản, không thể ko có :D)

Đăng nhập SQL với user là sa hoặc vào với mode Windows Authentication
-Tạo 1 user, click chuột phải vào Logins -> new login
Login Name: tên của user ->tùy bạn (ở đây mình đặt là test)
Config như trong hình, điền password, nhớ bỏ ko chọn ô User must change password at next login (chọn thì chỉ đăng nhập đc 1 lần thôi, lần sau phải đổi pass)

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Uploaded with ImageShack.us (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

- Chuyển sang tab Server Roles chọn như trong hình:

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Uploaded with ImageShack.us (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

-Sang tab User Mapping chọn như trong hình rồi OK:
Chú ý: nếu bạn có cả DB khác như Event hay Ranking hoặc SCFMuTeam thì tích chọn vào chúng luôn nhé

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Uploaded with ImageShack.us (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Sau đó config server với web của bạn, thay user sa thành tên user bạn vừa tạo, cả pass điền cho đúng nhé :D

Kết quả test khi login với user "test":

Không thể acccess vào DB nào khác trong SQL của bạn :

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Uploaded with ImageShack.us (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Và đây là kết quả drop db:

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Uploaded with ImageShack.us (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Nhưng vẫn có thể insert đc và select dữ liệu được: (Nhu cầu thiết yếu phải có :D)

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Uploaded with ImageShack.us (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Và lại không thể drop table được:

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Uploaded with ImageShack.us (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Còn sơ suất ở đâu các bạn góp ý :)

P/s: các bạn cần sửa thêm ODBC sử dụng user này để connect SQL như sau

vào Control Panel -> Administrator tools -> Datasource (ODBC), chuyển sang tab System DNS, sửa từng cái bằng cách chọn nó rồi bấm vào Configure, rồi cứ next, đến bước như trong hình thì chọn như trong hình :
(Win 64 bit thì ở thư mục Wow64 trong C:\Windows, các bạn ấn ctrl + F xong gõ odbc vào, thấy file odbc gì gì xong .exe thì chính là nó, sr vì ko dùng win 64 bit)

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Uploaded with ImageShack.us (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)

Login ID: cái user bạn tạo ở SQL như trên
Password: là cái pass của user đó :D

sau đó cứ next rồi OK thôi

đảm bảo để có thể sử dụng user này 100% trên server vì 1 số tác vụ trên server có thể dùng ODBC để connect với mode Windows Authentication (Mức toàn quyền)

update

UPDATE !

Nếu các bạn làm ODBC theo xom1b, có thể làm các bước tiếp theo sau để user có quyền dùng produce EXE.

Bước 1, chọn Produce cần xử.

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g)



Bước 2, check EXE vào user đang dùng.

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g)

SnowBlood™
12-02-12, 07:00 AM
póc tem :d thank 4 share nhé

p/s: mà sao ko onl yahoo nhỉ tui add yahoo cau2.0nljne_1102 mà ko thấy reply :|

xom1b
12-02-12, 07:08 AM
póc tem :d thank 4 share nhé

p/s: mà sao ko onl yahoo nhỉ tui add yahoo cau2.0nljne_1102 mà ko thấy reply :|

Hic, vừa ở đám cưới về lúc 5h sáng (:|, tính viết xong bài này đi ngủ để tí có sức ăn cỗ đây ;))

godhoang
12-02-12, 07:42 AM
anh xóm trở lại thì vô đối :D
tks anh
nhưng mà anh chỉ trên sql 2k đi :-s

xom1b
12-02-12, 07:45 AM
Mod nào sửa dùm cái title thành "Anti drop DB, drop table, delete data hiệu quả 95% " đc ko. Hic, buồn ngủ viết lung tung cả :(

xom1b
12-02-12, 07:47 AM
anh xóm trở lại thì vô đối :D
tks anh
nhưng mà anh chỉ trên sql 2k đi :-s

SQL 2k thì OL đi, buzz nick nhé, a qua thử xem thế nào xong tẹo còn đi đám cưới ông a nữa :D

godhoang
12-02-12, 07:47 AM
anh xóm trở lại thì vô đối :D
tks anh
nhưng mà anh chỉ trên sql 2k đi :-s

GateBol
12-02-12, 08:22 AM
Vậy lệnh delete thì sao vì giờ toàn là delete lại có vụ này để làm crash DataServer và khiến mất nhân vật và thùng đồ (trong db không mất)

Log data Server :

Delete from character where accounid='xxx' and Name=''kill 6--'

xom1b
12-02-12, 08:25 AM
Vậy lệnh delete thì sao vì giờ toàn là delete lại có vụ này để làm crash DataServer và khiến mất nhân vật và thùng đồ (trong db không mất)

Log data Server :

Delete from character where accounid='xxx' and Name=''kill 6--'

thế nên mình mới nói nó 95% thôi vì cái DS SCF này ko check lỗi injection. Lỗi này fixxed bởi Wz rất lâu rồi, cách chống hiệu quả 100% là recode DS :)

[VP]Production
12-02-12, 08:35 AM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

godhoang
12-02-12, 08:43 AM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
xh2_pio
có gì kô bồ :(
mà có ai fix đc dzụ này chưa :((
cả vụ item thần ss6.3, nản chỉ a hùng wá

hoangchuong
12-02-12, 08:53 AM
Thấy mấy bạn cứ bàn về bị drop, mình không hiểu sao nếu như web được anti injection nhỉ, vì drop qua game thì khá khó vì những sv của WZ đâu có bị drop. Lâu ko vào diễn đàn thôi thì góp gió thành bão vậy, đồng thời chia sẻ 1 ít kiến thức còm về security SQL :)

Xin Xom1b làm cái hướng dẫn chi tiết trên SQL2000 dùm!Cám ơn Anh rất nhiều!!!

xom1b
13-02-12, 01:39 PM
Xin Xom1b làm cái hướng dẫn chi tiết trên SQL2000 dùm!Cám ơn Anh rất nhiều!!!

Cái này khi nào có máy cài SQL 2k mới demo được

sieuga
13-02-12, 02:19 PM
mong xom1b hướng dẫn trên sql2000 cảm ơn anh

lastpr0
16-02-12, 11:49 AM
Đã test trên Windows 7 64bits. Server titantech 11.00.00.
MS SQL 2000 cũng có đầy đủ các mục permission cơ bản như MS SQL 2005.
Nhưng hình như đối với Titantech 11.00.00 dùng DS riêng, nên phần ODBC nếu thiết lập như trên sẽ báo lỗi khi: Tạo nhân vật mới/Xóa nhân vật, nói chung liên quan đến DELETE và CREATE.

Phải tạo ODBC với quyền Administrator Auth như mặc định thôi.

Nếu tạo ODBC với user đó luôn, thì xem như server sẽ không được quyền EXECUTE trong Produce

Cách hữu hiệu nhất, làm theo xom1b từ đầu đến trước phần ODBC, phần ODBC cứ chạy file tạo ODBC connect trong server có sẵn, config trong server thì không dùng sa mà dùng user mà các bạn tạo và vẫn rule security public/reader/writer, đã test, nhưng chưa biết cách drop database nên chưa test xem có hữu hiệu không, drop trong query anlytics thì đương nhiên ko đc vì user rule rồi, còn drop kiểu mà các bạn đề phòng kia, không biết lúc bị drop đó server dùng quyền admin auth để drop hay dùng quyền user để drop thì không biết đc.

Đây là logs chứng minh


SQLSTATE:42000, Diagnosis:[Microsoft][ODBC SQL Server Driver][SQL Server]EXECUTE permission denied on object 'WZ_CreateCharacter', database 'MuOnline', owner 'dbo'.
11:12:04 SELECT * FROM AccountCharacter WHERE Id='final123'
11:12:04 WZ_CreateCharacter 'final123', 'KnightLove', '16'

không dùng produce được

lastpr0
16-02-12, 11:58 AM
UPDATE !

Nếu các bạn làm ODBC theo xom1b, có thể làm các bước tiếp theo sau để user có quyền dùng produce EXE.

Bước 1, chọn Produce cần xử.

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g)



Bước 2, check EXE vào user đang dùng.

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g)


Nếu gặp lỗi tương tự ở các produce khác, thì dùng cách tương tự nhé.

thich_chet
16-02-12, 01:19 PM
cám ơn vì bài viết rất hữu ích !!!!!!!!!!!!!!!!!!1

Olala
16-02-12, 02:59 PM
chạy cái này thì mấy cái jobs update ngày tháng đâu có tác dụng nữa các bác nhỉ?
chạy nó làm sao để jobs ngày tháng up thì mới được chứ chặn hết thì dùng sao được

xom1b
18-02-12, 05:07 PM
Cái này là mình làm chỉ test trên Query proc thôi, vì có server đâu mà chạy, các bạn bổ sung dùm nha
Đây chỉ là giải pháp tình thế đợi new DS anti inject (i want to say Fuck shit)
@Olala, đợi bh mình là coder bên scf thì set full quyền cũng ko drop đc ;))

Alexandria
18-02-12, 05:16 PM
hay lắm , thank bài viết hay để test

hoainam8080
30-07-13, 01:51 PM
SQL 2000 thì dùng cái này, cũng hiệu quả lắm: <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

mother
30-07-13, 01:55 PM
SQL 2000 thì dùng cái này, cũng hiệu quả lắm: <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

thì 2 cái là 1 mà.(:|

Những chữ cái của "Hồ Chí Minh" ? (HCM viết thường)

BoyGau
25-02-14, 11:46 AM
uppppppppppppppppppp cho mem gà