目录

一、任意文件读取漏洞

二、代码实现

2.1 FileRead.vue

2.2 FileReadController.java

三、界面展示


前言:本篇博客主要记录任意文件读取漏洞的靶场实现。

一、任意文件读取漏洞

任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。其中的目录遍历是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件(可以是web根目录以外的文件),甚至执行系统命令。更严重的,导致SSRF漏洞,进而漫游至内网。

可以利用web漏洞扫描器(御剑等)扫描web应用进行检测,也可通过搜索,网站标题包含 “index of” 关键词的网站进行访问,手工探测等。

攻击者通过访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者; 攻击者可能通过浏览目录结构,访问到某些隐秘文件(如PHPINFO文件、服务器探针文件、网站管理员后台访问地址、数据库连接文件等)。简要来说就是老家被偷了。

二、代码实现

2.1 FileRead.vue

前端部分Vue代码如下:

<!--题目名字:FileRead-->
<!--题目类型:任意文件读取-->
<!--题目描述:任意文件读取型漏洞-->
<!--题目难度:4星-->
<template><div class="menu"><el-row><!-- 按钮菜单部分 --><el-col :span="24"><el-menu:default-active="mypath"class="el-menu-demo"mode="horizontal"background-color="#fff"text-color="#000"active-text-color="#FF9912"@select="handleSelect"><el-menu-item index="/honeypot">  </el-menu-item><el-menu-item index="/abilitypromotion"></el-menu-item><el-menu-item index="/forum" ></el-menu-item><el-menu-item index="/navigation" >玄幻</el-menu-item><el-menu-item index="/coursemanagement" >都市</el-menu-item><el-menu-item index="/usermanagement" >仙侠</el-menu-item><el-menu-item index="/usermanagement" >历史</el-menu-item><el-menu-item index="/usermanagement" >游戏</el-menu-item><el-menu-item index="/usermanagement" >排行</el-menu-item></el-menu></el-col></el-row></div><div class="building"><el-card style="width: 60%;margin-left: 20%;margin-top: 2%"><el-row><el-col :span="3"></el-col><el-col :span="15" style="text-align: left"><h3>《三体》</h3></el-col><el-col :span="6"><el-button style="" @click="read1" type="warning" plain>详情</el-button></el-col></el-row><el-divider style="background-color: lightgray"/><el-row><el-col :span="3"></el-col><el-col :span="15" style="text-align: left"><h3>《明朝那些事儿》</h3></el-col><el-col :span="6"><el-button style="" @click="read2" type="warning" plain>详情</el-button></el-col></el-row><el-divider style="background-color: lightgray"/><el-row><el-col :span="3"></el-col><el-col :span="15" style="text-align: left"><h3>《我们仨》</h3></el-col><el-col :span="6"><el-button style="" @click="read3" type="warning" plain>详情</el-button></el-col></el-row><el-divider style="background-color: lightgray"/><el-row><el-col :span="3"></el-col><el-col :span="15" style="text-align: left"><h3>《flag在哪儿》</h3></el-col><el-col :span="6"><el-button style="" @click="read" type="warning" plain>详情</el-button></el-col></el-row><el-divider style="background-color: lightgray"/><el-row><el-col :span="3"></el-col><el-col :span="15" style="text-align: left"><h3>《解忧杂货店》</h3></el-col><el-col :span="6"><el-button style="" @click="read5" type="warning" plain>详情</el-button></el-col></el-row><el-divider style="background-color: lightgray"/><el-row><el-col :span="3"></el-col><el-col :span="15" style="text-align: left"><h3>《追风筝的人》</h3></el-col><el-col :span="6"><el-button style="" @click="read6" type="warning" plain>详情</el-button></el-col></el-row><el-divider style="background-color: lightgray"/></el-card></div><el-dialog v-model="show" title="书籍详情" width="30%"><p>{{content}}</p></el-dialog></template><style scoped>
.building{/*background:url("src/assets/img/bugimg/download.jpg");*/width:100%;height:100%;position:fixed;background-size:100% 100%;
}</style>

2.2 FileReadController.java

后端controller类如下:

