PHP代碼審計---基礎學習(二)

0x07 PHP代碼審計CSRF跨站請求僞造
 
CSRF結合XSS殺傷力能夠很大
 
審計CSRF:敏感表單是否使用token驗證
 
利用:用BURP生成csrf的POc
xsrf:就是把poc插到xss裏面,當點擊就會觸發
 
  防護策略:
1.驗證HTTP Referer字段(但能夠繞過)
2.在請求地址中添加token並驗證。
3.在htttp頭中自定義屬性並驗證。
 
 
 
 
0x08 代碼審計動態函數執行與匿名函數執行
1、動態與函數執行:
函數與 函數之間的調用,可能會形成的漏洞。
不過這個漏洞利用起來很麻煩,須要結合其餘漏洞,並且還要閉合
 
 
 
2、匿名函數執行:
匿名函數(anonymous functions),也叫閉包函數(closures),容許臨時建立一個沒有指定名稱的函數。最常常用做回調函數(callback參數的值)。
 
create_function :建立匿名函數
 
 
 
0x09 代碼審計之unserialize反序列化漏洞
須要知足的條件:
1.unserialize函數的參數可控
2.腳本中存在一個構造函數、析構函數、__wakeup( )函數中,有類(通常存在類中)
3.對象中成員變量的值
 
反序列化的變量會覆蓋類中變量的值
 
二次漏洞利用,unserialize須要結合其餘漏洞進行利用,列子結合用eval任意代碼執行
這是序列化過的內容(O:4:"demo":1:{s:4:"test";s:10:"phpinfo();";})
 
 
 
 
0x10 代碼審計變量覆蓋漏洞
 
變量覆蓋漏洞產生的緣由有兩種:
 
第一種:register_globals爲on的狀況,php4默認開啓,php5之後默認關閉。
 
 
當register_globals爲on是不能進行賦值的,反之爲yes的時候能夠賦值
當register_globals爲yes的時候也能夠這樣賦值
若是是這樣也是能夠覆蓋的,若是沒有初始化也能夠進行賦值
 
第二種:人爲註冊成爲全局變量。
 
 
 
0x11 代碼審計文件管理漏洞
php的用於文件管理的函數,若是輸入變量可由用戶提交,程序中也沒有作數據驗證,可能成爲高危漏洞。
 
常見函數:copy、rmdir、unlink、delete、fwrite、chomod、fgetc、fgetcsv、fgets、fgetss、file、file_get_contenst、fread、readfile、ftruncate、file_put_contents、fputcsv、fputs、fopen
(以上函數通常都是 "增、刪、改、寫" 文件的功能)
 
 
unlink:刪除文件,能夠跨目錄刪除文件
file_get_contents:查看文件(常見)。須要在瀏覽器點擊查看源碼便可查看源文件
 
readfile:會輸出文件的長度。
 
file_put_contents:寫入文件。
copy:拷貝文件
 
 
fwrite常常會和fopen搭配來用的
fopen:
 
 
0x12 代碼審計文件上傳漏洞
審計函數:move_uploaded_file
超全局變量$_FILES
 
 
 
 防護:
1:使用白名單機制檢測文件後綴
2:上傳以後按時間和算法生成文件名稱
3:上傳目錄腳本文件不可執行
4:注意%00截斷
5:Content—Type 驗證
 
 
 
 
 
0x13 漏洞挖掘的思路
 
程序的兩大根本:變量 與函數
漏洞造成的條件:
一:能夠控制的變量(一切輸入都是有害的)
二:變量到達有利用價值的函數(危險函數)
 
漏洞形成的效果:
漏洞的利用效果取決於最終函數的功能
變量進入什麼樣的函數就致使什麼樣的結果
 
危險函數:
什麼樣的函數會致使什麼樣的漏洞
 
文件包含:包含漏洞
代碼執行:執行任意代碼漏洞
命令執行:執行任意命令漏洞
文件系統操做:文件(目錄)讀寫刪等漏洞
數據庫操做:SQL注入漏洞
數據顯示:xss等客戶端和服務端漏洞
......
 
代碼審計的本質:
找漏洞等於找對應變量和函數
 
變量跟蹤的過程:
經過變量找函數(正向跟蹤)
經過函數找變量(逆向跟蹤)
相關文章
相關標籤/搜索