Web1
首先创建题目环境,然后我们点击链接跳转到了这个页面.
这个页面只有一个Tip:Where is flag?所以我们不难发现,该题是让我们在这个Web页面中寻找Flag.
方法一.
我们便可以尝试按下F12,对该网站进行元素审计.
不难发现,在Html文件中的注释里面包含了Flag.如下:
<!-- ctfshow{a6b0c2d1-30cc-4372-a0e7-f874c2c73ea1} -->
方法二:
在网站的URL前面加上 view-source: 即可显示当前URL页面的源码.
构造后URL为:
URL页面源码如下:
<!--
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-01 13:45:32
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-02 03:12:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
-->
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>CTFshow 新手入门题目 </title>
<script type="text/javascript">
</script>
</head>
<body>
<h3>web1:where is flag?</h3>
<!-- ctfshow{a6b0c2d1-30cc-4372-a0e7-f874c2c73ea1} -->
</body>
</html>
知识点总结:
①使用浏览器自带的审计功能-按下F12可以查看网站源代码.
②前端的HTML(超文本标记语言)中,如果想要添加注释,需要使用<!--注释内容--> 注释标签。该标签用来在源文档中插入注释,注释不会在浏览器中显示。
③在URL前可以通过添加 view-source:URL 实现绕过前端限制显示网页源码.
Web2
首先创建题目环境,然后我们点击链接跳转到了这个页面.
首先我们尝试F12源码进行审计,发现页面没有反应,然后我们还可以尝试对页面点击右键,发现也不行,这说明该页面禁用了审查元素,屏蔽了右键菜单.
根据Web1里面提到的知识点,我们可以构造view-source:URL实现查看源码,源码如下:
<!--
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-01 13:45:32
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-02 03:20:04
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
-->
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>CTFshow 新手入门题目 </title>
<script type="text/javascript">
window.oncontextmenu = function(){return false};
window.onselectstart = function(){return false};
window.onkeydown = function(){if (event.keyCode==123){event.keyCode=0;event.returnValue=false;}};
</script>
</head>
<body>
<h3>无法查看源代码</h3>
<!-- ctfshow{0b604558-f72a-408f-a17f-d726424144a5} -->
</body>
</html>
通过查看源码我们发现了Flag依然隐藏在了HTML代码中的注释中.如下:
<!-- ctfshow{0b604558-f72a-408f-a17f-d726424144a5} -->
到这里本题就完成解答了.
下面我们在这里对JavaScript实现禁用代码审计的知识点进行讲解:
//禁用鼠标右键
window.document.oncontextmenu = function() {
return false;
}
//禁用复制
window.document.onselectstart = function() {
return false;
}
//禁用F12
document.onkeydown = function() {
if(window.event && window.event.keyCode == 123) {
event.keyCode = 0;
event.returnValue = false;
return false;
}
};
Web3
首先创建题目环境,然后我们点击链接跳转到了这个页面.
我们第一反应还是查看一下源码:
但是我们发现源码中什么都没有. 这个时候我们应该进行数据角度的信息收集.通常的我们使用
Burp Suite这款中间人工具,对网页进行访问,从而可以实现抓取到访问网页时的数据包,但是在这里我们可以先尝试使用浏览器自带的网络工具查看一下数据包.
Step1:点击网络
Step2:对网页进行刷新
我们可以在响应头中找到Flag 如下:
ctfshow{be25b321-0695-4e28-b29f-dc9d76681ea3}
下面进行数据包的相关参数讲解:
方法 | 描述 |
GET | 请求指定的页面信息,并返回实体主体 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。 数据被包含在请求体中。POST 请求可能会导致新的资源的建立和或已有资源的修改 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
OPTIONS | 允许客户端查看服务器的性能 |
DELETE | 请求服务器删除指定的页面 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 |
参数 | 含义 |
Host | 表示请求服务器的IP |
User_Agent | 表示用户本地环境(工具环境) |
Accept | 浏览器可解析的应用环境 |
Accept-Language | 浏览器可解析的语言类型 |
Accept-Encoding | 浏览器可解析的编码方式 |
Referer | 表示请求页面是从哪里来的(当前所处位置) |
Cookie | 表示服务器和浏览器之间的会话状态, 该会话状态可以表示用户是否登陆过, 一般都是服务器给配置的,具有时效性。 cookie失效,就需要用户重新登录, 只有登录成功之后,浏览器就会保存cookie, 每次去服务器去请求都会带上cookie, 并且该cookie是需要在服务器中验证的 |
X-Forwarded-For | 表示用户真实的IP |
Content-Type | 内容类型,表示该请求数据的类型 |
Web4
首先创建题目环境,然后我们点击链接跳转到了这个页面
我们可以先查看源码,然后抓包查看报文是否有相关数据,但是我们会发现都没有Flag相关的东西.
接下来我们可以尝试查看robots.txt文件,这个文件可能会泄露部分网站目录.
我们发现robots.txt文件泄露了当前目录下存在flagishere.txt文件,我们尝试直接访问.
URL:
http://1188f4b2-4bc8-4351-9bcd-428c69f3f3d5.challenge.ctf.show/flagishere.txt
Flag如下:
ctfshow{244f52fd-c750-4ad5-84b5-a73de757cac8}
知识点总结:
①网站可能存在robots.txt文件导致目录信息泄露
Web5
首先创建题目环境,然后我们点击链接跳转到了这个页面.
我们先查看源码,然后尝试抓包,最后再查看robots.txt文件,发现都没有Flag相关信息.
根据提示:“phps源码泄露有时候能帮上忙 ” 我们不难发现这道题考的是phps源码泄露.
根据HTTP请求的响应头中的X-Powered-By:PHP/7.3.11 我们可以得知-网站是用何种语言或框架编写的.
由此可见当前网站的主页是PHP语言编写的,因此我们不难猜测主页文件应该是:index.php
接着我们访问index.php文件,发现跳转的正是当前页面,因此猜测成立!
然后我们便可以根据提示再次访问index.phps文件可以得到以下数据:
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-01 14:14:17
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-01 14:34:53
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//ctfshow{046695d9-a154-4343-957c-2fe66f3bcf32}
echo "web5:where is flag ?"
本题到此结束
Web6
首先创建题目环境,然后我们点击链接跳转到了这个页面.
题目给出提示为:“解压源码到当前目录,测试正常,收工 ”
这里有一个知识点:网站主页源码文件名称为 www.zip ,然后再URL后添加/www.zip对网站主页源码进行下载,然后进行解压,文件内容如下:
根据文件内容我们可以捕捉到关键信息-flag在fl000g.txt文件中.因此我们可以尝试访问/fl000g.txt文件.
Flag如下:
ctfshow{3a4a155a-b96b-4b73-b336-51a3c266127b}
Web7
首先创建题目环境,然后我们点击链接跳转到了这个页面.
目给出提示为:“版本控制很重要,但不要部署到生产环境更重要。”
这里考察的知识点为:Git代码泄露,直接访问URL/.git即可获得Flag:
在Linux中.开头的文件是隐藏文件 , 网站管理员可能会存在在没有删除.git隐藏文件的情况下就将网站上线,这样就会造成源码泄露.
ctfshow{ecb3e4ee-31aa-4676-8c30-6ae9a6131c52}
Web8
首先创建题目环境,然后我们点击链接跳转到了这个页面.
目给出提示为:“版本控制很重要,但不要部署到生产环境更重要。”
这里考察的知识点为:svn泄露,直接访问url/.svn/即可获得Flag:
在Linux中.开头的文件是隐藏文件 , 网站管理员可能会存在在没有删除.svn隐藏文件的情况下就将网站上线,这样就会造成源码泄露.
ctfshow{d5edde07-e0f4-4ce8-adfe-67be858ccb26}
知识点:①Git 和 SVN 两种版本控制软件都有可能造成网站源代码泄露
Web9
首先创建题目环境,然后我们点击链接跳转到了这个页面.
题目给出提示为:“发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了 ”
知识点:vim缓存信息泄露,直接访问url/index.php.swp 即可Flag如下:
ctfshow{80cde84b-dc46-40d9-ab46-f85362c1a77c}
Web10
首先创建题目环境,然后我们点击链接跳转到了这个页面.
题目给出提示为:“cookie 只是一块饼干,不能存放任何隐私数据”
不难猜测到Flag就在Cookie中,因此使用浏览器的开发者工具-网络-就可以查看到响应头中的Cookie
Flag如下:
flag=ctfshow{048ac85a-b215-488a-b405-70eceba7282a}
Web11
题目描述:“域名其实也可以隐藏信息,比如ctfshow.com 就隐藏了一条信息”
原理:通过Dns检查查询Flag.
Dns查询网站:阿里云网站运维检测平台 (aliyun.com)
Flag:
flag{just_seesee}
Web12
题目描述:“有时候网站上的公开信息,就是管理员常用密码”
原理:查看robots.txt文件,找到后台登录页面
用户名:admin(猜测)
密码:在页面的最下方为:372619038
Flag:
ctfshow{2106a414-ece0-42ad-999c-de2b6d6e3bb0}
Web13
题目描述:“技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码”
原理:根据题目提示 技术文档 在页面下面发现 document 下载发现里面存在后台地址和用户名密码登录成功获 得flag
⚫ 登陆
默认后台地址:http://your-domain/system1103/login.php
默认用户名:admin
默认密码:admin1103
ctfshow{0366dbaa-a6c5-4597-bd00-60963cdb97d3}
Web14
题目描述:“有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人”
原理:Editor编辑器文件空间 没有找到默认配置文件的目录,就会遍历所有目录.
先使用view-source:查看源码,再搜索关键字editor,找到一处关键字,并且可以发现泄露了目录.
<img src="editor/upload/banner-app.png" alt="App">
我们可以尝试访问/editor(成功)目录和/editor/upload/(失败)目录以及/editor/upload/banner-app.png(成功)文件
易知/editor是我们的突破口,我们可以通过editor的文件空间功能的漏洞对服务器目录进行遍历.我们前往/var/www/html 找到网页的文件目录,查找是否存在相关文件.
不难发现:/editor/attached/flash/var/www/html/nothinghere/fl000g.txt就是我们需要的文件.
因此我们需要访问URL/nothinghere/fl000g.txt即可,因为默认服务器主页位置为 URL/index.php 在服务器中的路径就是/editor/attached/flash/var/www/html/index.php
ctfshow{b98308c8-93e1-4ce2-acb9-fd0ad5ba87d9}
Web15
题目描述:“公开的信息比如邮箱,可能造成信息泄露,产生严重后果”
原理:盲猜访问 /admin 找到后台登录地址, 发现存在找回密码的密保问题-管理员所在的地区.
在主页面下面看到QQ邮箱,通过QQ号查询邮箱,发现是西安,重置密码成功.
盲猜登录账号admin 密码为重置默认密码,登录即可获得Flag
ctfshow{01b78b11-4975-4394-bc68-d72cdd38a9ec}
Web16
题目描述:“对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露”
原理:考察PHP探针
知识点:php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡 流量、系统负载、服务器时间等信息。 输入URL/tz.php 即可打开雅黑PHP探针
点击Phpinfo-跳转页面:
搜索到Flag:
ctfshow{e70a01cb-0d9a-4dac-8a19-1484801633e5}
Web17
题目描述:“备份的sql文件会泄露敏感信息”
原理:backup.sql
打开网站页面:
明显存在数据库,根据提示访问sql备份文件即可获得Flag
URL/backup.sql中存在Flag如下:
ctfshow{e26a2d51-3cf4-4d16-9246-d74ebf1af3ac}
Web18
题目描述:“不要着急,休息,休息一会儿,玩101分给你flag”
原理:查看js文件,查看flag的条件,去通过uncode解码。 访问110.php
先查看网站源码:
然后前往JS文件,进行代码审计:找到关键代码段-如果socre>100,就会执行后面的代码.
if(score>100)
{
var result=window.confirm("\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b");
}
我们可以直接通过浏览器控制台对条件判断语句的结果进行执行.得到结果:
访问110.php即可得到Flag:
ctfshow{9a024a5a-9230-4a13-9648-2751f8ba4ff6}
Web19
题目描述:“密钥什么的,就不要放在前端了”
原理:前端查看源代码,post提交用户名密码
查看网页源代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="renderer" content="webkit"/>
<script src="js/jquery.min.js"></script>
<script src="js/crypto.js"></script>
<script src="js/cipher-core.js"></script>
<script src="js/aes.js"></script>
<script src="js/zero.js"></script>
<title>ctfshow web入门 web19</title>
</head>
<body>
<form action="#" method="post" id="loginForm" >
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="pazzword" id="pazzword"><br>
<button type="button" onclick="checkForm()">提交</button>
</form>
</body>
<script type="text/javascript">
function checkForm(){
var key = "0000000372619038";
var iv = "ilove36dverymuch";
var pazzword = $("#pazzword").val();
pazzword = encrypt(pazzword,key,iv);
$("#pazzword").val(pazzword);
$("#loginForm").submit();
}
function encrypt(data,key,iv) { //key,iv:16位的字符串
var key1 = CryptoJS.enc.Latin1.parse(key);
var iv1 = CryptoJS.enc.Latin1.parse(iv);
return CryptoJS.AES.encrypt(data, key1,{
iv : iv1,
mode : CryptoJS.mode.CBC,
padding : CryptoJS.pad.ZeroPadding
}).toString();
}
</script>
<!--
error_reporting(0);
$flag="fakeflag"
$u = $_POST['username'];
$p = $_POST['pazzword'];
if(isset($u) && isset($p)){
if($u==='admin' && $p ==='a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04'){
echo $flag;
}
}
-->
</html>
进行代码审计不难发现在JavaScript的注释中告知了echo $flag的判断条件,并对用户名进行了明文存放,但是密码是通过JS.AES进行了加密存放,因此我们只需要通过post方法,绕过前端验证对用户名和密码进行提交就可以获得Flag如下:
ctfshow{8c39cad5-993b-4726-8a0a-d7d107872cc1}
当然我们也可以通过在线AES解密工具对密码进行解密,再通过前端提交一样可以实现获得Flag.
账户:admin 密码:i_want_a_36d_girl
Web20
题目描述:“mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤了”
原理:mdb文件是早期asp+access构架的数据库文件 直接查看url路径添加/db/db.mdb 下载文件通过二进制编辑软件打开或者通过EasyAccess.exe打开搜索flag即可
flag{ctfshow_old_database}