DC-1靶机渗透测试

对着镜子大喊三声“太菜了”“太菜了”“太菜了”

DC系列靶机的第一篇。边学习边日靶机边进步,摸爬滚打着前行。

内容不只是日靶机,还有其中遇到的知识点,记录下来。

注意攻击机要与靶机在同一网段下,桥接模式和NAT模式都可以的,我用的是NAT模式。

出发之前,请记住我们要做什么:进入靶机,拿到5个flag

0x01 信息收集

是的没错,没有登录账号密码给你。因为kali与靶机在同一网段下,用nmap扫一下吧:

执行:nmap 172.66.66.0/24,结果如下,确定了靶机ip为 172.66.66.131

加参数 -A -sV再次扫描获取更多信息,如下图:

ssh-hostkey: 是用于在SSH协议中对计算机进行身份认证的加密密钥。更多详情点击 hostkey

已知信息:

1、主机IP 172.66.66.131

2、开放端口及服务 22 --> ssh 80---> Drupal 7 111---> rpcbind

3、robots.txt 中禁止访问的部分内容展示

nmap 使用 -sS 选项 ,执行一次隐秘的TCP扫描,以确定某个TCP端口是否开放。

​ 使用 -Pn选项,告诉nmap不适用Ping命令预习判断主机是否存活,而是默认所有主机都是存活的,因为很多主机会禁用ping,导致ping不通,误认为主机不存活。-Pn 选项可以避免漏掉许多存活的主机。

浏览器输入ip访问进去,看到感觉像是个 名叫 Drupal的CMS管理系统,打开Wappalyzer插件看到网站基本的一些基本信息,看一下有个印象。

Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。推荐使用的是 mysql数据库,Drupal 7对于musql数据库只支持MySQL5.0.15或更高,而且必须在php上设置PDO database扩展;

国外三大开源cms :drupal

robots.txt ,不能放过,进去看看:

目录扫描,windows下有御剑,linux下有dirb。也可以使用dirb目录扫描工具,操作一波看看。


插入一下学习dirb的使用方法。(dirb扫的好慢呀...)

dirb目录扫描工具

  1. 常规扫描 dirb 目标 字典路径 如:dirb http://172.66.66.131 /root/dir.txt 缺省路径就使用默认字典
  2. 设置ua(user agent)和cookie dirb 目标 字典路径 -a “ua” -c “cookie”
  3. 使用代理和输出结果 dirb 目标 字典路径 -p ip:port -o result.txt
  4. 设置附加后缀 dirb 目标 字典路径 -X test(这样的话字典内容每个都加上了test后缀)
  5. 设置毫秒延迟 dirb 目标 字典路径 -z 1000 设置后1000毫秒访问一次,因为扫描速度太快可能会被目标的安全程序禁掉。

放弃思考,上Metasploit框架,输入命令 msfconsole回车(好吧,等我有想法了再回来思考,我太菜了,下课去补补msf的知识)

maf5 > search drupal 查找相关漏洞,选择利用年份最近的一个(最新的漏洞)。

有2018年的和2019年的两个比较新的漏洞,都试试吧,练一下。

进去之后 ls 看一下看到了,有个叫 flag1.txt 的文件,cat一下看看,内容提示说去看 配置文件。重点关注一下,include,sites,web,config 等文件。

这里写入交互shell

meterpreter > shell
python -c 'import pty;pty.spawn("/bin/bash")'

然后连接数据库

mysql -u dbuser -p   回车输入密码 R0ck3t
use drupaldb;
show tables;

看到有 users 表,进去看看

select * from users\G  #末尾的 \G 是结果按行打印输出,这样方便查看

太菜了,密码破解不出来。

searchsploit drupal

找到了一个攻击脚本,可以添加 admin 账号 。且靶机当前drupal 7 版本在适用范围里。

searchsploit 是一个本地的漏洞库,kali里默认集成了,msf里也可以用。在里面可以找相关的漏洞,以及漏洞利用程序和shellcode 。

cat看一下攻击脚本的详细信息。

cat /usr/share/exploitdb/exploits/php/webapps/34992.py

使用方法,三个参数 -t ---> target -u ---> username -p ---> pwd

python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://172.66.66.131 -u admin1 -p admin1



执行成功,网页端登录进去,找到了flag3 。

根据提示意思是要去看 etc/shadow 文件。先来看看/etc/passwd 文件

/etc/passwd 文件是所有用户都读权限。所以密码放在里面显然不合适,于是有了 /etc/shadow 文件。

passwd 文件里的每一行都很规则,用冒号分隔成了7个部分 ,分别对应的是

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

注意最后的字段,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash.

