1. 程式人生 > 其它 >php程式碼審計基礎學習(一)

php程式碼審計基礎學習(一)

零、參考文章而和書籍

https://www.jianshu.com/p/f69b1f2fcdcf
https://zhuanlan.zhihu.com/p/22417081
https://www.cnblogs.com/murkuo/p/14877153.html
https://zhuanlan.zhihu.com/p/412546799
《程式碼審計 企業級Web程式碼安全架構》

一、學習思路

首先確定自己的定位,先挖掘什麼樣的漏洞。然後判斷是否有無框架,確定網站的執行結構。

二、通過挖漏洞來getshell

可以通過敏感回溯引數,挖掘高危漏洞。通過Seay原始碼審計系統,查詢敏感語句後,在確定該敏感語句所在檔案的作用。然後根據函式來進行全域性搜尋,從而判斷函式的呼叫位置。再判斷引數是否可控和做了過濾,能否繞過,進而確定漏洞是否存在。

三、為了挖掘更多漏洞

可以在sublime全域性正則搜尋$_SERVER|$_COOKIE|$_REQUEST|$_GET|$_POST|$_FILES,正向跟進引數的呼叫邏輯。
再根據功能點,黑盒或白盒審計程式的邏輯漏洞。

四、常用搜索函式tips

1、程式碼執行

eval()
assert()
preg_replace + '/e'
call_user_func()
call_user_func_array()
create_function
array_map()

2、命令執行

system()
passthru()
exec()
pcntl_exec()
shell_exec()
popen()
proc_open()
`(反單引號)
ob_start()
escapeshellcmd() // 該函式用於過濾

3、檔案上傳

move_uploaded_file()
getimagesize() //驗證檔案頭只要為GIF89a,就會返回真

4、檔案包含

include
include_once
require
require_once
遠端檔案包含
allow_url_include = on

5、檔案下載或讀取

show_source
highlite_file
readfile
flie_get_contents
fopen
fread
fgetss
fgets
file
parse_ini_file

6、檔案刪除漏洞

unlink()

7、變數覆蓋漏洞

extract()
parse_str()
mb_parse_str()
$$
全域性變數覆蓋:register_globals為ON,$GLOBALS

8、邏輯漏洞和會話認證

這裡主要判斷程式的邏輯,和關於使用者身份驗證是否在漏洞。

9、二次漏洞審計