极客大挑战 Web 题解
该正视过去的那段时光了,虽然并不顺利,但也要记录下来,成为博客文章的一员。
1.朋友的学妹直接F12即可。
2.EZwww提示的很清楚了,这里直接用脚本去找备份文件,通过返回的状态码很快就找出来备份文件的文件名,然后下载解压就可以拿到 flag 了
3.刘壮的黑页这个下拉到最下面的地方,然后鼠标选择之后能看到php代码,然后代码审计,直接 GET 提交 username=admin 然后 POST 提交 passwd=syclover 就可以了。
4.Welcome这道题目使用GET访问的时候会显示页面是空白的,刚开始我不知道,以为是人太多导致页面加载不出来,就放在一边看后面的题目了。写了后面的题目再打开发现还是无法打开,搜索 405 错误之后就明白了。
使用 POST 发送请求,然后会看到一段 PHP 代码,发现需要 POST 上传两个参数,要求上传的两个参数 roam1 和 roam2 值必须严格不同,但是他们的md5计算值却必须是相同的。
使用数组绕过的方法,让两个都为数组,然后赋上不同的值,这样两个数在比较的时候,值严格不同,在计算 md5 比较的时候,又因为两个变量返回的 ...
Syclover 二面报告
是该正视自己的过去了,关于自己在 Syclover 招新的第二次面试报告,也该让它作为自己博客文章的一员了。
任务一0x01 搭建环境首先抛出一个坑:在网站目录的配置文件里面添加的预加载文件选项是会报服务器内部错误,需要扔到 php.ini 文件里面。这是因为服务器使用的是 CGI 模式运行而不是 Apache 模式运行,在 CGI 模式下,php_value 无法被识别,会导致服务器500错误。
剩下的东西就按照文档里说的进行操作就能成功搭建网页了。
0x02 代码审计1. CSRF漏洞防御特意写了一个 xsrf.php 来对关键请求进行认证,来预防可能的 CSRF 攻击。防御手段是使用 uniqid() 生成时间串,然后将这个时间串 md5 加密之后作为 token 输出在 html 的一个隐藏表单里面,随着用户的点击一起通过 post 提交到后台,然后对这个 token 的值进行验证是否由服务器签发,如果不是,就终止程序,可以有效的防御 CSRF 攻击。
2. SQL注入防御对于所有和 SQL 数据库交互的命令,都保证拼接参数可控,把用户输入的 username 和 mail ...
Listener 和 Filter 学习笔记
Listener 监听器Listener 监听器是 Java EE 的三大组件之一。Java Web 的三大组件分别是 Servlet 程序,Filter 过滤器,Listener 监听器。Listener 是一个接口,只要实现这个接口,就获得了一个监听器
ServletContextListener 监听 ServletContext首先编写一个类去实现 ServletContextListener 接口,编写监听到某个事件之后的需要执行的代码。
123456789101112public class Listener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext is initialized!"); } @Override public void context ...
Cookie & Session
Cookie创建 Cookie使用构造方法创建,输入键值对即可,可以同时创建多个 Cookie,然后都输入到响应头中让浏览器保存。
1234Cookie cookie=new Cookie("Tempest", "Yukino");Cookie cookie1=new Cookie("Yuuki", "Asuna");resp.addCookie(cookie);resp.addCookie(cookie1);
Cookie 生命周期Cookie 的生命周期由 setMaxAge() 来设置,有三种值:
正整数 表示经过这个正整数秒之后,这个 Cookie 过期。
-1 表示 Cookie 生命周期为会话级别,关闭浏览器就删除(其实就没写进内存)
0 表示立刻删除 Cookie,立刻的意思是字面意思,浏览器接收到响应就删了。
1234567Cookie[] cookies = req.getCookies();for(Cookie i:cookies) { i.setMaxAge ...
文件上传与下载
文件上传前端部分首先我们写一个文件上传的表单页面:
12345<form method="post" enctype="multipart/form-data" action="Upload"> <input type="file" name="photo"> <br> <!-- 这里要注意一定要写 name 属性,否则数据不会提交到 Post 里面 --> 用户名<input type="text" name="username"><br> <input type="submit" name="submit"></form>
当我们使用表单进行传输数据的时候,需要设定属性 enctype="multipart/form-data" 这是因为对于文件来说,不能像 XXX=XX ...
EL & JSTL
EL
EL 全程为 Expression Language 的意思,是在 JSP 中用来代替表达式 <%=Expression%> 的,格式为 ${Expression} 。
获取并输出数据获取作用域变量EL 可以直接将四大作用域的里面设置的属性作为一个变量直接输出,首先设置:
123456<% pageContext.setAttribute("Tempest", "Xorex"); request.setAttribute("Yukinoshita", "Yukino"); session.setAttribute("Yuuki", "Ausna"); application.setAttribute("Katou", "Megumi");%>
然后利用 EL 进行输出:
1234${Tempest}${Yukinoshit ...
TodoList:2021-04
关于我重新想要写 TodoList 这件事三月份的 TodoList 我个人觉得我完成的还算成功,因为除了第六条对于我这种社恐来说实在难以完成,其他五条基本上都已经做到了,无论是学习效率还是学习习惯,都已经进入了一个全新的高度。
其实现在这个东西现在就已经不是 TodoList 了,因为我发现根本不需要 TodoList 来督促我提高学习的效率,自认为上一个星期中,我的效率已经够高了,高到甚至能达到高三时的 80% 。我相信这是绝大多数大学生都难以到达的高度了(当然肯定比不了双一流的内卷大佬们)。加上上一篇的 TodoList 记录了不到 10 天就鸽了,所以我似乎并没有理由再写一篇 TodoList。
但是不写总觉得难受,觉得还是要记录下来些什么,学习感悟也好,内心感想也罢,亦或者把这篇博客当成说说分享每天的见闻。所以这次的 4 月份 TodoList 会更加的开放,希望仍然可以被 4 月份温柔以待啊!
每一天的记录04-03今天是和往常一样的日子,不过唯一的不同是因为今天是假期,所以变得懒散了起来,上午纵容自己睡了个懒觉(毕竟这一个星期真的是太累了啊),寝室里面比较冷清。下午则是来 ...
JSP 页面开发
JSP 概述
JSP(全称为 JavaServer Pages)是由 Sun 公司主导建立的一种动态网页技术标准。JSP 部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成 HTML、XML 或其他格式文档的 Web 网页,然后返回给请求者。JSP 技术以 Java 语言作为脚本语言,为用户的 HTTP 请求提供服务,并能与服务器上的其它 Java 程序共同处理复杂的业务需求。
JSP 适合用来处理动态网页的生成,其实本质上还是会翻译成正规的 Servlet 的 Java 程序,只不过 JSP 的技术让我们开发动态网页更加方便了。
JSP 原理JSP 本质上是一个 Servlet 程序,当我们启动 Tomcat 的时候,会将我们写的 JSP 程序翻译成一个完整的 Servlet 程序,在:\JetBrains\IntelliJIdea2020.3\tomcat\d2e3b327-bf64-4ef1-9da7-9edd1aeafdaa\work\Catalina\localhost\BookStore\org\apache\jsp 里面,可以看到 .java 和 . ...
ClassPath 和 getResourceAsStream()
ClassPath
Classpath 是 Java 虚拟机或 Java 编译器中的参数,用于指定用户定义的类和包的位置。
普通本地项目的 ClassPathJava 的运行是先运行 javac.exe 先将 .java 代码编译成 .class 字节码文件,然后运行 java.exe 启动 JVM ,然后 JVM 调用自己的 ClassLoader 类加载器读取 .class 文件,然后处理文件为内存中的 Class 类,这样无论是实例化还是执行就都没问题了。
但是 ClassLoader 去哪里找 .class 文件呢?那就是 ClassPath。而需要加载的 .class 文件除了我们自己写的 java 代码编译出来的以外,还有我们引用的外部的核心类的 .class 文件。对于外部核心类,我们通过设置环境变量中的 classpath=XXXXXX 将核心类的文件位置告诉 ClassLoader。至于我们自己写的 java 代码的 .class 文件位置,则由 IDEA 在代替我们运行 java.exe 文件的时候,传入了 -cp XXXX 参数,告诉了 ClassLoader ...
HTTP 的请求与响应
HTTP 协议HTTP 版本
HTTP 1.0 一次连接只能获取一个资源
HTTP 1.1 一次连接可以获取多个资源
HTTP 请求请求的结构:
请求行包括:请求方式 请求资源名称 使用协议版本。注意这里的请求资源名称里面是会包含 ?XXX=XXX&XXX=XXX 这样的 GET 请求参数的。然后下面的请求实体会可能会包含 POST 请求参数 XXX=XXX&XXX=XXX 。
常用请求头:
AcceptAccept: text/html 浏览器可以接受服务器回发的类型为 text/html。
Accept: */* 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)。
Accept-EncodingAccept-Encoding: gzip, deflate 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),注意:这不是只字符编码。
Accept-LanguageAccept-Language: zh-CN, zh; q=0.9 浏览器申明自己接收的语言。
ConnectionConnec ...