flag4:x:1001:1001:Flag4,,,:/home/flag4:/bin/bashn/false

其中密码字段的 x 表示,该用户设置了密码。

所有者是root,root有读写权限。

用冒号 : 分隔成9个字段。

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

加密密码字段: 这里是经过加密后的密码,linux现在采用的是SHA512散列加密算法,以前用MD5或者DES加密算法。

注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、"*" 或 "x" 使密码暂时失效。

所有伪用户的密码都是 "!!" 或 "*",代表没有密码,该用户是不能用来登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。

所以到这里,linux提权就用上了,需要在靶机上搞到root权限。

在看提权笔记的时候,随便输了个命令进去 ls -alhR /home/ 按下回车,惊喜出现了,意外发现了 flag4.txt

还是乖乖回来提权吧。这次利用suid提权。

linux suid提权

为什么要提权?一般拿到shell之后,权限都不会很高,一些命令需用到root权限执行。

SUID的功能,在U所有者的执行权限位置变成了S

只有 可执行(可X权限)的二进制程序才能设定SUID权限。

命令执行者对该程序拥有X(执行)权限,在执行程序时候获得该程序属主的身份。SUID权限只在程序执行中有效。

举例说明:像是passwd命令,ls -l /usr/bin/passwd 能看到权限是 -rws r-w r-x 在原本的X执行权限位置成了 S ,说明有SUID权限,passwd命令修改的是shadow文件。再看shadow文件权限,ls -alh /etc/shadow 看到是

-rw- r-- --- 只有root写入修改,但为什么普通用户只有r权限却能修改自己的密码 ? 就是因为有suid权限。

所以提权第一步,先找到目标系统中查找具有root权限SUID权限的二进制文件,方可变身root .

尝试使用以下命令进行查找:

find / -perm -u=s -type f 2>/dev/null

find / -user root -perm -4000 -print 2>/dev/null

find / -user root -perm -4000 -exec ls -ldb {} \;

  1. / 表示从根目录开始并查找每一个目录文件
  2. -perm 表示搜索随后的权限
  3. -u = s 表示查找suid权限的二进制文件
  4. -type f 查找文件类型是 f (文件)
  5. 2 文件描述符,( 0 1 2三种),2是错误(stderr标准错误,用 2> 2>>) 2>/dev/null 把错误输出丢掉
  6. -4000 这个要重点理解,篇幅较长,放在文章末尾

就选择用这个吧,执行命令:find . -exec "/bin/sh" \; 提权成功,输入 whoami 查看,可见是root ,再到/rootcat就能看到thefinalflag.txt

find命令的重要参数-exec command:command是其他指令,-exec接其他指令,对find得到的结果进行处理。{}代表的是"find查找到的结果",如下图所示

find根据条件找到的结果,放到{}位置,拼接上 ls -l 命令,实现对查询结果进行操作。举几个栗子:如

find /root/.ssh -exec ls -l {} ;

删除

find /root -size 10M -exec rm -rf {} ;

# 重命名

find /root -name tom -exec mv {} tom_rename ;

# 移动

find /root -name tom_rename -exec mv {} /tmp ;

可见,其实-exec {} \;{}是非必须的, 比如find . -exec "/bin/sh" \;这时候附加命令是打开/bin/sh并没有要对find的结果进行操作。

最后