@RestController
public class FileReadController {@AutowiredDataSource dataSource;public String sql;@RequestMapping("/Read")public Result fileDownload(@RequestParam("filename") String filename,@RequestParam("username") String username)throws IOException {System.out.println(filename+":ok");String text;Result res;//for flag//生成flagString problemid = "pro025";String flag = null;String flagMD5 = null;String flagBase64 = null;String flagPath = "D://test/flag/";  //引导的文件String flagPath1 = "/test/flag.txt";       //真正的flagtry {String sql = "";Connection connection;PreparedStatement st;ResultSet rs;int row;connection = dataSource.getConnection();// 预编译sql = "select flag from flag where username = ? and problemid = ?";st = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);st.setString(1, username);st.setString(2, problemid);System.out.println(sql);rs = st.executeQuery();// 通过此对象可以得到表的结构,包括,列名,列的个数,列数据类型rs.last();row = rs.getRow();rs.beforeFirst();System.out.println("查找到行数为"+row);if(row==1){rs.next();flag = rs.getString("flag");System.out.println("flag已存在:"+ flag);}else {FlagMake flagMake = new FlagMake();flag = flagMake.getFlag();System.out.println("生成flag:"+ flag);//将flag MD5编码后存入数据库flagMD5 = MD5.getMD5String(flag);sql = "insert into flag (`username`, `problemid`, `flag`) values ('"+username+"', '"+problemid+"', '"+flag+"');";System.out.println(sql);//PreparedStatement st1 = connection.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);Statement stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);stmt.executeUpdate(sql);// st1.executeUpdate();}rs.close();connection.close();} catch (SQLException e) {System.out.println("输入内容错误,数据库查询错误 in flag");System.out.println(e.toString());//return "输入内容错误,数据库查询错误";}saveAsFileWriter(flag,flagPath1);//读取前端传入的文件内容text = txt2String(flagPath+filename);System.out.println(text);res = new Result(Constants.CODE_200,null,text);return res;}/*** 读取文件内容* @param path 想要读取的文件路径* @return 返回文件内容*/public static String txt2String(String path)throws IOException{File file;StringBuilder result;boolean flag = true;file = new File(path);/*文件名*/result = new StringBuilder();try{BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件String s = null;while((s = br.readLine())!=null){//使用readLine方法,一次读一行result.append(System.lineSeparator()+s);}br.close();}catch(Exception e){e.printStackTrace();}return result.toString();}/*** 写数据到txt文件* @param filePath 写入文件的路径* @param content 写入文件的数据*/public static void saveAsFileWriter(String content,String filePath)throws IOException{FileWriter fwriter = null;try {// true表示不覆盖原来的内容,而是加到文件的后面。若要覆盖原来的内容,直接省略这个参数就好fwriter = new FileWriter(filePath);fwriter.write(content);} catch (IOException ex) {ex.printStackTrace();} finally {try {fwriter.flush();fwriter.close();} catch (IOException ex) {ex.printStackTrace();}}}}

三、界面展示

寻找flag的方法在这里就不展示了,只展示题目界面。

山东大学软件学院项目实训-创新实训-网络安全靶场实验平台(十五)相关推荐

  1. 山东大学软件学院项目实训-创新实训-网络安全靶场实验平台(一)

    目录 前言 一.项目介绍 二.项目框架 三.个人分工 四.本周任务完成情况 4.1  Vue安装 4.1.1 node.js安装及配置 4.1.2 安装vue及脚手架 4.1.3 运行Vue项目 4. ...

  2. 山东大学软件学院项目实训-创新实训-网络安全靶场实验平台(五)

    目录 一.header 二.footer 三.数据库的设计 3.1 表的设计 3.2 E-R图 一.header header是页面的导航条,作为一个组件在每个页面中都有引用. 其外观如下图所示:   ...

  3. 山东大学软件学院项目实训-创新实训-网络安全靶场实验平台(十六)

    目录 一.什么是目录遍历漏洞? 二.后端实现 三.前端代码 四.效果图 前言:本篇博客主要记录目录遍历漏洞的实现. 一.什么是目录遍历漏洞? 目录遍历(也称为文件路径遍历)是一个Web安全漏洞,它使攻 ...

