VulnHub-W1R3S: 1
VulnHub-W1R3S: 1渗透测试详细流程
这台靶机可能是太简单了吧,打的是相当的顺利,相比之前要好很多,时间主要花费在两个小工具的学习上,这俩工具功能强大,但是以前没有接触过。再练~
基本思路:
还是跟前几台靶机一样,先信息收集,nmap找ip,查端口,web页面查找有用信息,扫目录;
找到一个Cuppa CMS页面,发现漏洞利用点;
利用curl获取密码文件和shadow文件;利用john破解此密码;
利用ssh进行登陆,利用sudo暂时申请root权限
提权后查看目录,找到flag
小知识点
一、CuppaCMS:远程任意代码执行漏洞
CuppaCMS是一套内容管理系统(CMS)。CuppaCMS 2019-11-12之前版本存在安全漏洞,攻击者可利用该漏洞在图像扩展内上传恶意文件,通过使用文件管理器提供的重命名函数的自定义请求,可以将图像扩展修改为PHP,从而导致远程任意代码执行。
二、LFI漏洞:本地文件包含
LFI允许攻击者通过浏览器包含一个服务器上的文件。当一个WEB应用程序在没有正确过滤输入数据的情况下,就有可能存在这个漏洞,该漏洞允许攻击者操纵输入数据、注入路径遍历字符、包含web服务器的其他文件。
-
主要涉及到的函数
include()、require()、include_once()、require_once()、magic_quotes_gpc()、allow_url_fopen()、allow_url_include()、move_uploaded_file() 、readfile() file()、file_get_contents()、upload_tmp_dir()、post_max_size()、max_input_time() -
典型漏洞代码:
LFI漏洞很容易被识别和利用。任何一个包含WEB服务器文件的脚本,对于下一步的LIF测试,都是一个很好的切入点,可以尝试通过操纵文件位置参数来利用它
-
利用
1.使用php://filter协议和base64编码去访问本地文件得到源码
访问`http://127.0.0.1/LFI.php?include=php://filter/read=convert.base64-encode/resource=func1.php`2. 使用zip:// 协议去访问压缩文件中的文件
这就意味着可以直接绕过后缀名。 比如访问'http://127.0.0.1/LFI.php?include=zip://func1.jpg#func1.php',其中fun1.jpg 是改了后缀的压缩文件。3.使用phar://协议去读取服务器端的phar文件, 执行 phar 文件中的php 脚本或者其他。这需要事先本地创建一个phar文件再上传到目标站点。
创建phar 文件代码, 其中phar 文件里只包含一个 createwebshell.php 文件。<?php $phar = new Phar('webshell4.phar'); $phar->addFile('createwebshell.php', 'cws.php'); ?>
phar文件就相当于 java 里的jar 文件, 只不过phar 文件不可以用压缩文档打开, 可以用编辑器打开, 会发现phar 文件拥有特别的格式。
通过访问http://127.0.0.1/LFI.php?include=phar://webshell.phar/cws.php
可以执行cws脚本, 其中webshell.phar 的后缀可以随意更改以便绕过后缀检查。
参考文章:https://www.bugku.com/thread-19-1-1.html
三、sudo su和su的区别
su是申请切换root用户,需要申请root用户密码
sudo su是当前用户暂时申请root权限,所以输入的不是root用户密码,而是当前用户的密码。
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。
它的特性主要有这样几点:
§ sudo能够限制用户只在某台主机上运行某些命令。
§ sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
§ sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
§ sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。
必学工具
一、curl:文件传输工具
http://aiezu.com/article/linux_curl_command.html
-
curl常用参数解读:
- -d 参数用于发送 POST 请求的数据体,使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST;
- –data-urlencode参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。
- -A 参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]
- -i 参数打印出服务器回应的 HTTP 标头
- -s 参数将不输出错误和进度信息
二、Nikto :web漏洞扫描神器
-
nikto常用命令
-upodate 升级,更新插件
-host 扫描目标URl
-id username:password http认证接口
-list-plugins 列出所有可用的插件
-evasion IDS/IPS逃避技术(实例演示里有详细信息)
-port 指定端口(默认80)
-ssl 使用SSL
-useproxy 使用http代理
-vhost 域名 当一个IP拥有多个网站时 使用
-
nikto交互参数(扫描过程中使用)
空格 报告当前扫描状态
v 显示详细信息
d 显示调试信息
e 显示http错误信息
p 显示扫描进度
r 显示重定向信息
c 显示cookie
a 显示身份认证过程
q 退出程序
N 扫描下一个目标
P 暂停扫描
1.扫描单个地址时
nikto -host http://xxx.xxx.xx.xx
2.扫描多个地址时
nikto -host url.txt
3.扫描https网站
nikto -host url -ssl -port 443
4.使用代理进行扫描
nikto -h URL -useproxy http://127.0.0.1:1080(没有无法演示,若以后有条件补上)。
5.使用LibWhisker绕过IDS的检测(10个参数 1-8、A、B)
1 随机URI编码(非utf-8)
2 自选择路径(/. /)
3 过早结束的URL
4 使用长随机字符串
5 使用假参数
6 使用tab作为命令的分隔符
7 更改URL的大小写
8 使用windows的命令分隔符""
A 使用回车0x0d作为请请求分隔符
B 使用二进制0x0b作为请请求分隔符
niketo -host www.xxxx.com -ssl -port 443 -evasion 1358Nikto配合Nmap扫描
6.配合 Nmap 进行扫描
nmap -p80 x.x.x.x -oG - |nikto -host -
nmap扫描开放80端口的IP并通过oG选项对扫描结果输出并整理),然后通过管道符“|”将上述扫描结果导入至nikto进行扫描
三、john开膛手:密码破解工具
kali自带
全称叫“John the Ripper password cracker(约翰开膛手密码破解)”。
John the Ripper是一个快速的密码破解程序,目前可用于Unix,Windows,DOS和OpenVMS的许多口味。其主要目的是检测弱Unix密码。除了在各种Unix系统上最常见的几种crypt(3)密码哈希类型之外,现在支持的还有Windows LM哈希,以及社区增强版本中的大量其他哈希和密码。
用法:
john [OPTIONS] [PASSWORD-FILES]
john [选项] [密码文件]
选项:
--single[=SECTION] ]“单裂”模式
--wordlist[=FILE] --stdin 单词表模式,从FILE或stdin读取单词
--pipe 像--stdin一样,但批量读取,并允许规则
--loopback[=FILE] 像 --wordlistg一样, 但是从.pot文件中获取单词
--dupe-suppression 压制wordlist中的所有模糊(并强制预加载)
--prince[=FILE] PRINCE模式,从FILE中读取单词
--encoding=NAME 输入编码(例如,UTF-8,ISO-8859-1)。 也可以看看doc / ENCODING和--list = hidden-options。
--rules[=SECTION] 为单词表模式启用单词修改规则
--incremental[=MODE] “增量”模式[使用部分模式]
--mask=MASK 掩码模式使用MASK
--markov[=OPTIONS] “马尔可夫”模式(参见doc / MARKOV)
--external=MODE 外部模式或字过滤器
--stdout[=LENGTH] 只是输出候选人密码[在LENGTH切]
--restore[=NAME] 恢复被中断的会话[名为NAME]
--session=NAME 给一个新的会话NAME
--status[=NAME] 打印会话的状态[名称]
--make-charset=FILE 制作一个字符集文件。 它将被覆盖
--show[=LEFT] 显示破解的密码[如果=左,然后uncracked]
--test[=TIME] 运行测试和每个TIME秒的基准
--users=[-]LOGIN|UID[,..] [不]只加载这个(这些)用户
--groups=[-]GID[,..] 只加载这个(这些)组的用户
--shells=[-]SHELL[,..] 用[out]这个(这些)shell来加载用户
--salts=[-]COUNT[:MAX] 用[out] COUNT [到MAX]散列加载盐
--save-memory=LEVEL 启用内存保存,级别1..3
--node=MIN[-MAX]/TOTAL 此节点的数量范围不在总计数中
--fork=N 叉N过程
--pot=NAME 锅文件使用
--list=WHAT 列表功能,请参阅--list = help或doc / OPTIONS
--format=NAME 强制使用NAME类型的散列。 支持的格式可以用--list=formats和--list=subformats来看