記一次“有手就行”的從SQL隱碼攻擊到檔案上傳Getshell的簡單過程

蚁景网安实验室發表於2024-06-04

0x01 前臺SQL隱碼攻擊

漏洞原理

SQL 注入漏洞的原理是應用程式沒有對使用者輸入進行充分的驗證和過濾,導致攻擊者可以在輸入框中插入惡意的 SQL 程式碼。當應用程式將使用者輸入的資料拼接到 SQL 查詢語句中時,攻擊者插入的惡意程式碼也會被執行,從而繞過身份驗證和訪問控制,直接訪問或修改資料庫中的資料。

1、查詢注入點。

如果要對一個網站進行SQL隱碼攻擊,首先就需要找到存在SQL隱碼攻擊漏洞的地方,也就是尋找所謂的注入點。可能的SQL隱碼攻擊點一般存在於登入頁面、查詢頁面或新增頁面等使用者可以查詢或修改資料的地方。

互動點一般是搜尋欄、留言版、登入/註冊頁面、以及最利於觀察的搜尋欄的地址如果類似於http//xxxxxx/index.phpid=1這種很大程度存在注入當然有些注入點不會這麼一眼看出會有些比較複雜例如http://xxxxxx/index.phpx=home&c=View&a=index&aid=9 這樣的地址其實也可能存在注入。

如果應用程式未對使用者輸入進行充分的驗證和過濾,就容易受到 SQL [注入攻擊]

根據如上所述先去檢視和資料庫有互動點的地方,一般先去找搜尋框,特別是這種可以查詢年份和編號的地方,和使用者資料互動的可能性最大。

使用Wappalyzer簡單看一下網站的框架和使用的語言

image-20240413191302707

經過檢視找到一處與資料庫有資料互動的搜尋編號的搜尋框

image-20240413215111458

可以直接輸入一個單引號看看有沒有報錯,sql注入加單引號的原因是為了讓sql語句發生錯誤,從而得知其有沒有過濾措施

image-20240413215133470

蕪湖,直接爆SQL語句錯誤。。。

返回前面的搜尋框輸入' and sleep(10)#

image-20240413215334237

還是直接報錯,沒什麼waf防護攔截。

image-20240413215429927

既然你這麼脆弱,我就不客氣了,直接丟sqlmap一把梭。。。。。

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

2、測試

在搜尋框隨便輸入一個簡單的資料,使用yakit工具攔截等一下點選搜尋傳送的資料包。

image-20240414015812784

攔截的資料包:

image-20240414020116680

注入點在mz17Condition.searchCaseId=這個引數,在這個引數後面加上*號,讓等一下使用sqlmap工具測試的時候直接測試這個測試,要不然會從頭開始每一個引數都會測試,浪費時間,把資料包複製到txt檔案裡面。

image-20240414020410134

使用sqlmap工具測試txt檔案裡面的資料sqlmap命令:

--random-agent 隨機使用HTTP使用者代理頭。
--level 分為1-5,預設為1,檢查cookie至少為2,檢查User-Agent等級至少為3,5級包含的payload最多,會自動破解出Cookie、XFF等頭部注入,對應的速度也會比較慢。
--risk 等級為0-3,預設為1,會檢測大部分的測試語句,等級為2時會增加基於事件的測試語句,等級為3會增加or語句的SQL隱碼攻擊測試

sqlmap.py -r .\9.txt --random-agent --level 5 --risk 3

image-20240414020843677

果然直接跑出來了,注入型別有布林和報錯,後端還是IBM DB2資料庫,第一次遇見。。。。

話不多說直接跑庫,看看可以獲取到後臺的密碼sqlmap.py -r .\9.txt --random-agent --level 5 --risk 3 --dbs

image-20240414021324983

只跑出了一個庫,看提示,感覺是當前注入的使用者許可權不夠大sqlmap.py -r .\9.txt --random-agent --level 5 --risk 3 --is-dba

image-20240414021410331

後面跑了一下爆出來的資料庫,裡面沒啥有用的資訊。。。。拿不了shell繼續測試別的地方

0x02 萬能密碼後臺登入

前面的前臺SQL隱碼攻擊沒什麼大用拿不了shell以後,繼續測試別的漏洞,前臺基本沒什麼東西,看向後臺。

1、測試

使用dirsearch工具掃描網站目錄,掃描出網站後臺。

image-20240414193642525image-20240414193542027

訪問後臺url

image-20240414021621094

按照慣例後臺登入必試弱口令admin/123456、admin/12345、admin/admin、admin/admin888、system/123456。。。。都試了一遍沒成功,看見沒驗證碼又不限制登入錯誤次數,直接去跑字典,結果。。。。沒爆出來。。。。

image-20240414021733898

