CTF萌新入坑指南(web篇)(10.21已更新)

10.21 ——最近忙的要死,校赛被锤爆,,然后课设又要结项,那几天肝代码到很晚,累die,然后答辩,又被锤爆,几天才缓过来,终于抽出时间来想一想写一写校赛的一些经验和教训 当时做的一塌糊涂 完全只能靠杂项得分 感觉最基本的东西很多不会或者说没有掌握精髓 现在完全不敢说自己是个web选手 还好队友比较给力搞了个crypto的一血 不至于那么丢人
各位大佬请划走 放过孩子吧
(((((((((
(这期补充了学习平台的介绍以及入门的一些经验还有两个例题)

在这里插入图片描述

ps:其实在写这篇入坑指南的时候内心还是十分挣扎的,毕竟大佬太多而我自己太太太太菜,然鹅我也不好拒绝温柔善良的郑童鞋的邀请,因此这篇文章只面向最最最新的萌新,各位大佬请自行忽略

前言

 web在ctf里面占到的比重还是蛮大的,从国内有ctf赛事以来,web就一直是各
 路出题人的宠儿,就比如说前段时间的某次分区赛初赛题目构成是7pwn 7web 
 1re 1misc,虽然在我看来这个题目分配过于偏激且离谱了,但是足以看出web
 在ctf中的重要性,线下赛pwn佬可能更加关键,不过web手对于每个队伍都是不
 可或缺的,总体来说基础web题的难度不是很大,但是内容很多,所以想要以
 web作为主项的小伙伴一定要加倍努力奥。

准备工作

web方向的工具还是很多的,这里推荐几个常用的神器,安装教程和环境配置以后有机会会出几篇,等不及的小伙伴建议百度哦

burp suite

别问,问就是神器,用过的都说好!
(什么?不用burp?我的天哪 真有自断一臂的web选手吗)

burp 是一款web领域的跨平台工具,集成了代理、重放、暴力破解、解码等等多个模块,模块之间共享http消息框架来实现共享信息,大大提高了解web题目的效率。

条件:需要预装java环境
下载地址:get到burp的途径有两种,一种是官网,官网的burp有两种版本,一个社区版一个专业版(pro),pro的功能更加强大当然也需要付费,具体费用是199还是299刀一年来着
另一种方式便是网上找资源(懂得都懂),不过有财力的小伙伴还是建议支持一下正版(反正我穷(狗头))

sqlmap

别问,问就是sql注入神器,用过的都说好!
(这真不是忽悠,曾经精通sqlmap的人在src上仅仅用这个工具挖洞得到了6万奖金)

sqlmap是一款开源的渗透测试工具,可以自动检测并利用sql注入漏洞,配备有十分强大的检测引擎。

条件:预装python环境,官网下载即可
下载地址:官网即可 sqlmap是开源的不会收费 但是网上的其他版本可能会留有后门,保险起见官网下载,地址在下面
链接: link.

关于具体安装与环境配置,网上也有很多教程,不再赘述。

(这里多插一嘴,做sql注入不能过度依赖sqlmap,有一些比较隐蔽的报错、回显注入检测不出来还是需要手动注入的,应当在掌握理论知识的同时结合工具的使用)

kali linux

别问,问就是渗透测试神器,用过的都说好!
(俗话说,kali学得好,牢饭吃得早)
linux系统无论是在操作指令方面还是程序编写方面都有着不俗的效率,因此每位ctfer都应该有一套自己的linux虚拟机,debian,ubuntu都是不错的选择,但是对于web选手而言,我着重推荐kali,因为kali内置了一套十分完整的渗透工具,包括我们先前提到的sqlmap,burp社区版,nmap,wireshark等等,一键集成,方便快捷!

条件:vmware kali镜像文件(.iso)
简单说,vmware是一个提供虚拟机安装测试环境的软件,而镜像文件就相当于你要安装的系统,将镜像文件安装并配置到vm中就得到了一台虚拟机

教程,网上有很多详细的,这里不再多说

web整体框架

web安全方向的题都有哪些类型呢?简单拉个框架介绍一下

  • web
    • sql注入
      • 回显注入
      • 报错注入
      • 盲注
    • xss跨站脚本攻击
      • 反射型
      • 存储型
      • DOM
    • csrf跨站请求伪造
    • 文件相关
      • 文件包含漏洞
      • 文件上传
      • 文件下载
    • php相关
      • php反序列化
      • XXE
      • SSRF
    • 其他
      • 暴力破解
      • url重定向

关于知识的学习平台

菜鸟教程 直接搜索官网
w3school 地址是w3school.com.cn 不要搭理那个什么编程狮

csdn或者baidu 这一点拿出来说是因为很多同学入门的时候某歌用的并不多 依靠最多的就是这两个平台
就很随缘 实话说教程水平高低不一(菜的一批的典型代表:我)尤其是很多安装配置环境的文章的时效性很关键 几年的时间间隔 版本肯定会更迭 举个栗子 现在去装kali 看2017年的教程肯定不行 因为kali已经更新到2020.3了 时间上版本上不适用 而且我很不建议大家为了凑合那篇教程去找一些旧版本的资源 因为ctf一定要学当下的新技术和知识 要看最近的最新版本的教程 这一点对于纯萌新来说很关键 很多很多纯萌新就是在配置环境的时候遇到了自己最大的问题甚至有可能因此放弃 所以文章和教程一定要关注关注时效性 看新版本 起码一年以内的 不要白白在旧东西上浪费时间

一些简单的题目

传参方式与正则表达式

JLUCTF 2020 热身赛 在这里插入图片描述
首先简单看一下代码,得到两个信息,首先s的传入方式是get型,其次这段代码实际上是对pattern与subject进行匹配,匹配成功输出flag。而pattern看格式/^…$ /明显是正则表达式,也就是说当subject符合正则pattern的要求的时候,就会输出flag。
分析一下正则的几个位置:
\s 空白字符
\d 数字
{2,3} 大括号内表示长度,即2位或3位

\ / 这里有一点绕 前面的 \ 表示转义符 简单做一下说明:有些字符比如 / $ 等,在正则中是有实际意义的参数,同时也可以作为字符,如何区分这两者呢?约定在字符前面加上一个转义字符 \ ,以此来表示需要匹配的是字符

所以这个 \ / 的意思是匹配字符 /
[a-z] 任意一个小写字母
(.+) 匹配括号 ()

^ 为开始标志 $ 为结束标志

因此需要在字符串
theflag1之间需要加入 空格 2-3位数字 / 任意字母 / () 并且将位置对应
而get传参的基本方式就是在url后面加 /?id=

因此这道题的payload为 /?s=the flag234/a/()1

重定向

JLUCTF 2020 热身赛
在这里插入图片描述
重定向本质上是网页之间的跳转

hint 说这是一个重定向的题目 打开链接看一下 url最后一级文件目录是index.php 页面中还有一个2.php的入口,一直点击下一个页面中的入口,发现在4.php下,入口的名字是5.php,而我们实际上回到了index.php。

为啥5没了呢 (哦 我知道了 因为5字不行!)

还隔着开团?就摁开!

实际上是从index到4通过页面跳转 回到了index 从而在index与4之间形成了一个闭环,从而将5隐藏起来。所以我们有理由怀疑5.php中有我们想要的flag

这时只要不让网页进行重定向就可以了 我们打开kali 在终端使用curl指令链接到5.php curl默认是不支持重定向的,除非有-L的参数。
curl http://59.72.109.16:33020/5.php

果然,在5.php中得到了flag

robots协议

JLUCTF Spirit2020 web1
robots协议的作用,通俗的说是告诉搜索引擎哪些内容可以在网页上被看见,哪些不可以。而为了避免url对大小写的敏感问题,通常以小写robots.txt的形式呈现,放置在根目录下。

在这里插入图片描述

打开网页一看 输入姓名和密码 好像是sql注入 但是试一下没有注入点 而且第一题的位置上应该是入门题

扫一下目录 结果有robots.txt

(这里再吐槽一波 听dl说dirmap贼好用 然后去下了一波 没想到遇到了各种bug 最后在电脑上装了个git敲了几行命令终于搞定了 搞的我现在也不知道我适合windows还是linux 我去 有机会一定要做一下环境和工具的分享!flag立这儿了!)

在这里插入图片描述

url后面输入robots.txt 在这里插入图片描述

disallow就是个摆设 说不让访问 但是明文都显示出来了
真~君子协议
然后访问this_is_the_hint.txt
在这里插入图片描述
阿这 全是乱码是什么鬼 但是到了这一步千万不要放弃 不然你很可能就错过了一个一血(别问我怎么知道的)
乱码 说明解码方式不对 咋办呢 换一个对的就好了
firefox右上角右键打开菜单栏 然后查看>文字编码>Unicode在这里插入图片描述
这里出题人大佬还细致的讲解了一波(dxk webyyds!)
然后下面给了用户名和密码 返回主界面登录,但是在登录的时候对密码长度有限制,应该是在前端,看一下html
表单里面在这里插入图片描述
最大长度设置了5 改长一点即可在这里插入图片描述

代码审计:hash_hmac()

JLUCTF Spirit2020 web2
先上图
在这里插入图片描述
分别以 get post request方式传入abc
get post不多说,提一嘴request,它包含的是以get post 和cookie方式传入的参数
了解一下hash_hmac()
在这里插入图片描述
放到这个题目里面
第一个函数,algo是sha256,data是a,key是啥不知道
第二个函数,algo还是sha256,data是c,key是上次的结果key

由于第一个函数里的key不知道,以至于这几个变量的值都无法确定,当你随便输入a,b之后,题目提示了一个关键信息 hash_hmac()第二个参数为数组的时候返回值为null,也就是说如果让传入的a为一个数组,让第一个函数计算得到的key即为null,然后再对c和null进行sha256计算即可。
首先get方式构造payload/?a[]=1&c=2
然后在php里面计算出hash_hmac(‘sha256’,2,null)赋给b即可

这里顺带提一嘴,php开发环境的安装和配置属实让我头疼了几个小时,我现在用的是vscode+phpstudy,准备要装phpstorm,vscode和phpstudy具体的配置过程看了一位dl的教程,但是鉴于这位dl的账号只有这一篇博客而且账号已经注销了所以我就不把链接拿过来了,有php环境配置困扰的小伙伴私信我一下吧

在这里插入图片描述
这是配置好的结果 简单说明一下 .php的文件需要放在phpstudy_pro文件夹下的WWW文件夹里面 用vscode编辑.php文件,浏览器输入网址localhost/xxxx.php(xxxx是文件名)就会代码运行在这里插入图片描述
看到结果
这一串就是hash_hmac()的结果,然后将这一串赋给b以post方式提交即可得到flag在这里插入图片描述
结束

ps:想让我写点啥(大概率我不会)或者想一起学习web的小伙伴欢迎私聊戳我奥
-------------------------------------ending-------------------------------------------

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页