CTF web个人总结
仅供个人参考
从0开始接触到了CTF,算是入门了,为了方便自己做题,现在记录一下web类型题目的解题思路。
工具
- 中国菜刀
- burpsuite
- 谷歌浏览器或火狐浏览器
- postman(总感觉还是这个用着爽)
- sqlmap
- dirb
- …
解题思路
一、普通思路
- 拿到题目首先查看源代码,在源代码中特别注意js或者css文件中是否透露着某些信息
- 查看meta标签,如type为author的,这个标签表示作者,后面很有可能会用到这些信息
- 查看根目录下是否有robots.txt,建议任何网站,开始做题的时候都先扔到dirb中进行路径爆破
- 注意审题,题目中往往会透露一些关键信息,例如:网站备份,诸如此类,那么建议根据路径搜索相关的www.zip或xxx.bak等备份文件
- 用户认证伪造,注意查看网络数据包,可以通过修改cookie,或者爆破jwt的方式伪造认证
- ip伪造,通常用于页面需要本地或指定ip访问的题目,利用
X-Forwarded-For
、X-Client-IP
、X-Real-IP
、CDN-Src-IP
head头,来伪造访问客户端的ip,前提是服务端利用这两个参数进行用户验证 - git泄露,网站下存在.git且可以访问,用
GitHack
工具,还原代码,查看漏洞
二、注入思路
- 时刻注意项目中是否有可提交的输入框,后者页面参数为
id=1
,诸如此类,建议尝试sql注入,sql注入有很多分类,简单的可以使用sqlmap做基础探测,如果一直半会儿试不出来可以先寻找其他突破口。 - sql注入先使用错误的参数进行页面报错判断,因为有时候也有可能是作为文件包含的参数。
- 使用
'
或者"
进行sql探测,使用--+
或#
(注意转换成%23
,因为#在url中代表hash),如果有报错是最好的。 - 使用一些固定的payload进行尝试,例如:
and 1=2
,and 1='1
或者其他复杂的payload - 使用
extractvalue
报错函数进行注入,如:
?id=1" and extractvalue('~', concat(',', (select f4ag from f1ag limit 2,1)))%23
- 利用时间函数进行判断, 如:
select 1,IF(1=1, sleep(3), 'goodbye'),3
确认可以时间盲注的话,就可以编写脚本进行爆破
-
很多时候再服务端往往会进行字符串过滤,这时候你要根据一定的信息去猜测服务端可能存在的过滤方法,然后筛选出可能可以使用的注入方法,可能存在的情况有:字符串空替换,小写关键字判断,那么关键字就可以写成这样:
selselectect
,sElEct
-
超长字符截断,例如: 题目需要你以admin账号登录,但是系统中已经存在admin账号,此时,你注册一个类似
admin空格*n 1
的账号,利用mysql的截断,成功注册用户名为admin 的账号 -
使用16进制注入,MySQL中会将16进制自动解析成字符串,同时,16进制也可以用于绕过is_numeric。
-
宽字节注入,一般遇到addslashes函数来过滤
'
和"
时,可能会出现宽字节注入,使用%df
来与转义引号的\
进行合并,从而达到闭合输入的目的。 -
group by rollup
语法,试关键字段出现一个null的结果,配合limit获取null值,最后通过与null比较,绕过逻辑判断。
三、文件包含漏洞
- 文件包含漏洞有时候是跟文件上传漏洞同时存在的,在上传的时候注意伪装文件信息,上传小马,然后使用文件包含漏洞执行webshell,可以使用菜刀工具。
- 文件包含漏洞往往可以让你获取页面的源代码,但是php文件会被服务器解析,所以你看不到,这里就要用到php的伪协议,例如:
php://filter/read=convert.base64-encode/resource=xxxx.php
,使用伪协议来讲源码转换成base64后输出,然后用base64解码成源码。 - 当然,在文件包含漏洞中往往也为设置字符串过滤,但是还是有可以利用的函数漏洞,例如:使用
%2570
来替换p
,当代码中判断你的字符串是否包含php时,可以使用这个方法,但是注意,在浏览器中似乎不管用,你可以再bash环境中使用curl测试。 - 如果你上传的文件可以直接覆盖.htaccess文件,那么你可以在.htaccess中声明,以php文件去解析某一些匹配的图片。
AddType application/x-httpd-php .jpg
include
函数,以字符’/‘分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个’/’
例如
include $_REQUEST['file'];
#payload
?file=hint.php?../../../../../../../../ffffllllaaaagggg
file://
协议支持以file://localhost/etc/hosts
的方式访问服务器文件,来绕过file:///
的过滤
四、显示源码类型
- 这个就比较考验你的逻辑思维了,一般吧当前文件的源码放出来给你,让你找漏洞,其中也包括文件包含的漏洞。
- 可利用的php函数的一些特性,比如在做字符串比较的时候,如:
0==$_GET['a']
, 首先带那种过滤了$_GET
,让你无法提交数字,但是根据php的一些特性,你提交字符串时,在判断时会被强转成数字。 - md5利用,一般会判断两个不同输入值的md5值是否相等,这时要利用php的特性,
0e
开头表示科学计数法,让两个MD5值为0e
开头的字符串进行md5比较,我也收藏了相关的博客如下:
https://blog.csdn.net/qq449736038/article/details/80843914 - 反序列化漏洞,通过修改序列化字符串绕过反串行化的漏洞
例如序列化后为:O:4:"Demo":1:{s:10:" Demo file";s:8:"fl4g.php";}
可修改为:O:+4:"Demo":2:{s:10:" Demo file";s:8:"fl4g.php";}
其中+
为了绕过正则/[oc]:\d+:/i
:1:
改为:2:
是为了绕过__wakeup
五、反弹shell
- 在近期的夺旗赛中,有一道题目,通过层层挖掘,找到了一个一句话木马的页面,但是系统禁用了很多执行函数,但是开放了一个叫PCNTL 函数,可以利用这个函数进行脚本执行,利用执行到的反弹shell进行服务器shell执行
五、xss和csrf
会有专门的机器人来跑脚本去出发你的payload,不过没遇到过
六、混合型
此类题目会结合以上的类型进行难度较大的flag挖掘
PS:思路我会不定期整理与更新
转载:https://blog.csdn.net/qq_31343581/article/details/90617140
查看评论