目录

一、任意文件读取漏洞

二、代码实现

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. 贾扬清、Alex Smola、Julia创始人等大咖齐聚,WAIC开发者日共话AI未来
  2. nginx的配置和优化(隐藏版本号、gzip、expires、防盗链......等)
  3. python dataframe是什么_python – 逐个构建DataFrame的最快方法是什么?
  4. 珂朵莉的约数(牛客练习赛9)
  5. codeforces B. Friends and Presents(二分+容斥)
  6. 一分钟学会python编程_用Python教你一分钟检验出来!不用群发_编程语言_Python课程_Python教程_课课家...
  7. python数字对应车站_python爬虫查询车站信息
  8. iOS开发基础知识--碎片27
  9. rem适配的浏览器_移动端网页布局适配rem方案小结
  10. 分数加减法 http://acm.nyist.net/JudgeOnline/problem.php?pid=111
  11. java stringjoiner_java-为什么我们已经拥有StringBuilder时使用StringJoiner?
  12. 戴爾一體機欲與蘋果決高下
  13. qlistview 自定义控件_python – QListView中的自定义项
  14. 半小时一篇文过完C语言基础知识点
  15. 计算机网络——第三章 数据链路层(详细附图)
  16. 史上最全整理:大投机家 杰西·利弗莫尔 投资原则及启示(期货股票交易者必收藏)
  17. 上大学之前,一定要明白这10大潜规则,你会少走很多人生弯路
  18. 机器人笔记本清灰_小熏的编程日记 » 愉悦的小机器人调教经历(一):使用笔记本为HTC G4提供无线路由...
  19. win10+TPLINK,用PXE安装redhat系统
  20. 用PowerPoint制作比赛评分系统 [评委计分系统-双屏专业版],欢迎下载!!

热门文章

  1. 【生活】如何线上办理持有广州社保人员的异地分娩医保登记 - 定点医院 - 异地就医报销相关
  2. CTF-PHP反序列化漏洞2-利用魔法函数
  3. IOS 多线程之信号量
  4. Dynamic Memory Networks DMN+
  5. 提交SVN时出现目录obstructed的解决办法·
  6. Tomcat HTTP的端口号和redirectPort(重定向)端口号
  7. Redis常用的命令(一)-------启动、配置等
  8. C++中cout和cerr的区别
  9. 字符串(字符串的拼接及一些常用方法)
  10. C++整型int转字符串string