看向使用者註冊,鼓搗了一陣子發現根本就是擺設,填寫資訊點選註冊沒反應,抓包檢視發現根本沒有資料包傳送出去,雞肋。。。。

在一籌莫展的時候,突然想到前臺有SQL隱碼攻擊漏洞,後臺會不會也有呢。。。。

原理

萬能密碼利用的原理就是在後臺登陸頁面沒有對使用者輸入的內容進行驗證,此時程式所用使用者輸入的資料都合法的,所以這個時候無論是合法的管理員還是非法的入侵者所輸入的資料都是被信任的,非法入侵者正是利用這一特點來進行非法登入的。

當我們在這些語句中新增一些引數時,就可以去資料庫中查詢賬號和密碼。

新增引數後,語句差不多是這樣:

select * from user where username='a' or true #' and password='pass'

其中,#在SQL中是註釋符,註釋符後面的內容不起作用。

所以,實際上後臺得到的有效程式碼是這樣的:

select * from user where username='a' or true

其中or true 會使SQL語句恆成立,從而查詢出資料庫中的所有賬號和密碼,從而使我們成功登入。

除了 # 以外, -- 也是SQL中的註釋符,但SQL的語法格式規定--和後面的註釋內容必須間隔一個空格。

所以拼接到語句中大概是這樣的:

select * from user where username='a' or true -- a' and password='pass'

也就是說:a' or true -- a經過SQL的轉化後,結果等價於 a’ or true #。

SQL中規定,非布林型別的資料參與比較運算時,會轉化為布林型別再參與運算。比如 or 1 或者 or 1=1 ,會轉化為布林型別的 true 再參與 or 的比較運算,也就是變成 or true ,同樣能使條件恆成立,從而登入成功

簡單來講就是:a' or 1 # 或者 a' or 1=1 # 等價於 a' or true #。

當我們在登入介面輸入 【萬能密碼】 比如 admin’ # 以後,後端會將我們輸入的引數拼接到SQL中,大概是下面這樣

select * from user where username='admin' #' and password='pass'

由於 # 在SQL中是註釋符,註釋符後面的內容不起作用,所以真正執行的SQL大概是下面這樣

select * from user where username='admin'

SQL只會在資料庫中查詢使用者名稱,而不是同時查詢使用者名稱和密碼,這就意味著,只要使用者名稱正確,就可以登入成功。

繼續測試

使用萬能密碼繼續測試admin' or 1=1--+

image-20240414021854314

點選登入以後會跳轉到這錯誤頁面,好像有戲!

image-20240414022458070

更換一個萬能密碼payload:admin' or 1=1#

image-20240414022729822

蕪湖報錯!!!根據報錯提示嘗試閉合

image-20240414022818568

嘗試萬能密碼閉合能不能直接進入後臺,使用自己收藏的萬能密碼txt去Fuzz使用者名稱

抓取輸入登入框使用者名稱的資料包

image-20240414024625178

這裡使用burp suite工具繼續爆破

image-20240414030120963

加入自己收集的萬能密碼payload,進行測試

image-20240414030246161

蕪湖302跳轉了應該是成功了使用payload測試看看

image-20240414191902541

最終構造萬能密碼payload:admin' or '2'='2#

image-20240414030829604

進入後臺!!!,登入的使用者為管理員使用者!!!

image-20240414112057949

0x03 後臺getshell

1、測試

進了後臺而且還是管理員的賬號,就好辦了,查詢上傳點,結果一番點點點、看看看,在網站資訊維護找到上傳點。

image-20240414112523664

點選新增

image-20240414192039250

填寫好狀態編號和數量

image-20240414112712630

設定主頁新聞圖片的位置選擇檔案

image-20240414112816281

設定一張圖片碼

使用Webshell_Generate生成哥斯拉jsp的webshell

image-20240414113229782

生成名為ceshijsp.jpg的哥斯拉碼

image-20240414113430492

image-20240414113529434

選擇這個cheshijsp.jpg的圖片

image-20240414113736086

使用burp suite工具攔截點選確定時候傳送的資料包,把字尾為jpg改為jsp

image-20240414113835950

修改字尾為jpg以後,傳送修改好的資料包,取消攔截。

image-20240414113921479

因為傳送出去的資料包試沒有回顯回來上傳webshell jsp碼的地址,訪問首頁,新聞動態的第一張圖片就是剛剛上傳的jsp碼,右鍵開啟新的標籤可以看到完整的圖片地址。

image-20240414114223037

得到webshell地址

image-20240414144147934

使用哥斯連線

image-20240414144502875

root最高許可權!!!

image.png

0x04 總結

要多做嘗試不要氣餒。。。。

更多網安技能的線上實操練習,請點選這裡>>

相關文章