第一章:SQL注入基礎(chǔ)

1.1 Web應(yīng)用架構(gòu)分析

現(xiàn)階段web框架

webapp包括:web前端;web應(yīng)用:CMS/OABlog;web開發(fā)框架:Django/Struts2/ThinkPHP;web語言:PHP/JSP/.Net

容器:IIS、Apache、TomCat、Nginx

webapp通過查詢等命令,與數(shù)據(jù)庫交互,將結(jié)果返回到webapp中

1.2 SQLi注入環(huán)境搭建

下載sqli-labs,配置。

1.3 SQL注入原理分析

SQL注入產(chǎn)生的原因:由于B/S模式對(duì)安全的控制能力較弱,開發(fā)人員的水平和經(jīng)驗(yàn)參差不齊,相當(dāng)一部分程序員在編寫代碼時(shí)沒有對(duì)用戶的輸入數(shù)據(jù)或者是頁面中所攜帶的信息進(jìn)行合法性判斷。攻擊者利用這個(gè)機(jī)會(huì)提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,就可以獲得一些數(shù)據(jù)庫信息。

SQL注入是一種將惡意的SQL代碼插入或添加到應(yīng)用(用戶)的輸入?yún)?shù)的攻擊,攻擊者探測(cè)出開發(fā)者編程過程中的漏洞,利用這些漏洞,巧妙地構(gòu)造SQL語句,對(duì)數(shù)據(jù)庫系統(tǒng)的內(nèi)容直接檢索或修改。

靈活的SQL查詢語句+用戶輸入的數(shù)據(jù)帶入了SQL語句=用戶直接操作數(shù)據(jù)庫->SQL注入漏洞

用戶輸入可控,代碼對(duì)用戶進(jìn)行了拼接,帶入SQL語句,產(chǎn)生SQL注入漏洞


使用union聯(lián)合查詢,注意union查詢字段數(shù)要與前面一致。

sqli-labs Less-1:

直接把id參數(shù)拼接到數(shù)據(jù)庫查詢語句中
讓前面id=-1執(zhí)行錯(cuò)誤,則會(huì)執(zhí)行后面的union查詢命令
顯示執(zhí)行的sql命令


1.4 MySQL注入方法邏輯運(yùn)算及常用函數(shù)

01 常用函數(shù)

https://dev.mysql.com/doc/refman/5.7/en/dynindex-function.html

system_user()? 系統(tǒng)函數(shù)名? ? ? ? ? ?user()? ?用戶名

current_user()? ?當(dāng)前用戶名? ? ? ? ? session_user()? ? 連接數(shù)據(jù)庫的用戶名

database()? ?數(shù)據(jù)庫名? ? ? ? ? ? ? ? ? ?versionI()? ?數(shù)據(jù)庫版本

@@datadir? 數(shù)據(jù)庫路近? ? ? ? ? ? ? ?@@basedir? ? 數(shù)據(jù)庫安裝路近

@@version_compile_os? ?操作系統(tǒng)? ?count()? 返回執(zhí)行結(jié)果的數(shù)量

concat()? ?沒有分隔符的連接字符串? ? ?concat_ws()? ? 含有分隔符的連接字符串

load_file()? 讀取本地的文件? ? ? ? ? ? ? into outfile? 寫文件

ascii()? ?  字符串的ASCII代碼值? ? ?ord()? ? ? 返回字符串第一個(gè)字符的ASCII值

mid()? ? ? ? 返回一個(gè)字符串的一部分? ? ? ?substr()? ? 返回7一個(gè)字符串的一部分

length()? ? 返回字符串的長度? ? ? ? ? left()? ? ? 返回字符串左面的幾個(gè)字符

floor()? ? ? 返回小于或等于x的最大整數(shù)? ? rand()?  返回0和1之間的隨機(jī)數(shù)

sleep()  讓此語句運(yùn)行n秒鐘? ? ? ? ? ? ?if()? ? ? ? ? ?> select if (1>2,2,3);? ?->3

