DC-1 靶机渗透测试

DC-1靶机渗透测试

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

DC系列靶机的第一篇。边学习边日靶机边进步,摸爬滚打着前行。
内容不只是日靶机,还有其中遇到的知识点,记录下来。

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

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

0x01 信息收集

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

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

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

image

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插件看到网站基本的一些基本信息,看一下有个印象。

image

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

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

image

目录扫描,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的知识)

image

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

image

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

image

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

image

image

这里写入交互shell

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

image

然后连接数据库

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

image

看到有 users 表,进去看看

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

image

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

searchsploit drupal

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

image

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

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

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

image

使用方法,三个参数 -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

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

image

image

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

image

/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 表示,该用户设置了密码。

image

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

image

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

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

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

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

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

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

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

image

还是乖乖回来提权吧。这次利用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 这个要重点理解,篇幅较长,放在文章末尾

image

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

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

image

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

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

image

删除

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

image

# 重命名

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

image

# 移动

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

image

可见,其实-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:未完待续...

posted @ 2021-05-11 13:20  Bitores  阅读(399)  评论(0编辑  收藏  举报