项目五:W1R3S-1
#Nmap信息收集
---存活主机探测

---端口探测和OS探测:
---思路1:21的FTP可能存在匿名登陆,收集敏感信息,根据ftp敏感信息和dirb获取80端口Web的目录、文件等,通过cewl分词组成字典对ssh进行爆破
---思路2:结合ftp和80获取Webshell,通过mysql进行提权(这里应该可以远程登陆)

---扫描端口开放的版本信息和漏洞的具体信息
---ftp存在匿名登陆,下面存在content、docs、new-employee三个文件目录

#Ftp匿名登陆
---首先通过ftp进行未授权用户的登陆:账号和密码都是:Anonymous

---进入ftp的文件目录

---将三个txt文件进行下载(另外2个目录也没有什么信息)

---这里发现01.txt和03.txt没有什么信息,02.txt存在2个加密信息(一个是base64,一个未知)

---先看base64加密的内容(也可以使用brupSuite的decode)

---通过hash-identifier识别密码发现可能是MD5

---通过在线网站进行MD5解密,需要尝试其它的思路

#Web层面的漏洞分析
---浏览器访问,界面是apache的默认界面

---dirb爆破Web写入文件:dirb http://192.168.95.131/ -o results.txt
---这里应该是存在一个管理员登陆入口,以及一个wordPress的CMS

---进入管理员界面的介绍,发现是一个名为Cuppa的CMS

---点击next发现是一个类似PHPMyAdmin的网页版本数据库管理工具(这里可能可以爆破)

---谷歌搜索exp:Cuppa CMS exploit

---这里说在/alerts/alertConfigField.php (LINE: 22)文件的22行存在文件包含漏洞
---具体是:<?php include($_REQUEST["urlConfig"]); ?>可以执行URL传参的PHP函数
---注意:单纯的文件包含只能查看敏感文件,如果配合文件上传,可以命令执行
---查看Linux的密码目录:http://target/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd
---查看Web的数据库配置文件:http://target/cuppa/alerts/alertConfigField.php?urlConfig=php://filter/convert.base64-encode/resource=../Configuration.php
---php://filter/convert.base64-encode/resource=
是一种PHP的特殊封装协议,用于读取文件并将其内容转换为Base64编码格式。这种方式常用于读取服务器上的文件内容
#文件包含漏洞原理(以PHP为例)
---require():找不到被包含的文件会产生致命错误,并停止脚本运行
---include():找不到被包含的文件只会产生警告,脚本继续执行
require_once()与require()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含
include_once()与include()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含
---漏洞成因分析
---利用文件包含,我们通过include函数来执行phpinfo.php页面,成功解析

---将phpinfo.php文件后缀改为txt后进行访问,依然可以解析:

---include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来
---将phpinfo.jpg的内容改成一段文字:hello world!再次进行访问,可以读出文本内容

---常见的敏感目录信息路径:(一般使用相对路径读取:
../../windows/system.ini
)
---Windows系统:
---Linux系统
---PHP协议:PHP内置了很多URL风格的封装协议
---可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数

---PHP部分协议的利用条件

---PHP协议相关内容

---文件包含的利用方式

---访问URL发现没有回显(查看前端源代码也没有):
http://192.168.95.131/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd

---源码上<?php include($_REQUEST["urlConfig"]); ?>说明get和post都可以接受
---在GET请求中无法获取到参数值,但在POST请求中可以获取到参数值的原因:
---服务器配置或限制:有些服务器或Web对GET请求中的参数进行了限制或过滤
---例如存在安全设置或防火墙规则,阻止了GET请求中的某些参数或特定字符的传递
---curl来进行访问(curl 是用来请求 Web 服务器。名字是客户端(client)URL 工具的意思)

---构造文件包含的exp:
---data-urlencode
将数据进行URL编码,以便POST请求中传递特殊字符
---这对于数据中包含保留字符(如&
、=
等)的情况非常有用
---发现Linux的账号/用户组/shell

---读取密码
curl -s --data-urlencode urlConfig=../../../../../../../../../etc/shadow http://192.168.95.131/administrator/alerts/alertConfigField.php

---注意:/etc/shadow分别对应的文件格式如下:

