เพื่อสร้างรายการนี้ฉันใช้ 2 แหล่ง แรงพยาบาทและหนู ฉันได้เพิ่มบางอย่างของตัวเองลงในมิกซ์และผู้คนในกระทู้นี้ก็ช่วยด้วย
แก้ไข:หลังจากโพสต์รายการนี้ฉันติดต่อผู้ก่อตั้งRIPSและ ณ ตอนนี้เครื่องมือนี้ค้นหารหัส PHP สำหรับการใช้งานทุกฟังก์ชั่นในรายการนี้
การเรียกใช้ฟังก์ชันเหล่านี้ส่วนใหญ่จัดเป็น Sinks เมื่อตัวแปร tainted (เช่น $ _REQUEST) ถูกส่งผ่านไปยังฟังก์ชัน sink คุณจะมีช่องโหว่ โปรแกรมเช่นRATSและRIPSใช้ฟังก์ชัน grep like เพื่อระบุ sink ทั้งหมดในแอปพลิเคชัน ซึ่งหมายความว่าโปรแกรมเมอร์ควรใช้ความระมัดระวังเป็นพิเศษเมื่อใช้งานฟังก์ชั่นเหล่านี้ แต่ถ้ามันถูกแบนซึ่งสิ่งเหล่านั้นถูกแบนคุณก็จะไม่สามารถทำงานได้มากนัก
" พลังอันยิ่งใหญ่มาพร้อมความรับผิดชอบที่ยิ่งใหญ่ "
- สแตนลี
การดำเนินการคำสั่ง
exec - Returns last line of commands output
passthru - Passes commands output directly to the browser
system - Passes commands output directly to the browser and returns last line
shell_exec - Returns commands output
`` (backticks) - Same as shell_exec()
popen - Opens read or write pipe to process of a command
proc_open - Similar to popen() but greater degree of control
pcntl_exec - Executes a program
การเรียกใช้โค้ด PHP
นอกเหนือจากeval
นี้ยังมีวิธีการอื่น ๆ ในการดำเนินการโค้ด PHP: include
/ require
สามารถใช้สำหรับโค้ดจากระยะไกลในรูปแบบของไฟล์ในพื้นที่ ได้แก่และไฟล์ระยะไกลรวมถึงช่องโหว่
eval()
assert() - identical to eval()
preg_replace('/.*/e',...) - /e does an eval() on the match
create_function()
include()
include_once()
require()
require_once()
$_GET['func_name']($_GET['argument']);
$func = new ReflectionFunction($_GET['func_name']); $func->invoke(); or $func->invokeArgs(array());
รายการฟังก์ชันที่ยอมรับการเรียกกลับ
ฟังก์ชั่นเหล่านี้ยอมรับพารามิเตอร์สตริงซึ่งสามารถใช้เรียกฟังก์ชันของตัวเลือกของผู้โจมตีได้ ขึ้นอยู่กับฟังก์ชั่นที่ผู้โจมตีอาจจะมีหรือไม่มีความสามารถในการส่งผ่านพารามิเตอร์ ในกรณีนั้นInformation Disclosure
ฟังก์ชันเช่นphpinfo()
สามารถใช้
Function => Position of callback arguments
'ob_start' => 0,
'array_diff_uassoc' => -1,
'array_diff_ukey' => -1,
'array_filter' => 1,
'array_intersect_uassoc' => -1,
'array_intersect_ukey' => -1,
'array_map' => 0,
'array_reduce' => 1,
'array_udiff_assoc' => -1,
'array_udiff_uassoc' => array(-1, -2),
'array_udiff' => -1,
'array_uintersect_assoc' => -1,
'array_uintersect_uassoc' => array(-1, -2),
'array_uintersect' => -1,
'array_walk_recursive' => 1,
'array_walk' => 1,
'assert_options' => 1,
'uasort' => 1,
'uksort' => 1,
'usort' => 1,
'preg_replace_callback' => 1,
'spl_autoload_register' => 0,
'iterator_apply' => 1,
'call_user_func' => 0,
'call_user_func_array' => 0,
'register_shutdown_function' => 0,
'register_tick_function' => 0,
'set_error_handler' => 0,
'set_exception_handler' => 0,
'session_set_save_handler' => array(0, 1, 2, 3, 4, 5),
'sqlite_create_aggregate' => array(2, 3),
'sqlite_create_function' => 2,
การเปิดเผยข้อมูล
การเรียกใช้ฟังก์ชันเหล่านี้ส่วนใหญ่ไม่ได้รับการซิงค์ แต่อาจเป็นช่องโหว่หากข้อมูลใด ๆ ที่ส่งคืนสามารถดูได้โดยผู้โจมตี หากผู้โจมตีสามารถเห็นphpinfo()
ได้ว่าเป็นช่องโหว่ที่แน่นอน
phpinfo
posix_mkfifo
posix_getlogin
posix_ttyname
getenv
get_current_user
proc_get_status
get_cfg_var
disk_free_space
disk_total_space
diskfreespace
getcwd
getlastmo
getmygid
getmyinode
getmypid
getmyuid
อื่น ๆ
extract - Opens the door for register_globals attacks (see study in scarlet).
parse_str - works like extract if only one argument is given.
putenv
ini_set
mail - has CRLF injection in the 3rd parameter, opens the door for spam.
header - on old systems CRLF injection could be used for xss or other purposes, now it is still a problem if they do a header("location: ..."); and they do not die();. The script keeps executing after a call to header(), and will still print output normally. This is nasty if you are trying to protect an administrative area.
proc_nice
proc_terminate
proc_close
pfsockopen
fsockopen
apache_child_terminate
posix_kill
posix_mkfifo
posix_setpgid
posix_setsid
posix_setuid
ฟังก์ชั่นระบบไฟล์
ตาม RATS ฟังก์ชั่นระบบไฟล์ทั้งหมดใน php น่ารังเกียจ สิ่งเหล่านี้ดูเหมือนจะไม่เป็นประโยชน์ต่อผู้โจมตี คนอื่นมีประโยชน์มากกว่าที่คุณคิด ตัวอย่างเช่นหากallow_url_fopen=On
URL นั้นสามารถใช้เป็นเส้นทางไฟล์ได้ดังนั้นการโทรไปยังcopy($_GET['s'], $_GET['d']);
สามารถใช้เพื่ออัปโหลดสคริปต์ PHP ได้ทุกที่ในระบบ นอกจากนี้หากไซต์มีความเสี่ยงต่อคำขอที่ส่งผ่าน GET ทุกคนของฟังก์ชั่นระบบไฟล์เหล่านั้นสามารถถูกใช้งานในช่องทางและโจมตีไปยังโฮสต์อื่นผ่านเซิร์ฟเวอร์ของคุณ
// open filesystem handler
fopen
tmpfile
bzopen
gzopen
SplFileObject->__construct
// write to filesystem (partially in combination with reading)
chgrp
chmod
chown
copy
file_put_contents
lchgrp
lchown
link
mkdir
move_uploaded_file
rename
rmdir
symlink
tempnam
touch
unlink
imagepng - 2nd parameter is a path.
imagewbmp - 2nd parameter is a path.
image2wbmp - 2nd parameter is a path.
imagejpeg - 2nd parameter is a path.
imagexbm - 2nd parameter is a path.
imagegif - 2nd parameter is a path.
imagegd - 2nd parameter is a path.
imagegd2 - 2nd parameter is a path.
iptcembed
ftp_get
ftp_nb_get
// read from filesystem
file_exists
file_get_contents
file
fileatime
filectime
filegroup
fileinode
filemtime
fileowner
fileperms
filesize
filetype
glob
is_dir
is_executable
is_file
is_link
is_readable
is_uploaded_file
is_writable
is_writeable
linkinfo
lstat
parse_ini_file
pathinfo
readfile
readlink
realpath
stat
gzfile
readgzfile
getimagesize
imagecreatefromgif
imagecreatefromjpeg
imagecreatefrompng
imagecreatefromwbmp
imagecreatefromxbm
imagecreatefromxpm
ftp_put
ftp_nb_put
exif_read_data
read_exif_data
exif_thumbnail
exif_imagetype
hash_file
hash_hmac_file
hash_update_file
md5_file
sha1_file
highlight_file
show_source
php_strip_whitespace
get_meta_tags