欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CTF萌新入坑指南(web篇)

程序员文章站 2022-03-09 16:05:56
...

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重定向

简述具体内容

后续会持续完善

一些例题的思路与知识拓展

后续会持续完善

篇幅实在有限,就不对具体知识进行讲解了,不过尽量把wp写详细一些

get传参与正则表达式

JLUCTF 2020 热身赛 CTF萌新入坑指南(web篇)
首先简单看一下代码,得到两个信息,首先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

知识拓展:

1.get与post 两种传参方式 建议百度或csdn
2.正则表达式 建议看菜鸟教程

重定向

JLUCTF 2020 热身赛
CTF萌新入坑指南(web篇)
重定向本质上是网页之间的跳转

hint 说这是一个重定向的题目 打开链接看一下 url最后一级文件目录是index.php 页面中还有一个2.php的入口,一直点击下一个页面中的入口,发现在4.php下,入口的名字是5.php,而我们实际上回到了index.php。这也就意味着从index到4通过页面跳转 回到了index 从而在index与4之间形成了一个闭环,从而将5隐藏起来。所以我们有理由怀疑5.php中有我们想要的flag

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

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

知识拓展:

  1. linux指令 建议搜索 linux指令集
  2. 重定向 csdn有很多博客 讲的很不错