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

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注入漏洞


sqli-labs Less-1:





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次方

02邏輯運(yùn)算


MySql注入語句樣例分析:

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)行爬取

注入識(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"

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)站目錄。



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手工注入方法

提示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


