DC-1 渗透练习
小记:------在学习中感觉自己好废材,学的好焦虑,身边人也很努力,想了想还是先行动起来吧
写一下博客记录一下学习历程,多练习总会上手的,在kali咱们就练起来~
进入系统,首先查看Ip,DC-1是linux靶机,所以使用ip addr查询

lo是回环接口,不用管
eth0中看到了DC-1的网络信息
ip 192.168.32.131/24
mac地址:00:0c:29:4a:c6:7a(VMware 虚拟机的特征)
状态 state UP 表示网卡是启用的
另外ls查看当前目录文件下发现了thefinalflag.txt
查看没啥用,加油小文案
使用kali进行渗透,首先进行端口扫描

根据扫描结果
扫出了四个端口22 80 111 54831
22 远程登陆
80是个apache的web服务
111是个PRC服务
54831查了下是个NFS辅助服务
下面查看一下这个web

底部可以看到powered by Drupal,去看一下这个是啥

基于PHP开发,基本思路是查看DC-1是使用的哪个版本,此版本有无漏洞
查看网页信息

这里看到网页版本是Drupal 7 , 可以去查看一下这个版本有哪些漏洞

存在文件上传漏洞,由此进行提权
ok现在知道了突破口先尝试寻找漏洞口
先注册,发现admin被注册,可以先尝试弱密码,无果

后面又尝试了下SQL注入、注册和请求新密码,均需进行邮箱验证,但是DC-1没有邮箱服务器,说明这条路走不通
接着做信息收集,扫描目录

查看了下都没啥用,问了下AI哪怕即使绕过了也没什么关键信息
进入robots.txt继续找有没有其他敏感目录

还是没啥用
整合已知信息,已知版本是Drupal 7,不如就直接在kali找一下本地漏洞库

根据版本筛选,35150RCE虽然是理论上最好的选择,但是很多 writeup 提到 35150 和 34993 是"概念验证",利用链不完整。
所以选择最稳妥的34992去创建一个管理员账号

查看了下这其实是个sql注入漏洞,但是很遗憾我初见没有注入成功,(对于我这个路边确实是有点难)在后面我写一下这个注入
运行脚本写入(这是个比较老的py,需要python2来运行)

运行成功,创建了管理员账号hacker
进去看到可以创建文章
可以上传图像,写一个一句话木马伪装成jpg上传看看

可以看到只允许png等图片格式,应该是做了前端校验,并且实际上传改包后发现是白名单,除了白名单外尾缀自动添加txt
再重新查看页面 找到了flag3

但是查看了其他模块,没有明显收获,flag3的提示(没看懂)

重新整理下思路,有管理员账号,但是不能直接上传php拿到shell,去查询一下Drupal还有什么方式能执行php
查询的答案是php filter模块(经验比我稍微多点应该都知道这个,其实所有CMS都有类似机制,可以自己收集整理下)
本来还想试一下图片包含的,但是查证了下drupal文件访问不会经过php处理,这里就不浪费篇章去实验了
这里其实前期信息收集就能知道现在这个文件上传是走不通的,但是我这里模拟下初见的情况去都试一下
接下来使用php filter模块
drupal的模块选择固定路径是/admin/modules(是的还是经验积累,CMS常见路径,扫目录也看得到,但是初见未必能知道能用来干嘛)
开启php filter并保存

开启后返回到这个添加内容界面
这里解释下php filter的作用
Drupal 的内容文本格式(Text format)系统:
- 不同的格式有不同的过滤器
- "Filtered HTML" 过滤危险标签
- "Full HTML" 不过滤
- "PHP code" 启用 PHP 解释器
PHP filter 模块的本质:
它就是注册了一个新的文本格式:
- 格式名:"PHP code"
- 过滤器:把内容喂给 PHP 解释器执行
- 权限:可以控制哪些角色能用
所以流程是:
启用 PHP filter 模块
↓
Drupal 注册了 "PHP code" 文本格式
↓
创建 Basic page 时,Text format 下拉框里多出 "PHP code" 选项
↓
PHP 代码就会被执行
正是因为其能执行php危险文件所以drupal 8+完全移除了这个模块
但是启用后页面没有正确开始php解析选项,去查看一下/admin/config/content/formats

发现是没有权限,设置一下

接着回去继续写php内容 把下面改成php mode并成功上传

测试一下成功返回了用户

接下来就可以进行反弹shell了,简单反弹一下成功

顺手升级一下交互式终端并在当前目录里找到了flag1
DC-1属于比较老的靶机是python1,注意升级命令!

去数据库配置看一下,可能有数据库密码

结果找到了flag2
找一下所有的flag文件

发现flag4,进入flag4是放在flag4这个文件夹下的

根据flag的提示接下来的flag需要root权限
这里再重新去看下flag3给的提示
Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow.
翻译理解一下find 有 SUID 权限,用 find -exec 可以拿到 root 权限,然后读取 /etc/shadow 或直接读 root 目录下的最终 flag。
看懂了就很好执行了,去find提权

最终拿到了最后的flag
现在回看一下那个sql注入,查了一下资料
-注入点特殊
Drupalgeddon 1的注入点在 name[0]= 这种数组参数,需要 name[0;SQL]=value 这种特殊结构
2-PDD保护
Drupal 7 用PDD保护参数化查询,大部分地方不接受普通SQL注入
3-注入只有特定表单+特定参数名+数组结构才能触发
 实际注入过程是
# 简单测试 - 看响应
curl -X POST http://192.168.32.131/
-d "name[0]=a&name[0]=b&pass=test&op=Log+in"
正常情况下会返回登录页面。
第 4 步:触发 SQL 错误(确认漏洞)
curl -X POST http://192.168.32.131/
-d "name[0' ]=a&name[0]=b&pass=test&op=Log+in"
关键看响应里有没有:
mb_strlen() expects parameter 1 to be string, array given
如果有,说明 SQL 注入被触发。
构造 payload 添加 admin 账号
挑战:密码哈希
Drupal 7 密码格式:$S$
需要在 PHP 里计算:
php -r '
$password = "hacker";
$hash = password_hash($password, PASSWORD_BCRYPT);
echo $hash;
'
但这个不对,Drupal 7 用自己的算法。
正确的 Drupal 7 哈希方法:
需要 Drupal 7 源码里的 password.inc:
// Drupal 7 密码哈希算法
function user_hash_password($password, $count_log2 = 0) {
if (empty($count_log2)) {
$count_log2 = _password_get_count_log2();
}
// 使用 SHA-512
$hash = _password_crypt('sha512', $password, _password_generate_salt($count_log2));
return $hash;
}
这个注入其实很难,至少对我来说,有大手子可以自己试一下,当然34992是更好更快的选择,有答案直接抄就完了
但是说到有答案,其实34992不是最好的选择,只是34992可以完整走完整个渗透测试流程,所以我在这里选择了这个方法
实际上使用Drupalgeddon 2可以一步RCE拿到shell, 并且Metasploit可以自动拿到shell会更快,但是这两种方法对于理解渗透的意义没有34992大
另外博客园这个css配置好好玩,有空去借点好看的用一下,自己做的很呆呆
如有错误欢迎交流指正
> >

浙公网安备 33010602011771号