  4. 山东大学网络靶场实验平台—团队进度(三)

    系列文章专栏地址: 山东大学网络安全靶场实验平台 本期目录 一.序言 二.网页设计 三.数据库设计 四.靶场设计 一.序言 本期,我们主要是完成了数据库设计,部分网页设计,以及部分靶场设计. 其中网页 ...

  5. 山东大学网络靶场实验平台—团队进度(四)

    系列文章专栏地址: 山东大学网络安全靶场实验平台 本期目录 一.序言 二.网页设计 三.漏洞页面设计 四.整合和发布1.0版本 一.序言 本期,我们继续对网页进行搭建,同时靶场模块引入了更多的漏洞页面 ...

  6. 山东大学软件学院项目实训-创新实训-SDUMeeting(一)

    山东大学软件学院项目实训-创新实训-SDUMeeting(一) 一.前言: 这个项目是山东大学视频会议项目,这个项目基于webrtc构建多人视频会议系统,我负责视频会议客户端及服务端安全防护,这个专栏 ...

  7. 山东大学软件学院项目实训-创新实训-SDUMeeting(三)

    山东大学软件学院项目实训-创新实训-SDUMeeting(三) 山大会议项目web安全之文件注入防护 一.前言 山大会议的客户端加入了对用户自定义头像的支持,需要用户自行上传头像图片,这个过程存在文件 ...

  8. 山东大学软件学院项目实训-创新实训-SDUMeeting(六)

    山东大学软件学院项目实训-创新实训-SDUMeeting(六) 端对端加密与密钥交换 端到端加密(end-to-end),是一种只有参与通讯的用户可以读取信息的通信系统.它可以防止潜在的窃听者--包括 ...

  9. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(二)-docker安装与学习

    目录 前言: 一.docker安装 1.centos7使用yum安装 二.命令行创建 docker 容器测试 前言: 项目实训立项通过后的几天均在学习 docker 的相关知识,上一篇文章也简单记述了 ...

最新文章

  1. No IP specified. Please specify IP with ‘objects’
  2. 第四周项目四-程序分析(4)
  3. WebDriverAgent安装到iphone真机
  4. Java动态代理的应用
  5. VS2010快捷键总结(一)
  6. 快速傅里叶变换及python代码实现
  7. android 动态contextmenu,Context-Menu.Android
  8. 颜色直方图的计算、显示、处理、对比及反向投影(How to Use Histogram? Calculate, Show, Process, Compare and BackProject)...
  9. Linux-文件目录命令
  10. 网络字节序与主机字节序 高低位
  11. 华为游戏小程序快应用账号登录6004报错集合
  12. C# 校验类(邮箱、手机号、身份证号等)
  13. 铜死亡丨解锁细胞死亡新方式 - MedChemExpress
  14. 正月初七 | 2月18日 星期四 | 京东物流在港交所提交招股书;字节跳动回应在美上市传闻;2021年中国电影总票房破百亿...
  15. iOS开发中MD5加密算法的实现
  16. 优秀架构师必须拥有的架构思维习惯
  17. error:1962 no operating system found
  18. 【20230215】EndNote20文献管理软件的使用_个人学习总结
  19. H.264 软/硬编码器 画质量化分析评测
  20. 百胜中国门店数突破一万家;山姆中国第28家门店在昆山开业 | 美通企业日报...

热门文章

  1. can差分线阻抗_为什么要进行阻抗匹配?
  2. TM1668 与 CT1668 驱动有差异?
  3. Android开发 - PsyDuck说明书
  4. 第十七届智能车竞赛英飞凌 | 逐飞联合直播-平衡单车组入门讲解
  5. 第一个项目(热敏打印机)
  6. 【龙芯1c库】封装硬件pwm接口和使用示例
  7. QT信号和槽机制分析
  8. 2017初秋最时髦服装搭配,裙子+短靴搭配
  9. iphone 6plus 输出的屏幕尺寸 375 ,667的原因 - 简书
  10. MySQL数据库 锁