bugku web题总结

陆陆续续将bugku的web题刷了一大半,剩下的都是分比较高的难点的题,做题过程中遇到了很多的问题,大部分题就没离开过write up,不过还是学到了很多,因此想做一个总结。

线索收集

拿到一个ctf题的第一步就是收集信息,特别是一些隐藏的提示信息,否则会寸步难行。

常见的信息点

网页文档的DOM信息

网页注释

有些题会在网页注释中给出提示信息,比如给出一部分源码之类的。

表单标签属性

如’计算器’一题就是通过修改input标签的maxlenth属性得到flag。

标签

meta常用于定义页面的说明,关键字,最后修改日期,和其它的元数据。这些元数据将服务于浏览器(如何布局或重载页面),搜索引擎和其它网络服务。
该标签会给出一些信息,某些信息如字符集编码会对做题有帮助。

body标签之外

有时候题目作者会把提示放在body标签和html标签之间,这样提示不会出现在网页页面,需要查看网页源码才能看到。

数据包

信息与提示经常隐藏于数据包的请求头与响应头中,可以使用抓包工具获取信息。

robots.txt

一般网站会有robots.txt来规范爬虫的行为,利用robot.txt可能获取到网站的重要文件所在的位置。

备份文件

某些编辑器在编辑时会生成一些备份文件,如果不写正确处理这些文件,黑客可以利用这些文件还原源码,如:

网站备份压缩
.rar
.zip
.7z
.tar.gz
.bak

php审计(常见漏洞)

is_numeric(mixed $var)

is_numeric(mixed $var) — 检测变量是否为数字或数字字符串
有时候会需要绕过该函数的判断,可以利用科学计数法,如 1==1E+0

strip_tags(string,allow)逻辑错误

strip_tags(string,allow)——函数剥去字符串中的 HTML、XML 以及 PHP 的标签。allow可选。规定允许的标签。这些标签不会被删除.
有些代码会将该函数放在过滤代码之后,那么可以通过在payload中嵌入HTML、XML 以及 PHP 标签的方式绕过之前的过滤代码。

urldecode()逻辑漏洞

同strip_tags(),将该函数放在判断函数之后的话可通过对payload的二次url编码绕过之前的判断函数。

本地包含

eval() 函数把字符串按照 PHP 代码来执行。
var_dump() 打印变量的相关信息
show_source() 函数对文件进行语法高亮显示。
如果以上变量函数可控且未经处理,可执行恶意代码。

$GLOBALS

$GLOBALS:是一个数组,包含了全局作用域中可用的全部变量。变量的名字就是数组的键。
合理利用$GLOBALS全局变量也许可以获得可利用变量信息。常与var_dump()函数连用。

php://伪协议

php://filter伪协议:https://www.cnblogs.com/likai/archive/2010/01/29/1659336.html
利用php://filter伪协议可以进行文件读取

php://input 可以访问原始请求数据中的只读流。

php://伪协议可作为数据流,被使用数据流的函数执行,如file_get_contents()

php弱类型比较

bugku web题总结_第1张图片

ereg()或eregi() 截断漏洞

eregi(string $pattern , string $string [, array &$regs ])
不区分大小写的正则表达式匹配
ereg() 函数或 eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符(%00)则截断丢弃后面的数据。

scandir(‘dir’)

scandir(‘dir’) 返回目标路径的目录数组

md5()函数漏洞 和 md5碰撞

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
常见的payload有:

    QNKCDZO
    240610708
    s878926199a
    s155964671a
    s214587387a
    s214587387a

同时md5()不能处理数组,md5(数组)会返回null。

strcmp()函数漏洞

int strcmp ( string $str1 , string $str2 )
参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 !!!! 也就是虽然报了错,但却判定其相等了。
也就是说我们可以通过输入数组或对象达到绕过判断的目的。

sha1()函数漏洞

sha1()函数无法处理数组类型,将报错并返回NULL

图片隐写总结

以下是关于图片隐写常见套路的总结。

隐藏于图片的基本信息中

该类题通过查看图片基本信息,可以直接获取FLAG,主要方法如下:
1.右键查看图片属性,检查图片简介、备注中是否有FLAG;
2.将图片用编辑器工具打开,如使用记事本、notepad+、winhex,检查是否包含FLAG;

多图层文件

玩CTF的大概都听过一个神器 - stegsolve,用它把图片打开,该软件也有两种用途:
1.一直按右箭头(或者左箭头),说不定就会出来一个二维码 ;
2.提取低位信息,这涉及到图片隐写的一个大类,lsb隐写,一般都藏在0,1,2这些低位里面,在软件功能选项中查看Analyse→Data Extract,逐个调试。

复合文件

CTF比赛中经常碰到png文件中复合其他文件的情况,如就是图片后面再放点压缩包、txt文档、或者再添加一张图片,具体操作方法如下:
copy /b a.jpg+b.zip c.jpg
copy /b a.jpg+b.txt c.jpg
copy /b a.jpg+b.jpg c.jpg
解题思路:通常这类图片比较大,可将图片后缀改为zip或者rar,解压即可。也可以用winhex找图片的开头结尾标志,手动分离出来,也可以使用kali下的工具binwalk或者foremost分出来;
注:比较高级点的图片隐藏图片的话,有的会把第二张图片头给去掉,然后把两张图片合在一起,这样那些提取工具就没用了,这个时候需要稍微细心点,用winhex找第一张图片的尾部,然后把第二张图片的头给加一下,再进行分离操作。

改图片高度

CTF比赛中可利用16进制编辑工具更改图片的高度,使图片只显示一部分,下面的部分被隐藏,嗯,这是个藏东西的好办法!
当以上方法均不可以得到FLAG,且图片长宽比例诡异时,可以尝试改图片大小,下面介绍找图片宽度和高度的标志位的方法:
1.对于png文件,其第二行第六列是高度位,改这一位即可;
2.对于其他格式图片,可以先看看图片的属性,得到宽高值,转成16进制数,搜索该16进制值就能找到标志位了

你可能感兴趣的:(ctf练习)