SQL注入

2021-06-26 09:50:12 字數 2034 閱讀 7231

sql一些簡單注入的整理

對於此文章最好不要複製貼上因為有些符號使用中文的符號例如「;」有的也是英文的。

程式設計師在編寫**的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫查詢**,根據程式返回的結果,獲得某些他想得知的資料,這就是所謂的sqlinjection,即sql注入。

我們在這個位址後面加上單引號』如果返回錯誤則表示有可能存在注入。並且從返回資訊中我們就可以獲得一些資訊、(為什麼。。。。)

而有些程式設計師會把單引號過濾掉那麼這樣就不行了。

所以經典的1=1、1=2測試會更有效  (原因)

用and user>0 語句可以判斷資料可型別。

如果不返回錯誤資訊,那麼可以用此方法:可以從access和sqlserver和區別入手,access和sqlserver都有自己的系統表,比如存放資料庫中所有物件的表,access是在系統表[msysobjects]中,但在web環境下讀該錶會提示「沒有許可權」,sqlserver是在表[sysobjects]中,在web環境下可正常讀取。

在確認可以注入的情況下,使用下面的語句:

分號;在sqlserver中表示隔開前後兩句語句,--表示後面的語句為注釋,所以,這句語句在sqlserver中將被分成兩句執行,先是select出id=1的記錄,然後執行儲存過程xp_cmdshell,這個儲存過程用於呼叫系統命令,於是,用net命令新建了使用者名為name、密碼為password的windows的帳號,接著:

② http:/**.asp?id=1;exec master..xp_cmdshell 「net localgroup nameadministrators/add」--  將新建的帳號name加入管理員組,這樣你已經拿到了系統最高許可權!當然,這種方法只適用於用sa連線資料庫的情況,否則,是沒有許可權呼叫xp_cmdshell的。  

前面有個類似的例子and user>0,

作用是獲取連線使用者名稱,db_name()是另乙個系統變數,返回的是連線的資料庫名。

④ http:/**.asp?id=1;backup database 資料庫名 todisk=』c:\inetpub\wwwroot\1.db』;--

sysobjects是sqlserver的系統表,儲存著所有的表名、檢視、約束及其它物件,xtype=』u』 andstatus>0,表示使用者建立的表名(好吧我沒明白),上面的語句將第乙個表名取出,與0比較大小,讓報錯資訊把表名暴露出來。接著是第二個第三個。。。

⑥ http:/**.asp?id=1 ;;and (select top 1 col_name(object_id(『表名』),1)from sysobjects)>0

從⑤拿到表名後,用object_id(『表名』)獲取表名對應的內部id,col_name(表名id,1)代表該錶的第1個列名,將1換成2,3,4...就可以逐個獲取所猜解表裡面的列名。

繞過限制:

再有過濾敏感字元時可以繞過他如:

where xtype=』u』,字元u對應的ascii碼是85,所以可以用wherextype=char(85)代替;

如果字元是中文的,比如where name=』使用者』,可以用wherename=nchar(29992)+nchar(25143)代替。

有些人會過濾select、update、delete這些關鍵字,但偏偏忘記區分大小寫,所以大家可以用select這樣嘗試一下。

特別注意:位址列的+號傳入程式後解釋為空格,+解釋為+號,%解釋為%號,具體可以參考urlencode的相關介紹。

用get(請求讀取由url所標識的資訊)方法注入時,iis會記錄你所有的提交字串,對post(給伺服器新增資訊)方法做則不記錄,所以能用post的**盡量不用get。

SQL注入(三) sql注入 bugku

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

SQL注入 報錯注入

乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...

SQL注入 報錯注入

sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...