strcmp()? ?比較字符串的內(nèi)容

ifnull()? ? ? 假如參數(shù)1不為null,則返回值為參數(shù)1,否則返回值為參數(shù)2

exp()? ? ? ? 返回e的x次方


mysql運(yùn)算符

02邏輯運(yùn)算

萬能密碼

MySql注入語句樣例分析:

updatexml報(bào)錯(cuò)注入 xpath格式不正確則報(bào)錯(cuò)

UPDATEXML (XML_document, XPath_string, new_value);?

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

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

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

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

由于updatexml的第二個(gè)參數(shù)需要Xpath格式的字符串,以~開頭的內(nèi)容不是xml格式的語法,concat()函數(shù)為字符串連接函數(shù)顯然不符合規(guī)則,但是會(huì)將括號(hào)內(nèi)的執(zhí)行結(jié)果以錯(cuò)誤的形式報(bào)出,這樣就可以實(shí)現(xiàn)報(bào)錯(cuò)注入了。

1.5 SQL注入流程

01 尋找SQL注入點(diǎn)

目標(biāo)搜集:

?無特定目標(biāo):? ? inurl:.php?id=

有特定目標(biāo):? ? ?inurl:.php?id=site:target.com

工具爬取 :? ? ? ?spider,對(duì)搜索引擎和目標(biāo)網(wǎng)站的鏈接進(jìn)行爬取

搜索url包含.php?id的網(wǎng)頁

注入識(shí)別:

手工簡單識(shí)別:

'????????????and 1=1 / and 1=2????????????and '1'='1 /and '1'='2????????????and 1 like 1 / and 1 like 2

工具識(shí)別:

sqlmap -m filename(filename中保存檢測(cè)目標(biāo))

sqlmap --crawl(sqlmap對(duì)目標(biāo)網(wǎng)站進(jìn)行爬取,然后依次進(jìn)行測(cè)試)

高級(jí)識(shí)別:

擴(kuò)展識(shí)別廣度和深度:

? ? ? ? ? ? sqlmap --level 增加測(cè)試級(jí)別,對(duì)header中相關(guān)參數(shù)也進(jìn)行測(cè)試

? ? ? ? ? ? sqlmap -r filename(filename中為網(wǎng)站請(qǐng)求數(shù)據(jù))

利用工具提高識(shí)別效率:

? ? ? ? ? ? burpsuite + sqlmap? ? ? ? ? ? burpsuite攔截所有瀏覽器訪問提交的數(shù)據(jù)? ? ? ? burpsuite擴(kuò)展插件,直接調(diào)用sqlmap進(jìn)行測(cè)試

一些Tips:

? ? ? ? ? ? 可以在參數(shù)后鍵入"*"來確定想要測(cè)試的參數(shù);可能出現(xiàn)注入的點(diǎn):新聞、登錄、搜索、留言......;站在開發(fā)的角度去尋找

代碼審計(jì): 搜索關(guān)鍵代碼和函數(shù)(搜素select倒著找或者get,post請(qǐng)求正著找,看看有沒有對(duì)相關(guān)的參數(shù)進(jìn)行過濾和防護(hù));? ? ? ? 梳理業(yè)務(wù)流程

舉個(gè)例子:強(qiáng)網(wǎng)杯WEB"python is the best language"

查看post請(qǐng)求注冊(cè)的信息,有沒有對(duì)提交的表單數(shù)據(jù)進(jìn)行過濾,發(fā)現(xiàn)沒有對(duì)郵箱進(jìn)行過濾,則利用郵箱注冊(cè)進(jìn)行sql注入

http://test.com/register? ? POST:? ? username=test&email=t@t.com' and '1'='1&password=123&password2=123&submit=Register

02 SQL注入流程


sql注入流程:

信息收集(數(shù)據(jù)庫類型[報(bào)錯(cuò)信息,特有語句];數(shù)據(jù)庫版本;數(shù)據(jù)庫用戶;判斷數(shù)據(jù)庫權(quán)限);

