安基網 首頁 安全 Web安全 查看內容

黑客擅長的sql注入攻擊,你真的懂嗎?

2019-10-18 08:01| 投稿: xiaotiger |來自: 互聯網


免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

摘要: 首先的話,我們來仔細搞清楚這個攻擊的流程,第一步就是了解一下,什么是sql?又什么是sql注入、sql注入的流程和步驟。1、首先什么是sql,Sql是一種數據庫查詢和程序設計的語言,這里的數據庫是指存放網站的一些信息數據,常見的數據庫有:mysql、access、mssql(sql server)、oracle數據庫等等,這些數 ...

首先的話,我們來仔細搞清楚這個攻擊的流程,第一步就是了解一下,什么是sql?又什么是sql注入、sql注入的流程和步驟。

1、首先什么是sql,

Sql是一種數據庫查詢和程序設計的語言,這里的數據庫是指存放網站的一些信息數據,常見的數據庫有:mysql、access、mssql(sql server)、oracle數據庫等等,這些數據庫被大多數的中小型企業使用,專門存放用戶的一些網站信息和數據信息,通過一些sql語言中一些的命令去增加、刪除、改寫、查詢這些數據。這個就是sql。

2、什么是sql注入?

一般來說,黑客通過把惡意的sql語句插入到網站的表單提交或者輸入域名請求的查詢語句,最終達到欺騙網站的服務器執行惡意的sql語句,通過這些sql語句來獲取黑客他們自己想要的一些數據信息和用戶信息,也就是說如果存在sql注入,那么就可以執行sql語句的所有命令

1)sql注入形成的原因

數據庫的屬于與網站的代碼未嚴格分離,當一個黑客提交的參數數據未做充分的檢查和防御的話,那么黑客的就會輸入惡意的sql命令,改變了原有的sql命令的語義,就會把黑客執行的語句帶入到數據庫被執行

2)Sql注入的危害。

這些危害不單單只限于數據庫的用戶信息泄露,通過sql注入也可以惡意的篡改網頁,也可以寫入的網站后門。數據庫服務器被估計,數據庫的系統管理員賬號也會被篡改,服務器被遠程控制,也會破壞硬盤數據、使系統癱瘓。

3、sql注入的流程和步驟

首先的話,上面講到了增加、刪除、改寫、查詢這些數據,簡稱為:增刪改查。

我們先了解一下什么是提交方式:提交方式是為滿足不同的需要,與服務器資源進行交互、訪問等等

我們常見的提交方式就是GET和POST

首先是GET,get提交方式,比如說你要查詢一個數據,那么查詢的代碼就會出現在鏈接當中,可以看見我們id=1,1就是我們搜索的內容,出現了鏈接當中,這種就是get

第二個是Post提交方式是看不見的,需要我們利用工具去看見,我們要用到hackbar這款瀏覽器插件

可以就可以這樣去提交,在這里我搜索了2,那么顯示的數據也就不同,這個就是數據庫的查詢功能,那么的話,get提交比post的提交更具有危害性。

介紹了提交方式,接下來就是我們的sql注入

Sql注入的原理就是客戶端提交的數據和命令被帶入到數據庫被執行,從而被黑客惡意的利用,

首先這里是一個正常的頁面,提交的方式是post,那么我們如何去判斷是否存在sql注入?

判斷sql注入我們就要用到一些判斷語句

And 1=1 and 1=2 or 1=1 or 1=2 xor 1=1 xor 1=2

首先是and 1=1和and 1=2 ,and 1=1在網站id=1的后輸入比較以post方式提交,那么的話返回的頁面是正常,因為and是與的意思,1等于1嗎??1肯定等于1,那么這里返回的頁面是正常的,當然,最重要的是,這里的sql語句被帶入到數據庫被執行,所以可以判定這里存sql注入。

執行了and 1=2之后,頁面出現了報錯,因為1不等于2,所以這里的頁面出現了報錯,什么數據也沒查詢出來,那么我們可以判定我們輸入的語句被帶入到數據庫被執行,所以他這個地方存sql注入