积累到这些:

  1. 数据库配置文件明文写着数据库用户名和密码 ----> 去找数据库配置文件

  2. meterpreter>shell 直接敲入shell 会连接上服务器的shell,这是通过http协议获得的shell连接,非持久性的连接,此方式下无法本地登录mysql,需要一个持续的交互的shell,使用python -c 'import pty;pty.spawn("/bin/bash")'

  3. netstat -anpt 查看端口开放情况

  4. 使用drupal自带的脚本php scripts/password-hash.sh mima重新生成密码(mima)的密文覆盖原admin用户的密码,因为爆破很耗时,覆盖更省事。

  5. find命令可以调用外部命令,所以提权,多多瞄一下find命令。-exec {} ;

  6. /bin/bash 与 /bin/bash 是什么关系?ls -al /bin/sh就能看到啦

    root@kali:~# ls -alh /bin/sh

    lrwxrwxrwx 1 root root 4 10月 4 15:06 /bin/sh -> dash 得知/bin/sh是/bin/bash 的软链接

    使用 sh 调用执行脚本相当于打开了bashPOSIX 标准模式

  7. #!/bin/sh 指定命令解释器,#!表示后面的内容,搜寻解释器的绝对路径,如果发现了命令解释器,则会创建一个关于该解释器的进程,解释并执行当前脚本的语句,可以是#!/bin/sh#!/bin/more,也可以是#!/usr/local/php5/bin/php

  8. find 的-perm参数讲解: -perm {+mode -mode mode /mode} 有四种权限表示形式可以选(用mode代替具体数值来讲解)

    +mode 表示部分大于权限值 。

    -mode表示完全满足权限值(可以高于该权限值,也就是大于等于权限值的意思)。

    mode表示正好等于该权限值。

    /mode只要有文件权限都给你匹配出来。

    -perm mode中的mode值每一位都转换成二进制,比如644就是110 100 100 ,在匹配结果过程中,+mode是 只看二进制数字1,查找对象的权限用二进制表示,只要有一个1符合,就能匹配出来,不管0的,只看1

    -mode是 只看二进制数字1,查找对象的权限用二进制表示,必须所有 1的位置都符合,才能匹配出来,不管0的,只看1

    总的来说,这个符号-就是查找比给定权限值还充足的权限的文件(大于等于给定权限值)

    举个例子:find / -user root -perm -4000 -print 2>/dev/null -4000 是--s --- ---表示有suid权限的,换成二进制,有1的位置必须满足,那查找的结果一定是 具有suid权限的,或者更高权限,但是一定包含了suid权限在里面。

  9. open系统调用返回的文件描述符是非负整型;每一个进程都有自己的文件描述符集合;当创建进程时,通常有3个打开文件描述符(0,1,2),0代表标准输入,1代表标准输出,2代表标准错误,它们统称为标准IO;当多个描述符指向同一个文件,每个文件描述符仍保持他独特的性能;由于文件描述符在一个进程中是特有的,因此不能在多个进程中间实现共享,而唯一的例外是在父/子进程之间,当一个进程调用fork时,调用fork时打开的所有文件在子进程和父进程中仍然是打开的,而且子进程写入文件描述符会影响到父进程的同一文件描述符,反之亦然.

  10. linux提权,这个知识点好大,打算另外开一片笔记专门整理,后续也会用到

  11. 本地监听与反弹shell:未完待续...

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

  1. DC-5 靶机渗透测试

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

  2. DC-2 靶机渗透测试

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

  3. DC-9 靶机渗透测试

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

  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. 大数据初级sy

    1.spark 是用以下哪种编程语言实现的? A.C             B  C++       C   JAVA               D.Scala (正确答案) 2.FusionIn ...

  2. 服务器硬件和RAID配置

    服务器 硬件和RAID配置 目录 一.RAID 磁盘阵列介绍 1.1.RAID 0(条带化存储) 1.2.RAID 1(镜像存储) 1.3.RAID 5 1.4.RAID 6 1.5.RAID 1+0 ...

  3. 基于C#的socket编程的TCP同步实现

    该博客源著地址https://www.cnblogs.com/sunev/archive/2012/08/05/2604189.html 一.摘要 总结一下基于C#的TCP传输协议的涉及到的常用方法及 ...

  4. 14.5、redis-sentinel高可用

    1.redis主从同步配置: (0)主机配置: 服务器名称 ip地址 实例6379 实例6380 实例6381 controller-node1 172.16.1.90 主 从 从 (1)确定主从: ...

  5. 面试官:spring中定义bean的方法有哪些?我一口气说出了12种,把面试官整懵了。

    前言 在庞大的java体系中,spring有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜.我们都知道spring是创建和管理bean的工厂,它提供了多种定义bean的方式,能够满足我们日常工 ...

  6. Visual Studio 2010 SP1 中文升级补丁ISO完整版下载 (含多国语言)

    最近事情比较多,差点忘记了这个VS2010 SP1的升级补丁更新了,程序员们赶快更新吧!这次发布的SP1包含了下列语言:英文,简体中文,繁体中文,法语,德语,印度语,日语,韩语,俄语以及西班牙语. V ...

  7. Jenkins 凭证 Devops 的粘合剂

    大家好,我是小猿来也,一个热衷于搞 Devops 自动化的 Java 程序猿. 万事具备,只欠东风.当我决定大搞特搞 Devops 的时候,Jenkins 凭证却傻傻分不清. 玩 Devops 的小伙 ...

  8. AcWing 239. 奇偶游戏

    小A和小B在玩一个游戏. 首先,小A写了一个由0和1组成的序列S,长度为N. 然后,小B向小A提出了M个问题. 在每个问题中,小B指定两个数 l 和 r,小A回答 S[l~r] 中有奇数个1还是偶数个 ...

  9. hive学习笔记之十一:UDTF

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  10. Collections中的实用方法

    总结一下java.util.Collections类内部的静态方法. checkedCollection(Collection<T> , Class<T> type) chec ...