飞道的博客

ctf web个人总结

452人阅读  评论(0)

CTF web个人总结

仅供个人参考

从0开始接触到了CTF,算是入门了,为了方便自己做题,现在记录一下web类型题目的解题思路。

工具

  1. 中国菜刀
  2. burpsuite
  3. 谷歌浏览器或火狐浏览器
  4. postman(总感觉还是这个用着爽)
  5. sqlmap
  6. dirb

解题思路

一、普通思路

  1. 拿到题目首先查看源代码,在源代码中特别注意js或者css文件中是否透露着某些信息
  2. 查看meta标签,如type为author的,这个标签表示作者,后面很有可能会用到这些信息
  3. 查看根目录下是否有robots.txt,建议任何网站,开始做题的时候都先扔到dirb中进行路径爆破
  4. 注意审题,题目中往往会透露一些关键信息,例如:网站备份,诸如此类,那么建议根据路径搜索相关的www.zip或xxx.bak等备份文件
  5. 用户认证伪造,注意查看网络数据包,可以通过修改cookie,或者爆破jwt的方式伪造认证
  6. ip伪造,通常用于页面需要本地或指定ip访问的题目,利用X-Forwarded-ForX-Client-IPX-Real-IPCDN-Src-IPhead头,来伪造访问客户端的ip,前提是服务端利用这两个参数进行用户验证
  7. git泄露,网站下存在.git且可以访问,用GitHack工具,还原代码,查看漏洞

二、注入思路

  1. 时刻注意项目中是否有可提交的输入框,后者页面参数为id=1,诸如此类,建议尝试sql注入,sql注入有很多分类,简单的可以使用sqlmap做基础探测,如果一直半会儿试不出来可以先寻找其他突破口。
  2. sql注入先使用错误的参数进行页面报错判断,因为有时候也有可能是作为文件包含的参数。
  3. 使用'或者"进行sql探测,使用--+#(注意转换成%23,因为#在url中代表hash),如果有报错是最好的。
  4. 使用一些固定的payload进行尝试,例如:and 1=2,and 1='1或者其他复杂的payload
  5. 使用extractvalue报错函数进行注入,如:
?id=1" and extractvalue('~', concat(',', (select f4ag from f1ag limit 2,1)))%23
  1. 利用时间函数进行判断, 如:
select 1,IF(1=1, sleep(3), 'goodbye'),3

确认可以时间盲注的话,就可以编写脚本进行爆破

  1. 很多时候再服务端往往会进行字符串过滤,这时候你要根据一定的信息去猜测服务端可能存在的过滤方法,然后筛选出可能可以使用的注入方法,可能存在的情况有:字符串空替换,小写关键字判断,那么关键字就可以写成这样:selselectect, sElEct

  2. 超长字符截断,例如: 题目需要你以admin账号登录,但是系统中已经存在admin账号,此时,你注册一个类似admin空格*n 1的账号,利用mysql的截断,成功注册用户名为admin 的账号

  3. 使用16进制注入,MySQL中会将16进制自动解析成字符串,同时,16进制也可以用于绕过is_numeric。

  4. 宽字节注入,一般遇到addslashes函数来过滤'"时,可能会出现宽字节注入,使用%df来与转义引号的\进行合并,从而达到闭合输入的目的。

  5. group by rollup语法,试关键字段出现一个null的结果,配合limit获取null值,最后通过与null比较,绕过逻辑判断。

三、文件包含漏洞

  1. 文件包含漏洞有时候是跟文件上传漏洞同时存在的,在上传的时候注意伪装文件信息,上传小马,然后使用文件包含漏洞执行webshell,可以使用菜刀工具。
  2. 文件包含漏洞往往可以让你获取页面的源代码,但是php文件会被服务器解析,所以你看不到,这里就要用到php的伪协议,例如:php://filter/read=convert.base64-encode/resource=xxxx.php,使用伪协议来讲源码转换成base64后输出,然后用base64解码成源码。
  3. 当然,在文件包含漏洞中往往也为设置字符串过滤,但是还是有可以利用的函数漏洞,例如:使用%2570来替换p,当代码中判断你的字符串是否包含php时,可以使用这个方法,但是注意,在浏览器中似乎不管用,你可以再bash环境中使用curl测试。
  4. 如果你上传的文件可以直接覆盖.htaccess文件,那么你可以在.htaccess中声明,以php文件去解析某一些匹配的图片。
AddType   application/x-httpd-php     .jpg
  1. include函数,以字符’/‘分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个’/’
    例如
include $_REQUEST['file'];
#payload
?file=hint.php?../../../../../../../../ffffllllaaaagggg
  1. file://协议支持以file://localhost/etc/hosts的方式访问服务器文件,来绕过file:///的过滤

四、显示源码类型

  1. 这个就比较考验你的逻辑思维了,一般吧当前文件的源码放出来给你,让你找漏洞,其中也包括文件包含的漏洞。
  2. 可利用的php函数的一些特性,比如在做字符串比较的时候,如:0==$_GET['a'], 首先带那种过滤了$_GET,让你无法提交数字,但是根据php的一些特性,你提交字符串时,在判断时会被强转成数字。
  3. md5利用,一般会判断两个不同输入值的md5值是否相等,这时要利用php的特性,0e开头表示科学计数法,让两个MD5值为0e开头的字符串进行md5比较,我也收藏了相关的博客如下:
    https://blog.csdn.net/qq449736038/article/details/80843914
  4. 反序列化漏洞,通过修改序列化字符串绕过反串行化的漏洞
    例如序列化后为: 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

  1. 在近期的夺旗赛中,有一道题目,通过层层挖掘,找到了一个一句话木马的页面,但是系统禁用了很多执行函数,但是开放了一个叫PCNTL 函数,可以利用这个函数进行脚本执行,利用执行到的反弹shell进行服务器shell执行

五、xss和csrf

会有专门的机器人来跑脚本去出发你的payload,不过没遇到过

六、混合型

此类题目会结合以上的类型进行难度较大的flag挖掘


PS:思路我会不定期整理与更新


转载:https://blog.csdn.net/qq_31343581/article/details/90617140
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场