然后就是or 1=1 or 1=2, 到了or 1=2這里,返回的頁面就是正常的,因為前面是真,也就是數據存在的,后面的1=2不成立就是假,所以就是真假為真,真真為假, 假假為真,其實最重要的因素還是sql語句被帶入到數據庫被執行了。

那么我們如何去利用sql注入獲取我們想要的信息?

判定完是否存在sql語句后,我們這里整理出sql注入的步驟,1、判斷是否存在sql注入 2、查詢 怎么查詢有幾個列名?我們就要使用到order by 3、顯示可注入的位置 4、顯示數據庫名、顯示數據庫的某個表名、顯示數據庫的某個表名的某個列名、最后顯示數據。

那我們前面判斷了是否存在sql注入,那么我們就可以用order by 來猜列數

首先輸入order by 4 他這里報錯了,提示我們沒有4個列數

輸入order by 3的話,他這里就返回了正常的頁面,說明列數有3個

知道了列數有3個之后,我們就需要顯示字段位了,也就是可以注入的位置

那么我們執行了and 1=2 union select 1,2,3 就成功顯示了字段位,為什么要前面加了and 1=2?這是因為要讓前面報錯,后面的union select查詢語句才能被執行,最終顯示出了注入攻擊的位置

顯示出了2和3的位置,也就是說2和3是可注入和查詢的位置,那么的話,我們這里要用到機個內置的函數 database()(顯示出當前的數據庫名)、user()(當前用戶名) version()(mysql數據庫版本信息)、@@datadir 讀取數據庫路徑、@@basedirmysql安裝路徑、table_name顯示表名、column_name顯示列名

知道了上面的幾個數據庫函數后,我們前面講到sql注入的步驟,第一步就是獲取當前網站的數據庫名,因為數據庫有很多不同的數據庫和名字。也有很多不同的網站、

顯示當前的數據庫名

我們把2替換成了database()函數,知道了當前網站的數據庫為security,那么我們接下來是猜security的表名。

猜表名的話,我們就需要以下語句

information_schema是mysql自帶的數據庫,點號代表下一級的意思,就查出了一個表名

如果要查當前網站的表名,我們就得加一個where table_schema='數據庫名'

于是就查詢出了當前的數據庫的其中一個表名

那么如果要列出所有的表名,我們這里要用到group_concat()函數,他這個函數代表所有的意思,列出了數據庫中的所有表名,一共有四個

那么問題來了,如果說我們要從中獲取數據,我們應該從哪個表名開始?一方面是從users表名,因為user的中文意思是用戶,那么他這里就有可能存用戶的信息,第二個是admin,admin是后臺的意思,那么的話,我們就可以先從這些表開始去弄列名

首先我們選取了users表名,我們要列出所有的列名的話,我們就需要改一下語句,把table改為column

可以看見我把table改為了column,然后后面用table_name=’表名’指定我們要查詢這個表名中的所有列,于是網站就顯示出了id、username、password三個列名

知道了列名之后,接著就是顯示列名里面的數據,顯示數據就不用那么麻煩了,只要知道列名和用from指定表名,那么頁面就會顯示出用戶的郵箱和賬號密碼了

好,那么這個就是一方面sql注入的基礎。

最后喜歡我文章的朋友請加圈子關注我們,私信關鍵詞:加群。

就會自動分享給你群號。歡迎大家加入我們的安全大家庭。提高大家的安全意識,提升大家的網絡安全技能一直是我們的初衷和愿景,讓我們共同成為守護信息世界的“SaFeMAN”。

還有可以關注我們微信公眾號,在公眾號上輸入安界網,就可以關注到我們。



小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

本文出自:https://www.toutiao.com/a6748663058152817166/

免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


鮮花

握手

雷人

路過

雞蛋

相關閱讀

最新評論

 最新
返回頂部
湖北快3 购买技巧