漏洞關鍵字
SQL注入:
select insert update mysql_query mysqli等
文件上傳:
$FILES,type="file"锦援,上傳忽舟,move_upload_file()等
XSS跨站:
print print_r echo sprintf die var_dump var_export等
文件包含:
Include include_once require require_once等
代碼執(zhí)行:
eval assert preg replace call user func call user func array等
命令執(zhí)行:
system exec shell_exec `` passthru pcntl_exec popen proc_open
變量覆蓋:
extract() parse_str() importrequestvariables() $$等
反序列化:
serialize() unserialize() _construct _destruct等
通用關鍵字:
$GET $POST $REQUEST $FILES $SEVER
1. PHP操作數(shù)據(jù)庫函數(shù)
mysqli_connect()
//建立與MySQL數(shù)據(jù)庫的連接
mysqli_connect_errno()
//判斷連接數(shù)據(jù)庫是否成功
mysql_connect_error()
//輸出連接錯誤的錯誤信息
mysql_select_db()
//設置連接的數(shù)據(jù)庫
mysqli_set_charset()
//設置與MySQL數(shù)據(jù)庫傳送數(shù)據(jù)時使用的字符集
mysqli_query()
//執(zhí)行并發(fā)送SQL語句
mysqli_affected_rows()
//獲得前一次操作的所影響的行數(shù)
mysqli_fetch_all()
//從結(jié)果集中取出所有行作為關聯(lián)或索引、混合數(shù)組
mysqli_fetch_assoc()
//從結(jié)果集中取出所有行作為關聯(lián)數(shù)組
mysqli_fetch_row()
//從結(jié)果集中取出所有行作為索引數(shù)組
mysqli_fetch_array()
//從結(jié)果集中取出所有行作為混合數(shù)組
mysqli_insert_id()
//獲得上一次insert操作的id
mysqli_num_rows()
//獲得結(jié)果集中的記錄條數(shù)
mysqli_num_rows()
//獲得結(jié)果集中的記錄條數(shù)
mysqli_close()
//關閉數(shù)據(jù)庫連接
2. HP文件上傳函數(shù)/文件操作函數(shù)
deldot
in_array
intval
strrchr
strtolower
strrpos
str_ireplace
strstr
substr
trim
file_put_contents()
//函數(shù)把一個字符串寫入文件中夯膀。
fputs()
//函數(shù)寫入文件
copy — 拷貝文件
delete — 參見 unlink 或 unset
fflush — 將緩沖內(nèi)容輸出到文件
file_get_contents — 將整個文件讀入一個字符串
file_put_contents — 將一個字符串寫入文件
fputcsv — 將行格式化為 CSV 并寫入文件指針
fputs — fwrite 的別名
fread — 讀取文件(可安全用于二進制文件)
fscanf — 從文件中格式化輸入
fwrite — 寫入文件(可安全用于二進制文件)
move_uploaded_file — 將上傳的文件移動到新位置
readfile — 輸出文件
rename — 重命名一個文件或目錄
rmdir — 刪除目錄
unlink — 刪除文件
3. PHP命令執(zhí)行命令注入函數(shù)
popen()
pcntl_exec()
escapeshellarg — 把字符串轉(zhuǎn)碼為可以在 shell 命令里使用的參數(shù)
escapeshellcmd — shell 元字符轉(zhuǎn)義
exec — 執(zhí)行一個外部程序
passthru — 執(zhí)行外部程序并且顯示原始輸出
proc_close — 關閉由 proc_open 打開的進程并且返回進程退出碼
proc_get_status — 獲取由 proc_open 函數(shù)打開的進程的信息
proc_nice — 修改當前進程的優(yōu)先級
proc_open — 執(zhí)行一個命令茫叭,并且打開用來輸入/輸出的文件指針曹洽。
proc_terminate — 殺除由 proc_open 打開的進程
shell_exec — 通過 shell 環(huán)境執(zhí)行命令抽兆,并且將完整的輸出以字符串的方式返回莲祸。
system — 執(zhí)行外部程序憔狞,并且顯示輸出
4. PHP代碼執(zhí)行函數(shù)
eval()
//eval() 函數(shù)把字符串按照 PHP 代碼來計算蝴悉,如常見的一句話后門程序:<?php eval($_POST[cmd])?
assert()
//與eval類似,字符串被 assert() 當做 PHP 代碼來執(zhí)行
preg_replace()
//preg_replace()函數(shù)原本是執(zhí)行一個正則表達式的搜索和替換瘾敢,但因為存在危險的/e修飾符拍冠,使 preg_replace() 將 replacement 參數(shù)當作 PHP 代碼
create_function()
//create_function主要用來創(chuàng)建匿名函數(shù),如果沒有嚴格對參數(shù)傳遞進行過濾簇抵,攻擊者可以構造特殊字符串傳遞給create_function()執(zhí)行任意命令
array_map()
//array_map() 函數(shù)將用戶自定義函數(shù)作用到數(shù)組中的每個值上庆杜,并返回用戶自定義函數(shù)作用后的帶有新值的數(shù)組。 回調(diào)函數(shù)接受的參數(shù)數(shù)目應該和傳遞給 array_map() 函數(shù)的數(shù)組數(shù)目一致
call_user_func()/call_user_func_array ()
//call_user_func — 把第一個參數(shù)作為回調(diào)函數(shù)調(diào)用,其余參數(shù)是回調(diào)函數(shù)的參數(shù)碟摆。
//call_user_func_array — 調(diào)用回調(diào)函數(shù)晃财,并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)
array_filter()
//array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
//依次將 array 數(shù)組中的每個值傳遞到 callback 函數(shù)。如果 callback 函數(shù)返回 true典蜕,則 array 數(shù)組的當前值會被包含在返回的結(jié)果數(shù)組中断盛。數(shù)組的鍵名保留不變。
usort()愉舔、uasort()
//usort() 通過用戶自定義的比較函數(shù)對數(shù)組進行排序钢猛。
//uasort() 使用用戶自定義的比較函數(shù)對數(shù)組中的值進行排序并保持索引關聯(lián) 。
5. PHP輸出/打印函數(shù)
echo()
print()
printf()
sprintf()
print_r()
var_dump()
die()
6. PHP文件下載
fopen()
//讀取文件
readfile()
file_get_contents()
highlight_file()
7. PHP魔術方法
__construct()//每次創(chuàng)建新對象時先調(diào)用此方法轩缤,所以非常適合在使用對象之前做一些初始化工作
__destruct()//某個對象的所有引用都被刪除或者當對象被顯式銷毀時執(zhí)行
__call() //在對象上下文中調(diào)用不可訪問的方法時觸發(fā)
__callStatic() //在靜態(tài)上下文中調(diào)用不可訪問的方法時觸發(fā)
__get() //用于從不可訪問的屬性讀取數(shù)據(jù)
__set() //用于將數(shù)據(jù)寫入不可訪問的屬性
__isset() //在不可訪問的屬性上調(diào)用isset()或empty()觸發(fā)
__unset() //在不可訪問的屬性上使用unset()時觸發(fā)
__sellp() //使用serialize時觸發(fā)
__wakeup() //使用unserialize時觸發(fā)
__toString() //把類當作字符串使用時觸發(fā)
__invoke() //當腳本嘗試將對象調(diào)用為函數(shù)時觸發(fā)
__set_state()//當調(diào)用 var_export() 導出類時命迈,此靜態(tài)方法會被自動調(diào)用贩绕。
__clone()//當使用 clone 復制一個對象時自動調(diào)用
__debuginfo()//使用 var_dump() 打印對象信息時自動調(diào)用