---在/etc/shadow中复制包含了密码的信息:
---将三个存在密码数据通过Vim写入1.txt文件进行爆破

#JoHn爆破Unix/Linux 系统密码(对大小写不敏感)
---John
自带了一个字典,字典位于/usr/share/john/password.lst
---这里爆破出来两个账号和密码

---ssh登陆ssh www-data@192.168.95.131发现账号不可用

---ssh w1r3s@192.168.95.131登陆

#SUDO提权
---发现是普通用户,但是所属组(Groups): w1r3s, adm, cdrom, sudo, dip, plugdev, lpadmin, sambashare(不知道属于sudo用户组是不是可以提权,但是root可以)

---直接通过登陆root继续提权

#利用脚本信息收集提权
---目前为止信息收集的方法:1.uname -a 2.linpeas.sh 3.linux-exploit-suggester

--执行linpeas.sh进行Linux提权的信息收集
---这里给出了系统的版本

---sudo的版本:考虑sudo提权

---这里可以利用的软件,如gcc/python/sudo等

---这里计划任务,但是非root不能修改

---这里发现了adm用户组:

linux中用户的类型
---超级用户:用户名为root,它具有一切权限
---系统用户(伪用户):Linux系统正常工作所必需的用户。主要是为了满足相应的系统进程对 文件属主的要求而建立的,例如:bin、daemon、adm、lp等用户,系统用户不能用来登录
---普通用户:是为了让使用者能够使用Linux系统资源而建立的

---这里是WordPress的配置文件

---注意:这里/etc/passwd具有可以写权限,可以通过修改/etc/passwd进行提权

---使用perl语言生成带有盐值的密码
---此地的123456便是我们要加盐的密码

---将有需要的用户user2构建root组,然后添加到/etc/passwd中
---查看一下/etc/passwd文件,发现我们添加的用户已经写入

---试进行登录用户user2,密码是我们设置的123456
---发现我们创建的用户user2,是以root的权限在登录

---进入root后通过find命令查找alertConfigField.php:
find / -name alertConfigField.php 2> /dev/null
---发现文件包含漏洞:include_once(realpath(__DIR__ . '/..')."/classes/Cuppa.php");

---通过grep筛选urlConfig关键字:cat /var/www/html/administrator/alerts/alertConfigField.php | grep "urlConfig"
---发现这里竟然是POST提交,和EXP里面的描述略有出入

#文件包含漏洞的防护
---1、使用str_replace等方法过滤掉危险字符
---2、配置open_basedir防止目录遍历(open_basedir 将php所能打开的文件限制在指定的目录树中)
---3、php版本升级,防止%00截断
---4、对上传的文件进行重命名,防止被读取
---5、对于动态包含的文件可以设置一个白名单,不读取非白名单的文件。
---6、做好管理员权限划分,做好文件的权限管理,allow_url_include和allow_url_fopen最小权限化
#知识点总结
---1.Nmap进行存活主机、端口、OS版本、端口漏洞扫描
---2.Ftp匿名登陆漏洞下载文件
---3.hash-identifier识别base64/MD5密码,在线网站解密
---4.dirb扫描Web路径,识别Cuppa、WordPress等CMS
---5.文件包含的原理:include() ,require() ,include_once(), require_once()
---6.PHP的伪协议:file读取本地文件、php://filter用于读取源码、php://input命令执行、ZIP://协议命令执行、data://协议命令执行
---7.文件包含利用方式:1.读取敏感文件获取用户密码2.和文件上传漏洞(图片马)结合3.和Apache日志文件结合命令执行(brupSuite修改URL编码)4.包含seesion文件var/lib/php/sess_PHPSESSID,BurpSuite修改session5.包含临时文件(条件竞用,暴破文件名)6.远程包含命令执行(php版本小于5.3.4,我们可以尝试使用%00截断,GET传参?截断)
---8.文件包含读取../etc/shadow,john爆破获取系统用户密码
---9.root/sudo用户组进行Sudo提权,/etc/passwd文件可写入提权
---10.Linux信息搜集:1.uname -a (内核信息收集|简洁低效)2.linpeas.sh(系统信息收集|全面繁杂) 3.linux-exploit-suggester(漏洞信息收集|方便快捷)
