<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 其他注入方法 都是面對php代碼或配置,對輸入的單引號進行轉義時,在處理用戶輸入數據時存在問題,可以繞過轉義 ## 寬字節注入 dbk處理編碼的過程存在問題,可以構造數據消滅轉義符`\` ### 寬字節注入原理 在對單雙引號進行了轉義過濾的情況下,前面的注入方式都不好使,但可以在引號前加上`%df`再進行sql注入嘗試 它的原理是 1. `\'`編碼后的值為`%5C%27` 2. 使用GBK編碼數據庫時,兩個字符為一個漢字 2. ASCII碼只有128個,大于128的,就會和第二個字符組成一個漢字 3. 使用`%df\'`,編碼后為`%df%5C%27` 第一個碼大于128,因此會使用前兩個字符`運`,最后單剩一個引號 即編碼后的值為`運'` 4. 然后就可以正常進行sql注入了 ### 寬字節注入方法 黑盒測試的話:在可能的注入點后,鍵入`%df'`后,進行測試 白合測試的話: 1. 查看mysql編碼是否為GBK 2. 是否使用`preg_replace`轉換單引號為`\'` 3. 是否使用addslashes進行轉義 4. 是否使用mysql_real_escape_string進行轉義 ### 寬字節注入防范 1. 使用utf-8,可以避免寬字節注入 不僅在gbk中,韓文、日文等都是寬字節 2. 使用`mysql_real_escape_string`方法轉義 需同時設置`mysql_set_charset('gbk',$conn)` 3. 可以設置mysql連接參數:`character_set_clinet=binary` ## 二次編碼注入 php代碼中用了urldecode()等編碼函數,對url中的特殊字符進行編碼,可以利用此函數與php自身編碼轉換,產生漏洞 ### 二次編碼注入原理 1. 用戶輸入`id=1%27`,會被php轉碼為`id=1'` 2. 轉義代碼發現有單引號,轉義為`id=1\'`,無法sql注入 3. 用戶輸入`id=1%2527`,由于%25轉碼后就是%,因而會轉碼為`id=1%27` 4. 轉義代碼沒有發現單引號,故不轉義 5. 但后續urldecode等函數,處理url時,會將`id=1%27`轉碼為`id=1'`,就可以注入 注意:如果做白盒測試,要看urldecode函數 是否在轉義方法之后 ## 二次注入 ### 二次注入原理 1. 插入惡意數據 有些程序在進行數據庫插入的時候,僅僅對特殊字符進行了轉義,但仍然將數據寫入了數據庫,如果插入的數據包含惡意內容的話 2. 引用惡意數據 在插入到數據庫中后,在另外的地方查詢該數據的時候,如果沒有對取出的數據做校驗處理(即認為可信),直接使用該數據,就會造成sql二次注入 ### 二次注入舉例 舉例1如下: 1. 新建用戶`admin'#`,有特殊字符,但寫入成功,并能使用該用戶登錄 2. 正常修改用戶密碼時 sql語句如是:`update user set password='1234' where username='x' and psssword='xx'` 3. 但當用戶為`admin'#`時 sql語句變為:`update user set password='1234' where username='admin'#' and xxxxx` 明顯井號后的語句都被注釋掉了 4. 結果就是會修改掉原有用戶admin的密碼 舉例2如下: 1. 有兩個頁面,一個頁面寫入數據,另一個頁面可以有辦法查看該數據 2. 如果寫入時,寫入了`xx' union select 1,database(),3` 3. 如果存在sql注入漏洞,寫入的數據應該為`1,庫名,3` 4. 在另一個頁面就可以看到該庫名數據 ### 二次注入防御 1. 對外部提交的數,需要更加謹慎處理,特殊字符不寫入 2. 程序內部的數據調用,也要進行嚴格檢查,不要認為可信
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看