我期间也考察很多人的,但搞这个的确实有点少,希望这篇可以大家一点帮助,这篇文章也借鉴一些人的文章,还有很多东西,我没搞,确实有点麻烦,但以后还会不断更新的,希望大家在web这里少走一点弯路,还有一些东西我不知道该怎么写,但大家以后肯定会接触的。
这里给大家一些关于CTF的一些平台
新手:
这个吧,还是推荐富哥吧,里面有web入门的题目但是要钱,总体还是不错的。
这个里面题目或许不是很多,但是那个技能树真的可以给大家一个方向,主要推荐那个技能树
这个对于新手也是十分好的,适合新手刷题,大部分题目都直接有wp,而且靶机随便关随便开真的好,额,但是吧就是说是不是网站崩了,可能是创作者在国外的缘故吧。
有些经验的:题目很多,而且有很多比赛
和BUUCTF差不多,但是感觉吧比buu要难
新平台很不错,有很多新题目
目录
基础知识类题目
查看网页源代码
发送HTTP请求
不常见类型的请求发送
HTTP头相关的题目
查看响应头
修改请求头、伪造cookie
备份文件下载
Git源码泄露
svn源码泄露
HG泄露
文件上传和sql注入关于这两个要搞得实在有点多,我就搞个文件,要用搞得都在文件中,放在百度网盘中了链接:文件上传的注意点及绕过&sql注入的一些东西提取码:1234
Js代码
Python爬虫信息处理
PHP代码审计
PHP弱类型hash比较
数组返回NULL绕过
字符串绕过
科学计数法绕过
变量覆盖漏洞
正则表达式相关
ereg正则%00截断
数组绕过
单引号绕过preg_match()正则匹配
不含数字与字母的WebShell
php使用短链接
php读取文件
伪协议
ThinkCMF2.2.x,1.6.0,2.1.0漏洞
命令执行漏洞
assert()函数引起的命令执行
XSS题目
绕过waf
长度限制
双写
等价替代
URL编码绕过
Linux命令使用反斜杠绕过
URL二次解码绕过
数组绕过
SQL注入
使用sqlmap
python 模板注入
ssrf
考察基本的查看网页源代码、HTTP请求、修改页面元素等。
实际做题的时候基本都是和其他更复杂的知识结合起来出现。
还有要记住一些=0的试试可以改成1,因为0是false,1是ture
姿势:恶补基础知识就行
按F12就都看到了,flag一般都在注释里,有时候注释里也会有一条hint或者是对解题有用的信息。
- Bugku web2
- Bugku web3
可以用hackbar,有的也可以写脚本。
- Bugku web基础$_GET
- Bugku web基础$_POST
- Bugku 点击一百万次
举个写脚本的例子(题目是Bugku web基础$_POST):
以前做过一道题考OPTIONS请求
不过如果要发送这类请求,写一个脚本应该就能解决了。
可以使用burpsuite,给请求方式,列如:请求方式那一题需要把GET方式改成CTFHUB,可以用burpsuite改,可以使用
CTFHub 技能树 请求方式
主要是查看和修改HTTP头。
目前做过的Web题目有很大一部分都是与HTTP头相关的,而且这种题目也相当常见,不和其他知识结合的情况下也算是属于基础题的范畴吧。
姿势:不同的类型有不同的利用方法,基本都离不开抓包改包,有些简单的也可以利用浏览器F12的网络标签解决。但是最根本的应对策略,是熟悉一些常见请求头的格式、作用等,这样题目考到的时候就很容易知道要怎样做了。
有时候响应头里会有hint或者题目的关键信息,也有的时候会直接把flag放在响应头里给你,但是直接查看响应头拿flag的题目并不多,因为太简单了。
只是查看的话,可以不用抓包,用F12的“网络”标签就可以解决了。
- Bugku 头等舱
常见的有set-cookie、XFF和Referer,总之考法很灵活,做法比较固定,知道一些常见的请求头再根据题目随机应变就没问题了。
有些题目还需要伪造cookie,根据题目要求做就行了。
可以用BurpSuite抓包,也可以直接在浏览器的F12“网络”标签里改,同样也有一些可以通过
- 实验吧 头有点大
- Bugku 程序员本地网站
- Bugku 管理员系统
- XCTF xff_referer
通常是index.php.swp、.index.php.swp、www.zip、robots.txt之类的
注意看不出来是什么可以放到kali里面试试,例如:vim的缓存文件用vim -r 可以恢复,.DS_Store文件可以用cat命令看看有没有什么文件,好像也有脚本可以修复
flag一般在源码的某个文件里,但也有和其他知识结合、需要进一步利用的情况,比如XCTF社区的mfw这道题。
可以使用dirsearch先扫出来.git
再用Githack, cd Githack
python2 Githack.py 网址/.git
git log那个文件看起来可能是flag,看看他的commit的后面的一串字符串使用
使用:git diff 那一串字符串,如果没有尝试git stash list看看有没有文件,有的话试试git stash apply或者git stash pop
可以看http://t.zoukankan.com/songwufan-p-13866101.html
姿势:GitHack一把梭
注:GitHack需要自己下
- XCTF mfw
flag一般在某个文件中
可以使用dirsearch扫出来.svn
用dvcs-ripper(需要自己下载),cd dvcs-ripper
https://blog.csdn.net/m0_64815693/article/details/rip-svn.pl -u 网址/.svn
因为.svn是隐藏文件夹,要用ls -al看,找到.svn/pristine/df或bf用cat查看文件
可以看https://blog.csdn.net/SinAlone/article/details/118480556
和svn泄露差不多
也是使用dvcs-ripper
用https://blog.csdn.net/m0_64815693/article/details/rip-hg.pl -u 网址/.hg
文件上传和sql注入关于这两个要搞得实在有点多,我就搞个文件,要用搞得都在文件中,放在百度网盘中了
链接:
提取码:1234
- PwnTheBox 2048
这类题目一般都是给一个页面,页面中有算式或者是一些数字,要求在很短的时间内求出结果并提交,如果结果正确就可以返回flag。
因为所给时间一般都很短而且计算比较复杂,所以只能写脚本。这种题目的脚本一般都需要用到requests库和BeautifulSoup库(或者re库(正则表达式)),个人感觉使用BeautifulSoup简单一些。
姿势:requests库和BeautifulSoup库熟练掌握后,再多做几道题或者写几个爬虫的项目,一般这类题目就没有什么问题了。主要还是对BeautifulSoup的熟练掌握,另外还需要一点点web前端(HTML)的知识。
- Bugku 秋名山老司机
- 实验吧 速度爆破
HGAME2019的部分题目似乎还出现了反爬虫措施。
代码审计覆盖面特别广,分类也很多,而且几乎什么样的比赛都会有,算是比较重要的题目类型之一吧。
姿势:具体问题具体分析,归根结底还是要熟练掌握PHP这门语言,了解一些常见的会造成漏洞的函数及利用方法等。
PHP弱类型hash比较
这是代码审计最基础的题目了,也比较常见。
典型代码:
加密函数也有可能是sha1或者其他的,但是原理都是不变的。
这个漏洞的原理如下:
== 在进行比较的时候,会先将两边的变量类型转化成相同的,再进行比较。
0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。
所以只要让a和b在经过相应的函数加密之后都是以0e开头就可以。
以下是一些md5加密后开头为0e的字符串:
还有一个十分特殊的字符串
0e215962017它MD5以后还0e开头
还有一个字符串使用另个一个地方和sql有关ffifdyop
md5(ffifdyop,32) = 276f722736c95d99e921722cf9ed621c 转成字符串为'or'6�]��!r,��b
可以利用这个越过一些登入
数组返回NULL绕过
PHP绝大多数函数无法处理数组,向md5函数传入数组类型的参数会使md5()函数返回NULL(转换后为False),进而绕过某些限制。
如果上面的代码变成:
那么利用弱类型hash比较缺陷将无法绕过,这时可以使用数组绕过。
传入?a[]=1&b[]=2就可以成功绕过判断。
这样的方法也可以用来绕过sha1()等hash加密函数相关的判断,也可以绕过正则判断,可以根据具体情况来灵活运用。
举例
如果检查passwd传进来的值是只是数字或字母,就输出3,是字符串则进入下一个,又因为passwd要等于123456,但是两个等号是弱比较,所以传进去123456a就行了
遇到这种(strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)类似的
可以用1e9之类的来绕过这是用科学计数法来搞
ereg正则%00截断
ereg函数存在NULL截断漏洞,使用NULL可以截断过滤,所以可以使用%00截断正则匹配。
- Bugku ereg正则%00截断
数组绕过
正则表达式相关的函数也可以使用数组绕过过滤,绕过方法详见数组返回NULL绕过。
上面那道题也可以用数组绕过。
在每一个字符前加上单引号可以绕过preg_match的匹配,原理暂时不明。
例如有如下代码:
payload:p='Z'm'x'h'Z'y'5'w'a'H'A'=
不含数字与字母的WebShell
如果题目使用过滤掉了所有的数字和字母,但是没有过滤PHP的变量符号,可以考虑使用这种方法。
典型代码:
这种方法的核心是。
爆破脚本:
根据题目的要求,用异或出来的字符串拼出合适的Payload,并放在PHP变量中执行。变量名可以用中文。
php使用短链接
题目使用过滤掉了所有的数字和字母,过滤了PHP的变量符号,可以考虑使用这种方法。
示例代码:
必须是linux环境,因为要靠通配符
*可以代替0个及以上任意字符
?可以代表1个任意字符
列如:/tmp/php就可以表示为绕过对空格的限制;XSS题目如果过滤了<script>标签,可以使用其他类型的payload;如果需要使用cat命令却被过滤,可以使用、nl命令来替代等。
php空格被过滤了,可以使用之类的代替
- 实验吧 简单的SQL注入
如果过滤了某个必须要用的字符串,输入的内容是以GET方式获取的(也就是直接在地址栏中输入),可以采用url编码绕过的方式。比如,过滤了 ,可以使用 来绕过。
在Linux下,命令中加入反斜杠与原命令完全等价。例如,与 两条命令等价,效果完全相同。
可以利用这个特性来进行一些绕过操作(当然,这个仅限于命令执行漏洞)。
这个类型本来应该放在代码审计里面,但是既然是一种绕过过滤的姿势,就写在这里了。
如果源码中出现了函数,可以利用url二次解码来绕过。
以下是一些常用的HTML URL编码:
- Bugku urldecode二次编码绕过
详见PHP代码审计的“数组返回NULL”绕过。
数组绕过的应用很广,很多题目都可以用数组绕过。
SQL注入是一种灵活而复杂的攻击方式,归根结底还是考察对SQL语言的了解和根据输入不同数据网页的反应对后台语句的判断,当然也有sqlmap这样的自动化工具可以使用。
姿势:如果不用sqlmap或者是用不了,就一定要把SQL语言弄明白,sqlmap这样的自动化工具也可以使用。
sqlmap的应用范围还不大明确,我都是如果sqlmap没法注入就手工注入。
我写的一篇简单的sqlmap教程:https://www.jianshu.com/p/4509bdf5e3d0
攻防世界 Web_python_template_injection
几个魔术方法 可以了解一下
class 返回类型所属的对象
mro 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
base 返回该对象所继承的基类 // __base__和__mro__都是用来寻找基类的
subclasses 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
init 类的初始化方法
globals 对包含函数全局变量的字典的引用
使用到的协议file、dict、gopher协议
file协议使用:file:///etc/passwd (读取文件)
dict协议使用: dict://serverip:port//命令:参数
gopher协议使用:gopher://IP:port/_TCP/IP (列如:gopher://127.0.0.1:80/_POST)
gopher协议发送post请求:
与get传参区别为:post有四个必要参数Content-Type,Content-Length,host,post的参数注:其中Content-Length 要与post的长度相同
关于gopher协议给大家推荐一个工具 Gopherus-master
防护绕过
使用正则表达式的方式对SSRF中的请求地址进行过滤,具体表现如下:
1.限制请求特定域名;
2. 禁止请求内网IP。
然而这两种过滤都很容易被绕过,可用的方法具体如下:
1)使用http://example.com@evil.com (可针对限制了网址的题)
简单说的话,@表示如果这个被执行,,就扔掉前面了,相当于访问evil.com
2)IP地址转化为进制(八进制,十进制,十六进制)及 IP 地址省略写法,举例说明如下:
1. 0177.0.0.1 (八进制)
2. 2130706433 (十进制)
3. 0x7f.0x0.0x0.0x1 (十六进制)
4. 127.1 (IP地址省略写法)
3)特殊模式绕过
1. http://127.1/flag.php
2. http://0/flag.php
3. http://127.00000000.00.1/flag.php
4)0.0.0.0 &127.127.127.127绕过
1. http://127.27.127.127/flag.php
2. http://0.0.0.0/flag.php
5)配置域名。如果我们手中有可控域名,则可以将域名A记录指向欲请求的 IP 进行绕过操作:evil.example.com => 10.0.18.3
6) 利用[::] .
http://[::]:80/ =>http://127.0.0.1
DNS重绑定可以使用:https://lock.cmpxchg8b.com/rebinder.html?tdsourcetag=s_pctim_aiomsg
这两个应该是你们接触的十分多的两个工具
burpsuite的下载包放在这里大家自己使用百度网盘下载领取
链接: https://pan.baidu.com/s/1LTzCR2ShkaWHBhcB0WPwQw?pwd=4567 提取码: 4567
注:使用burpsuite需要下载java
我还给大家附带了burpsuite的证书,不然有些网站的包就抓不了,还会让自己变得很麻烦
证书的使用方法这里给大家讲一下
首先使用代理127.0.0.10:8080,先打开burpsuite,设置代理,然后访问http://burp,点击右上角下载然后就可以获得自己的证书
点开将证书导入进去
至于burpsuite的使用方法就别问我了。。。。。。。
现在是HackBer
为什么推荐Hackber,新手都有一个问题就是对于GET和POST的方法不怎么会使用
Hackber不仅可以更方便的使用,还有很多我们常用的加密方式,还能直接对包进行修改
这里推荐大家使用火狐浏览器,因为他的插件里面就有Hackber可以直接下载