ctf web个人总结

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。

三、文件包含漏洞

  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. 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. 串行化漏洞,通过修改串行化字符串绕过反串行化的漏洞

五、反弹shell

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

五、xss和csrf

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

六、混合型

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


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

你可能感兴趣的:(php,网络安全)