欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bugku web题总结

程序员文章站 2022-03-25 08:21:12
...

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

线索收集

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

常见的信息点

网页文档的DOM信息

网页注释

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

表单标签属性

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

<meta>标签

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题总结

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进制值就能找到标志位了

相关标签: bugku