一.基础知识可以利用的Windows的服务自动更新wuauserv,安全中心服务wscsvc,Defender服务WinDefend,错误报告服务Ersvc,WerSvc系统补丁程序,驱动程序重启系统的时候,在临退出系统会有些update操作会对系统有些修改,360这时是退出状态,设法修改注册表PDF攻击,BYTE*攻击,stream'\0'将结束符去掉,可执行文件转入stream内部,Foxit纠错能力在于字符串和交叉索引表,Foxit的漏洞可能没有完全修复,/TYPE/PAGES指定的是页面,结果不是页面,造成阅读器的崩溃无法删除,迅雷私人空间,需要管理员权限才能删除0Day有服务端和客户端之分.a.服务端.HTTPD,FTPD,IMAPD等等b.客户端.IE,Firefox,Word,AcrobatReader,WinRAR,Realplayer,Winamp等等8安全公司eEye,NGS,ISS,NSFOCUS等等9挖掘0day的方法a.源代码检查,FlawFinder,RATS,ITS4,SPLINT,CodeScan,耗时,经验重要,很少开源b.二进制检查,补丁分析,Microsoft黑色星期二,IDAPro,Bindiff,SmartRisk,HalvarFlake,Funnyweic.Fuzzing,有效,试用开源与非开源,Spike,iExploder,RIOT,Smudge,peach,可以使用sniffer抓包检查错误,推荐使用Ethereal,设计非常耗时,不同目标进行微调,需要运行一个debugger,fuzz时仍然需要运行sniffer,服务器会返回一些意想不到的信息,比如在某些情况下IIS会返回大量的“undefinedundefinedundefinedundefined”鸡肋0day1--BNBT服务器远程拒绝服务10漏洞库Securityfocus(Symantec),ISSXFORCE,database,OVSDB,NSFOCUS(最好的中文漏洞库之一)Secunia,SecurityTracker,SecuriteamCVE(CommonVulnerabilitiesandExposure,通用漏洞披露)Frsirt(K-otik.com)://://已知的列出名称的0day:VULNDISCOPack大约24个0day其中包括14个D.O.SUBC(UNRELEASEDBUGCLUB)~nd/UBC.html列出了6个0days,其中包括3个D.O.SArgeniss.com列出了6个0days,其中包括2个D.O.S漏洞研究趋势客户端IE,Firefox,Realplayer…文件格式(.rm.gif.doc.ppt.pdf…..)即时通讯软件(QQ,MSN,GAIM,Yahoo!)SPIKEfile,notSPIKEfile,FileFuzzICBM《寻找客户端漏洞的艺术》Flashsky,LiuDieYu鸡肋0day2MicrosoftWindows处理GIF文件时的缺陷,导致QQ远程拒绝服务鸡肋0day3LeapFTP.lsq缓冲区溢出漏洞Reference://://=sec_bug://umbrella.name/://二.相关工具2.1PyDbg(1)进程快照,定位软件程序中的漏洞以及自动化进程崩溃处理例程(2)修改内存的任意值,并继续运行2.2ImmunityDebugger2.1PyCommand命令执行各种任务,按照此模板Fromimmlibimport*Defmain(args)Imm=Debugger()Return“PyCommandExecuted!”2.2PyHooks(1)BpHook/LogBpHook当BpHook被触发时将暂停执行debuggee进程,而LogBpHook在钩子命中之后只是简地延续目标进程的执行状态(2)AllExceptHook任何发生在目标进程中的异常事件可以触发这一类型的钩子(3)PostAnalysisHook在对某一载入的二进制模块完成分析工作之后,这一类型的钩子即可被触发,在完成相关模块分析之后能自动再做一些额外的静态分析工作.(4)AccessViolationHook在非法访问时被触发,适用于Fuzzing测试中捕获信息(5)LoadDLLHook/UnloadDLLHook在DLL被加载或卸载时被触发(6)CreateThreadHook/ExitThreadHook在一个线程创建或销毁时被触发(7)CreateProcessHook/ExitProcessHook在目标进程启动或退出之时被触发(8)FastLogHook/STDCALLFastLogHook布置一个汇编代码桩来使得代码执行流在钩子命中之时被重定向至钩子函数,以记录当时环境下的寄存器值或内存值.适用于钩附那些调用频繁的函数.2.3坏字符过滤当你试图为自已的exploit构造一段攻击字符串时,通常存在着一组特殊字符需要被排除在shellcode之外,badchar.py我们只需将内存中的shellcode视作ASCII字符与原先shellcode进行对比,判断未能通过过滤器的坏字符,然后进行重新编码2.4绕过DEP机制DEP是为了防止位于某些内存区域(例如堆和栈)中的数据被视作代码而实现的一种安全机制,ImmunityDep自带了一个名为findantidep.py的PyCommand,用来找寻合适的指令地址置于exploit中,将致使DEP保护机制失效并负责将shellcode运行起来,使用NtSetInformationProcess()来冻结目标进程中的DEP保护功能。为了废止某个进程中的DEP调用NtSetInformationProcess()并确保参数ProcessInformationClass被设为ProcessExecuteFlags(0x22),以及参数ProcessInformation被设置为MEM_EXECUTE_OPTION_ENABLE(0x2)。使用JMPESP的指令实现绕过DEP机制,3个先决条件1找到一处地址可以将AL寄存器中的值设为1并随后返回2找到一处地址,从此处开始执行的一系列指令可以为我们废除DEP机制3找到一处地址可以将代码执行流重定向至shellcode的头部首先我们搜索将AL寄存器置为1后立即返回的指令地址并让用户从返回的地址列表中选用一个,接着我们从动态链接库ntdll.dll中搜得可以帮助废除DEP的系列指令,第三个步骤是让用户输入能够帮助代码流回归至shellcode的指令或者指令序列,2.5破除反调试例程IsDebuggerPresent()无需任何调用参数,当有调试器附加在当前进程时返回1,反之则返回0,使用imm.writeMemory(imm.getPEBaddress()+0x2,”\x00”)简单地将PEB块中的BeingDebugged标志清零,如果以此标志作为标准的软件将因此遭受戏弄2.6破除进程枚举例程恶意软件会枚举当前进程列表进程,需要打上补丁借助ImmunityDebugger强大的内建汇编器实现这一过程Process32first=imm.getAddress(“kernel32.Process32FirstW”)Process32next=imm.getAddress(“kernel32.Process32NextW”)Function_list=[process32first,process32next]Patch_bytes=imm.Assemble(“SUBEAX,EAX\nRET”)Foraddressinfunction_list:Opcode=imm.disasmForward(address,nLines=10)Imm.writeMemory(opcode.address,patch_bytes)首先获取上述两个进程迭代函数的所在地址,并将这两者存于一个列表中供后续使用,将一组指令编译成相应的opcode以用于将EAX寄存器清零并返回,这段opcode构成补丁,在打上补丁之前,从函数Process32First/Next的头部位置向前连续反汇编至第10条指令,一些高级的恶意软件会检查这些函数的头几个字节是否完好,三.Fuzzing技术1Immunity团队创建一个Gflags库可以编辑Gflags标志,其中的堆验证器(PageHeapVerifier),当你为某一进程开启这项功能时,堆验证器会自动记录下所有动态内存操作,在堆数据污染的瞬间产生一个调试事件,使当前使用的调试器中断。2整数溢出在测试用例中包含大量的高值正整数与低值负整数3格式串攻击使用%s和%n的printf,%n允许向内存写入数据,而非一般的格式化输出,用来覆写函数的返回地址或是重写某个现有函数例程的指针.4Fuzzing专家CharlieMiller的经验:发现的Bug数目随着代码覆盖率的上升而增加5自动化静态分析,搜索出那些易于被误用的函数(比如strcpy)的所有调用位置,并对这些位置做后续的监控,一些高级的静态分析手段甚至能够找出经常被忽略的内存拷贝函数,错误处理例程以及其他众多信息.6面向Windows驱动的Fuzzing测试技术为了与驱动程序达成交互,通过IOCTL(输入/输出控制系统)传送数据信息实现这一过程,实现方式存在缺陷的IOCTL处理例程可能会被利用获得权限提升,甚至是直接致使目标主机彻底崩溃.四.ShellCode原理及编写4.1栈溢出存储在栈中的函数返回地址被覆盖,栈溢出覆盖EIP引发异常4.2堆溢出4.3格式化字符串如果打印的内容是格式化字符,那么栈指针就会被移动,fprintf(),sprint(),snprintf(),vfprintf(),vprintf(),vsprintf()和vsnprintf()函数使用错误也同样会导致恶意代码的执行。4.4整数溢出引起缓冲区溢出4.5简单的ShellCode编写找到system函数的入口地址每个进程都有各自的4GB虚拟内存(1)0x00000000-0x0000FFFF,为NULL指针分配保留,访问该区域将导致非法访问(2)0x00010000-0x7FFEFFFF,用户进程空间,EXE文件的映像被加载其中,起始地址为0x00400000,动态链接库也被加载其中,如果DLL或EXE的代码被装入到该范围的某些地址,则能够被执行.(3)0x7FFF0000-0x7FFFFFFF;保留区域,对此区域的任何访问都将导致”非法访问”(4)0x80000000-0xFFFFFFFF;仅供操作系统使用,用于加载