數(shù)據(jù)獲取(獲取庫信息[獲取當(dāng)前庫,獲取所有庫];獲取表信息;獲取列信息;獲取數(shù)據(jù));

提權(quán)(根據(jù)數(shù)據(jù)庫權(quán)限分為:1、執(zhí)行系統(tǒng)命令[直接提權(quán)]. 2、讀文件[讀取數(shù)據(jù)庫配置文件,嘗試遠(yuǎn)程連接;讀系統(tǒng)配置文件,搜集信息])。3、寫文件:寫webshell到網(wǎng)站目錄。

access數(shù)據(jù)庫需要暴力破解查詢表信息 select [*] from ...? ? ...換成要查詢的表 admin,user,system等;表查出來了之后猜列,把*換成username,password等。
sqlserver用 xp.cmdshell? ? 用sqlmap可以直接用--os-shell 執(zhí)行系統(tǒng)命令; 中間件如tomcat,讀取配置文件登錄管理界面部署一個(gè)webshell,讀數(shù)據(jù)庫配置文件獲取數(shù)據(jù)庫賬號(hào)和密碼;? ?????????sqlmap --os-shell 寫webshell到網(wǎng)站目錄,然后再執(zhí)行。

1.6 SQL手工注入方法

01 Mysql數(shù)據(jù)庫結(jié)構(gòu)

核心原理:

mysql內(nèi)置的information_schema庫,它功能強(qiáng)大,是我們進(jìn)行mysql注入的基石;? ? ?通過information_schema我們可以窺透整個(gè)mysql的運(yùn)行情況,也可以查看到數(shù)據(jù)庫中所有的數(shù)據(jù)信息。

02Mysql手工注入方法

schemata表包含schema_name(所有數(shù)據(jù)庫名)字段;tables表包含table_name(所有表的表名)字段;columns表包含columns_name(所有字段名)字段。

提示1:所有類型的sql注入,都是基于查庫、表、列語句

提示2:如果數(shù)據(jù)太多,導(dǎo)致無法返回查詢結(jié)果;查詢的場(chǎng)景:可利用limit限定返回的數(shù)量及位置,依次查詢回顯數(shù)據(jù)的場(chǎng)景;*group_concat*鏈接多個(gè)數(shù)據(jù)成為一條返回結(jié)果。例如group_concat(username,0x7e,password)

提示3:在一些場(chǎng)景,想要快速獲取數(shù)據(jù),需借助工具,如:BurpSuite

提權(quán):select load_file('/../../db-creds.inc')讀取配置文件

https://www.cnblogs.com/hackxf/p/8975501.html


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

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

  • 1.何為Sql注入? 所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請(qǐng)求的查詢字符串,最...
    打傘De魚閱讀 1,501評(píng)論 0 7
  • 概述 通過網(wǎng)頁將 SQL 命令注入到 SQL 語句中的技術(shù)。攻擊者可以繞過認(rèn)證,訪問、修改和刪除數(shù)據(jù)庫中的數(shù)據(jù)。在...
    得奕閱讀 1,371評(píng)論 0 0
  • 隨著當(dāng)今世界網(wǎng)絡(luò)技術(shù)與信息技術(shù)高速發(fā)展,Web應(yīng)用程序具有界面統(tǒng)一,使用簡單,易于維護(hù),擴(kuò)展性好,共享度高等優(yōu)先。...
    高美麗閱讀 4,169評(píng)論 0 4
  • [SQL注入攻擊] SQL注入攻擊是黑客對(duì)數(shù)據(jù)庫進(jìn)行攻擊的常用手段之一。隨著B/S模式應(yīng)用開發(fā)的發(fā)展,使用這種模式...
    James黃杰閱讀 2,919評(píng)論 0 30
  • 這是個(gè)筆記,沒自己試過,就是漲姿勢(shì)的。很好的資料:隨筆分類 - sqli-labs通關(guān)詳解[%5Bhttps://...
    yumiii_閱讀 2,780評(píng)論 2 10

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