nessus源碼
⑴ 網路安全去應該去哪裡學習呢。
只要想學習哪裡學習都是有效果的。但需要結合自身的一些特點來調整學習方向,這樣學習起來會事半功倍,以下推薦3種學習線路,適用於不同的學習人群;
方法1:先學習編程,然後學習Web滲透及工具使用等
適用人群:有一定的代碼基礎的小夥伴
(1)基礎部分
基礎部分需要學習以下內容:
(1.1)計算機網路 :
重點學習OSI、TCP/IP模型,網路協議,網路設備工作原理等內容,其他內容快速通讀;
【推薦書籍】《網路是怎樣連接的_戶根勤》一書,簡明扼要,淺顯易懂,初學者的福音;如果覺得不夠專業,可以學習圖靈設計叢書的《HTTP權威指南》;
(1.2)linux系統及命令 :
由於目前市面上的Web伺服器7成都是運行在Linux系統之上,如果要學習滲透Web系統,最起碼還是要對linux系統非常熟悉,常見的操作命令需要學會;
學習建議:學習常見的10%左右的命令適用於90%的工作場景,和office軟體一樣,掌握最常用的10%的功能,基本日常使用沒什麼問題,遇到不會的,再去找相關資料;常見的linux命令也就50-60個,很多小白囫圇吞棗什麼命令都學,這樣其實根本記不住。
【推薦書籍】Linux Basics for Hackers;
(1.3)Web框架 :
熟悉web框架的內容,前端HTML,JS等腳本語言了解即可,後端php語言重點學習,切記不要按照開發的思路去學習語言,php最低要求會讀懂代碼即可,當然會寫最好,但不是開發,但不是開發,但不是開發,重要的事情說三遍;
資料庫:
需要學習sql語法,利用常見的資料庫MySQL學習對應的資料庫語法,也是一樣,SQL的一些些高級語法可以了解,如果沒有時間完全不學也不影響後續學習,畢竟大家不是做資料庫分析師,不需要學太深;
(2)Web安全
(2.1)Web滲透
掌握OWASP排名靠前的10餘種常見的Web漏洞的原理、利用、防禦等知識點,然後配以一定的靶場練習即可;有的小白可能會問,去哪裡找資料,建議可以直接買一本較為權威的書籍,配合一些網上的免費視頻系統學習,然後利用開源的靶場輔助練習即可;
【推薦書籍】白帽子講Web安全(阿里白帽子黑客大神道哥作品)
【推薦靶場】常見的靶場都可以上github平台搜索,推薦以下靶場DVWA、bWAPP、upload-labs-master、SQL-lib-master、WebBug、pikachu等,有些是綜合靶場,有些是專門針對某款漏洞的靶場;
(2.2)工具學習
Web滲透階段還是需要掌握一些必要的工具,工具的學習b站上的視頻比較多,挑選一些講解得不錯的視頻看看,不要一個工具看很多視頻,大多數視頻是重復的,且很浪費時間;
主要要掌握的工具和平台:burp、AWVS、Appscan、Nessus、sqlmap、nmap、shodan、fofa、代理工具ssrs、hydra、mesa、airspoof等,以上工具的練習完全可以利用上面的開源靶場去練習,足夠了;
練習差不多了,可以去SRC平台滲透真實的站點,看看是否有突破,如果涉及到需要繞過WAF的,需要針對繞WAF專門去學習,姿勢也不是特別多,系統性學習學習,然後多總結經驗,更上一層樓;
(2.2)自動化滲透
自動化滲透需要掌握一門語言,且需要熟練運用,可以是任何一門自己已經掌握得很熟悉的語言,都可以,如果沒有一門掌握很好的,那我推薦學習python,最主要原因是學起來簡單,模塊也比較多,寫一些腳本和工具非常方便;
雖說不懂自動化滲透不影響入門和就業,但是會影響職業的發展,學習python不需要掌握很多不需要的模塊,也不需要開發成千上萬行的代碼,僅利用它編寫一些工具和腳本,少則10幾行代碼,多則1-200行代碼,一般代碼量相對開發人員已經少得不能再少了,例如一個精簡的域名爬蟲代碼核心代碼就1-20行而已;
幾天時間學習一下python的語法,有代碼基礎的,最快可能一天就可以學習完python的語法,因為語言都是相通的,但是學習語言最快的就是寫代碼,別無他法;接下來可以開始嘗試寫一些常見的工具,如爬蟲、埠探測、數據包核心內容提取、內網活躍主機掃描等,此類代碼網上一搜一大把;然後再寫一些POC和EXP腳本,以靶場為練習即可;有的小夥伴可能又要問了,什麼是POC和EXP,自己網路去,養成動手的好習慣啦;
(2.3)代碼審計
此處內容要求代碼能力比較高,因此如果代碼能力較弱,可以先跳過此部分的學習,不影響滲透道路上的學習和發展。
但是如果希望在Web滲透上需要走得再遠一些,需要精通一門後台開發語言,推薦php,因為後台採用php開發的網站占據最大,當然你還精通python、asp、java等語言,那恭喜你,你已經具備很好的基礎了;
代碼審計顧名思義,審計別人網站或者系統的源代碼,通過審計源代碼或者代碼環境的方式去審計系統是否存在漏洞(屬於白盒測試范疇)
那具體要怎麼學習呢?學習的具體內容按照順序列舉如下 :
掌握php一些危險函數和安全配置;
熟悉代碼審計的流程和方法;
掌握1-2個代碼審計工具,如seay等;
掌握常見的功能審計法;(推薦審計一下AuditDemo,讓你產生自信)
常見CMS框架審計(難度大); 代碼審計有一本國外的書籍《代碼審計:企業級Web代碼安全架構》,當然有空的時候可以去翻翻,建議還是在b站上找一套系統介紹的課程去學習;github上找到AuditDemo,下載源碼,搭建在本地虛擬機,然後利用工具和審計方法,審計AuditDemo中存在的10個漏洞,難度分布符合正態分布,可以挑戰一下;
至於CMS框架審計,可以去一些CMS官方網站,下載一些歷史存在漏洞的版本去審計,框架的學習利用官方網站的使用手冊即可,如ThinkPHP3.2版本是存在一些漏洞,可以嘗試讀懂代碼;但是切記不要一上來就看代碼,因為CMS框架的代碼量比較大,如果不系統先學習框架,基本屬於看不懂狀態;學習框架後能夠具備寫簡單的POC,按照代碼審計方法結合工具一起審計框架;其實也沒沒想像中的那麼難,如果你是開發人員轉行的,恭喜你,你已經具備代碼審計的先天性優勢。
可能有人會問:「我代碼很差,不學習代碼審計行不行?」其實代碼審計不是學習網路安全的必要條件,能夠掌握最好,掌握不了也不影響後續的學習和就業,但你需要選擇一個階段,練習得更專業精通一些,如web滲透或者內網滲透,再或者是自動化滲透;
(3)內網安全
恭喜你,如果學到這里,你基本可以從事一份網路安全相關的工作,比如滲透測試、Web滲透、安全服務、安全分析等崗位;
如果想就業面更寬一些,技術競爭更強一些,需要再學習內網滲透相關知識;
內網的知識難度稍微偏大一些,這個和目前市面上的學習資料還有靶場有一定的關系;內網主要學習的內容主要有:內網信息收集、域滲透、代理和轉發技術、應用和系統提權、工具學習、免殺技術、APT等等;
可以購買《內網安全攻防:滲透測試實戰指南》,這本書寫得還不錯,國內為數不多講內網的書籍,以書籍目錄為主線,然後配合工具和靶場去練習即可;
那去哪裡可以下載到內網靶場?如果你能力夠強,電腦配置高,可以自己利用虛擬機搭建內網環境,一般需要3台以上的虛擬機;你也可以到國外找一些內網靶場使用,有一些需要收費的靶場還可以;
(4)滲透拓展
滲透拓展部分,和具體工作崗位聯系也比較緊密,盡量要求掌握,主要有日誌分析、安全加固、應急響應、等保測評等內容;其中重點掌握前三部分,這塊的資料網路上也不多,也沒有多少成型的書籍資料,可通過行業相關的技術群或者行業分享的資料去學習即可,能學到這一步,基本上已經算入門成功,學習日誌分析、安全加固、應急響應三部分的知識也相對較為容易。
方法2:先學習Web滲透及工具,然後再學習編程
適用人群:代碼能力很弱,或者根本沒有什麼代碼能力,其他基礎也相對較差的小夥伴
基礎需要打好,再學習Web滲透比如linux系統、計算機網路、一點點的Web框架、資料庫還是需要提前掌握;
像php語言、自動化滲透和代碼審計部分內容,可以放在最後,當學習完畢前面知識後,也相當入門後,再來學習語言,相對會容易一些;
【優先推薦】方法2,對於小白來說,代碼基礎通常較弱,很多很多小白會倒在前期學習語言上,所以推薦方法2的學習,先學習web滲透和工具,也比較有意思,容易保持一個高漲的學習動力和熱情,具體學習內容我就不說了,請小夥伴們參照方法1即可。
方法3:選擇一些適合自己的課程學習
適用人群:需要體系化學習、增強實戰能力的小夥伴
具體根據自身條件來講,如果你自學能力較差,那建議選擇課程學習,網上各大平台等都有很多各式各樣的課程,是可以更快幫助你迅速入門的,然後再根據自己自身所欠缺的方面,不斷去完善和學習,最後達到你所要的優秀水平。
學習書籍推薦如下:
【基礎階段】
Linux Basics for Hackers(中文翻譯稿)
Wireshark網路分析(完整掃描版)
精通正則表達式(中文第3版)
圖解HTTP 彩色版
[密碼學介紹].楊新.中文第二版
網路是怎樣連接的_戶根勤
[PHP與MySQL程序設計(第4版)].W.Jason.Gilmore
【web滲透階段】
web安全攻防滲透測試實戰指南
白帽子講Web安全
Web安全深度
【自動化滲透階段】
Python編程快速上手-讓繁瑣工作自動化
【代碼審計階段】
代碼審計:企業級Web代碼安全架構
【內網滲透階段】
內網安全攻防:滲透測試實戰指南
社會工程防範釣魚欺詐
⑵ 關於SQL注入。
SQL注入原理深度解析作者:admin 文章來源:轉載 點擊數:699 更新時間:2008-8-29 -------------------------------------------------------------------------------- 對於Web應用來說,注射式攻擊由來已久,攻擊方式也五花八門,常見的攻擊方式有SQL注射、命令注射以及新近才出現的XPath注射等等。本文將以SQL注射為例,在源碼級對其攻擊原理進行深入的講解。 一、注射式攻擊的原理 注射式攻擊的根源在於,程序命令和用戶數據(即用戶輸入)之間沒有做到涇渭分明。這使得攻擊者有機會將程序命令當作用戶輸入的數據提交給We程序,以發號施令,為所欲為。 為了發動注射攻擊,攻擊者需要在常規輸入中混入將被解釋為命令的「數據」,要想成功,必須要做三件事情: 1.確定Web應用程序所使用的技術 注射式攻擊對程序設計語言或者硬體關系密切,但是這些可以通過適當的踩點或者索性將所有常見的注射式攻擊都搬出來逐個試一下就知道了。為了確定所採用的技術,攻擊者可以考察Web頁面的頁腳,查看錯誤頁面,檢查頁面源代碼,或者使用諸如Nessus等工具來進行刺探。 2.確定所有可能的輸入方式 Web應用的用戶輸入方式比較多,其中一些用戶輸入方式是很明顯的,如HTML表單;另外,攻擊者可以通過隱藏的HTML表單輸入、HTTP頭部、cookies、甚至對用戶不可見的後端AJAX請求來跟Web應用進行交互。一般來說,所有HTTP的GET和POST都應當作用戶輸入。為了找出一個Web應用所有可能的用戶輸入,我們可以求助於Web代理,如Burp等。 3.查找可以用於注射的用戶輸入 在找出所有用戶輸入方式後,就要對這些輸入方式進行篩選,找出其中可以注入命令的那些輸入方式。這個任務好像有點難,但是這里有一個小竅門,那就是多多留意Web應用的錯誤頁面,很多時候您能從這里得到意想不到的收獲。 二、SQL注射原理 上面對注射攻擊做了一般性的解釋,下面我們以SQL注射為例進行講解,以使讀者對注射攻擊有一個感性的認識,至於其他攻擊,原理是一致的。 SQL注射能使攻擊者繞過認證機制,完全控制遠程伺服器上的資料庫。SQL是結構化查詢語言的簡稱,它是訪問資料庫的事實標准。目前,大多數Web應用都使用SQL資料庫來存放應用程序的數據。幾乎所有的Web應用在後台都使用某種SQL資料庫。跟大多數語言一樣,SQL語法允許資料庫命令和用戶數據混雜在一起的。如果開發人員不細心的話,用戶數據就有可能被解釋成命令,這樣的話,遠程用戶就不僅能向Web應用輸入數據,而且還可以在資料庫上執行任意命令了。 三、繞過用戶認證 我們這里以一個需要用戶身份認證的簡單的Web應用程序為例進行講解。假定這個應用程序提供一個登錄頁面,要求用戶輸入用戶名和口令。用戶通過HTTP請求發送他們的用戶名和口令,之後,Web應用程序檢查用戶傳遞來用戶名和口令跟資料庫中的用戶名和口令是否匹配。這種情況下,會要求在SQL資料庫中使用一個資料庫表。開發人員可以通過以下SQL語句來創建表: CREATETABLEuser_table( idINTEGERPRIMARYKEY, usernameVARCHAR(32), passwordVARCHAR(41) ); 上面的SQL代碼將建立一個表,該表由三欄組成。第一欄存放的是用戶ID,如果某人經過認證,則用此標識該用戶。第二欄存放的是用戶名,該用戶名最多由32字元組成。第三欄存放的是口令,它由用戶的口令的hash值組成,因為以明文的形式來存放用戶的口令實在太危險,所以通常取口令的散列值進行存放。我們將使用SQL函數PASSWORD()來獲得口令的hash值,在MySQL中,函數PASSWORD()的輸出由41字元組成。 對一個用戶進行認證,實際上就是將用戶的輸入即用戶名和口令跟表中的各行進行比較,如果跟某行中的用戶名和口令跟用戶的輸入完全匹配,那麼該用戶就會通過認證,並得到該行中的ID。假如用戶提供的用戶名和口令分別為lonelynerd15和mypassword,那麼檢查用戶ID過程如下所示: SELECTidFROMuser_tableWHEREusername='lonelynerd15'ANDpassword=PASSWORD('mypassword') 如果該用戶位於資料庫的表中,這個SQL命令將返回該用戶相應的ID,這就意味著該用戶通過了認證;否則,這個SQL命令的返回為空,這意味著該用戶沒有通過認證。 下面是用來實現自動登錄的Java代碼,它從用戶那裡接收用戶名和口令,然後通過一個SQL查詢對用戶進行認證: Stringusername=req.getParameter("username"); Stringpassword=req.getParameter("password"); Stringquery="SELECTidFROMuser_tableWHERE"+ "username='"+username+"'AND"+ "password=PASSWORD('"+password+"')"; ResultSetrs=stmt.executeQuery(query); intid=-1;//-. while(rs.next()){ id=rs.getInt("id"); } 開頭兩行代碼從HTTP請求中取得用戶輸入,然後在下一行開始構造一個SQL查詢。執行查詢,然後在while()循環中得到結果,如果一個用戶名和口令對匹配,就會返回正確的ID。否則,id的值仍然為-1,這意味著用戶沒有通過認證。表面上看,如果用戶名和口令對匹配,那麼該用戶通過認證;否則,該用戶不會通過認證——但是,事實果真如此嗎?非也!讀者也許已經注意到了,這里並沒有對SQL命令進行設防,所以攻擊者完全能夠在用戶名或者口令欄位中注入SQL語句,從而改變SQL查詢。為此,我們仔細研究一下上面的SQL查詢字元串: Stringquery="SELECTidFROMuser_tableWHERE"+ "username='"+username+"'AND"+ "password=PASSWORD('"+password+"')"; 上述代碼認為字元串username和password都是數據,不過,攻擊者卻可以隨心所欲地輸入任何字元。如果一位攻擊者輸入的用戶名為 』OR1=1— 而口令為 x 那麼查詢字元串將變成下面的樣子: SELECTidFROMuser_tableWHEREusername=''OR1=1--'ANDpassword =PASSWORD('x') 該雙劃符號--告訴SQL解析器,右邊的東西全部是注釋,所以不必理會。這樣,查詢字元串相當於: SELECTidFROMuser_tableWHEREusername=''OR1=1 如今的SELECT語句跟以前的已經大相徑庭了,因為現在只要用戶名為長度為零的字元串''或1=1這兩個條件中一個為真,就返回用戶標識符ID——我們知道,1=1是恆為真的。所以這個語句將返回user_table中的所有ID。在此種情況下,攻擊者在username欄位放入的是SQL指令'OR1=1--而非數據。 四、構造SQL注射代碼 為了成功地注入SQL命令,攻擊者必須將開發人員的現有SQL命令轉換成一個合法的SQL語句,當然,要盲注是有些難度的,但一般都是這樣: 'OR1=1– 或者 ')OR1=1-- 此外,許多Web應用提供了帶來錯誤報告和調試信息,例如,利用'OR1=1--對Web應用進行盲注時,經常看到如下所示的錯誤信息: Errorexecutingquery:YouhaveanerrorinyourSQLsyntax;tousenear'SELECT(title,body)FROMblog_tableWHEREcat='OR1=1'atline1 該錯誤信息詳細地為我們展示了完整的SQL語句,在此種情況下,SQL資料庫所期待的好象是一個整數,而非字元串,所以可以注入字元串OR1=1--,把單引號去掉就應該能成功注入了。對於大多數SQL資料庫,攻擊者可以在一行中放入多個SQL語句,只要各個語句的語法沒有錯誤就行。在下面的代碼中,我們展示了如何將username設為'OR1=1並把password設為x來返回最後的用戶ID: Stringquery="SELECTidFROMuser_tableWHERE"+ "username='"+username+"'AND"+ "password=PASSWORD('"+password+"')"; 當然,攻擊者可以注入其它的查詢,例如,把username設為: 'OR1=1;DROPTABLEuser_table;-- 而這個查詢將變成: SELECTidFROMuser_tableWHEREusername=''OR1=1;DROPTABLEuser_table;--'ANDpassword=PASSWORD('x'); 它相當於: SELECTidFROMuser_tableWHEREusername=''OR1=1;DROPTABLEuser_table; 這個語句將執行句法上完全正確的SELECT語句,並利用SQLDROP命令清空user_table。 注射式攻擊不必非要進行盲式攻擊,因為許多Web應用是利用開放源代碼工具開發的,為了提高注射式攻擊的成功率,我們可以下載免費的或者產品的試用版,然後在自己的系統上搭建測試系統。如果在測試系統上發現了錯誤,那麼很可能同樣的問題也會存在於所有使用該工具的Web應用身上。 五、小結 我們在本文中向讀者介紹了注射攻擊的根本原因,即沒有對數據和命令進行嚴格區分。然後通過一些程序源碼對SQL的攻擊進行了細致的分析,使我們對SQL注射機理有了一個深入的認識。如果您是一名web應用開發人員,那麼您就當心了,一定不要盲目相信用戶端的輸入,而要對用戶輸入的數據進行嚴格的「消毒」處理,否則的話,SQL注射將會不期而至。 【51CTO.COM 獨家特稿,轉載請註明出處及作者!】 本篇文章來源於 新世紀網安基地 (www.520hack.com) 原文出處: http://www.520hack.com/Article/Text5/server/200808/11251.html 詳細吧。。 求給分額!
⑶ web前端不掉頭發的學習方法
不掉頭發的前端(這可能嗎哈哈)
只要想學習哪裡學習都是有效果的。但需要結合自身的一些特點來調整學習方向,這樣學習起來會事半功倍,以下推薦3種學習線路,適用於不同的學習人群;
方法1:先學習編程,然後學習Web滲透及工具使用等
適用人群:有一定的代碼基礎的小夥伴
(1)基礎部分
基礎部分需要學習以下內容:
(1.1)計算機網路 :
重點學習OSI、TCP/IP模型,網路協議,網路設備工作原理等內容,其他內容快速通讀;
【推薦書籍】《網路是怎樣連接的_戶根勤》一書,簡明扼要,淺顯易懂,初學者的福音;如果覺得不夠專業,可以學習圖靈設計叢書的《HTTP權威指南》;
(1.2)Linux系統及命令 :
由於目前市面上的Web伺服器7成都是運行在Linux系統之上,如果要學習滲透Web系統,最起碼還是要對linux系統非常熟悉,常見的操作命令需要學會;
學習建議:學習常見的10%左右的命令適用於90%的工作場景,和office軟體一樣,掌握最常用的10%的功能,基本日常使用沒什麼問題,遇到不會的,再去找相關資料;常見的linux命令也就50-60個,很多小白囫圇吞棗什麼命令都學,這樣其實根本記不住。
【推薦書籍】Linux Basics for Hackers;
(1.3)Web框架 :
熟悉web框架的內容,前端HTML,JS等腳本語言了解即可,後端PHP語言重點學習,切記不要按照開發的思路去學習語言,php最低要求會讀懂代碼即可,當然會寫最好,但不是開發,但不是開發,但不是開發,重要的事情說三遍;
資料庫:
需要學習SQL語法,利用常見的資料庫MySQL學習對應的資料庫語法,也是一樣,SQL的一些些高級語法可以了解,如果沒有時間完全不學也不影響後續學習,畢竟大家不是做資料庫分析師,不需要學太深;
(2)Web安全
(2.1)Web滲透
掌握OWASP排名靠前的10餘種常見的Web漏洞的原理、利用、防禦等知識點,然後配以一定的靶場練習即可;有的小白可能會問,去哪裡找資料,建議可以直接買一本較為權威的書籍,配合一些網上的免費視頻系統學習,然後利用開源的靶場輔助練習即可;
【推薦書籍】白帽子講Web安全(阿里白帽子黑客大神道哥作品)
【推薦靶場】常見的靶場都可以上github平台搜索,推薦以下靶場DVWA、bWAPP、upload-labs-master、SQL-lib-master、WebBug、pikachu等,有些是綜合靶場,有些是專門針對某款漏洞的靶場;
(2.2)工具學習
Web滲透階段還是需要掌握一些必要的工具,工具的學習b站上的視頻比較多,挑選一些講解得不錯的視頻看看,不要一個工具看很多視頻,大多數視頻是重復的,且很浪費時間;
主要要掌握的工具和平台:burp、AWVS、Appscan、Nessus、sqlmap、nmap、shodan、fofa、代理工具ssrs、hydra、mesa、airspoof等,以上工具的練習完全可以利用上面的開源靶場去練習,足夠了;
練習差不多了,可以去SRC平台滲透真實的站點,看看是否有突破,如果涉及到需要繞過WAF的,需要針對繞WAF專門去學習,姿勢也不是特別多,系統性學習學習,然後多總結經驗,更上一層樓;
(2.2)自動化滲透
自動化滲透需要掌握一門語言,且需要熟練運用,可以是任何一門自己已經掌握得很熟悉的語言,都可以,如果沒有一門掌握很好的,那我推薦學習python,最主要原因是學起來簡單,模塊也比較多,寫一些腳本和工具非常方便;
雖說不懂自動化滲透不影響入門和就業,但是會影響職業的發展,學習python不需要掌握很多不需要的模塊,也不需要開發成千上萬行的代碼,僅利用它編寫一些工具和腳本,少則10幾行代碼,多則1-200行代碼,一般代碼量相對開發人員已經少得不能再少了,例如一個精簡的域名爬蟲代碼核心代碼就1-20行而已;
幾天時間學習一下python的語法,有代碼基礎的,最快可能一天就可以學習完python的語法,因為語言都是相通的,但是學習語言最快的就是寫代碼,別無他法;接下來可以開始嘗試寫一些常見的工具,如爬蟲、埠探測、數據包核心內容提取、內網活躍主機掃描等,此類代碼網上一搜一大把;然後再寫一些POC和EXP腳本,以靶場為練習即可;有的小夥伴可能又要問了,什麼是POC和EXP,自己網路去,養成動手的好習慣啦;
(2.3)代碼審計
此處內容要求代碼能力比較高,因此如果代碼能力較弱,可以先跳過此部分的學習,不影響滲透道路上的學習和發展。
如果希望在Web滲透上需要走得再遠一些,需要精通一門後台開發語言,推薦php,因為後台採用php開發的網站占據最大,當然你還精通python、asp、java等語言,那恭喜你,你已經具備很好的基礎了;
代碼審計顧名思義,審計別人網站或者系統的源代碼,通過審計源代碼或者代碼環境的方式去審計系統是否存在漏洞(屬於白盒測試范疇)
那具體要怎麼學習呢?學習的具體內容按照順序列舉如下 :
掌握php一些危險函數和安全配置;
熟悉代碼審計的流程和方法;
掌握1-2個代碼審計工具,如seay等;
掌握常見的功能審計法;(推薦審計一下AuditDemo,讓你產生自信)
常見CMS框架審計(難度大); 代碼審計有一本國外的書籍《代碼審計:企業級Web代碼安全架構》,當然有空的時候可以去翻翻,建議還是在b站上找一套系統介紹的課程去學習;github上找到AuditDemo,下載源碼,搭建在本地虛擬機,然後利用工具和審計方法,審計AuditDemo中存在的10個漏洞,難度分布符合正態分布,可以挑戰一下;
至於CMS框架審計,可以去一些CMS官方網站,下載一些歷史存在漏洞的版本去審計,框架的學習利用官方網站的使用手冊即可,如ThinkPHP3.2版本是存在一些漏洞,可以嘗試讀懂代碼;但是切記不要一上來就看代碼,因為CMS框架的代碼量比較大,如果不系統先學習框架,基本屬於看不懂狀態;學習框架後能夠具備寫簡單的POC,按照代碼審計方法結合工具一起審計框架;其實也沒沒想像中的那麼難,如果你是開發人員轉行的,恭喜你,你已經具備代碼審計的先天性優勢。
可能有人會問:「我代碼很差,不學習代碼審計行不行?」其實代碼審計不是學習網路安全的必要條件,能夠掌握最好,掌握不了也不影響後續的學習和就業,但你需要選擇一個階段,練習得更專業精通一些,如web滲透或者內網滲透,再或者是自動化滲透;
(3)內網安全
恭喜你,如果學到這里,你基本可以從事一份網路安全相關的工作,比如滲透測試、Web滲透、安全服務、安全分析等崗位;
如果想就業面更寬一些,技術競爭更強一些,需要再學習內網滲透相關知識;
內網的知識難度稍微偏大一些,這個和目前市面上的學習資料還有靶場有一定的關系;內網主要學習的內容主要有:內網信息收集、域滲透、代理和轉發技術、應用和系統提權、工具學習、免殺技術、APT等等;
可以購買《內網安全攻防:滲透測試實戰指南》,這本書寫得還不錯,國內為數不多講內網的書籍,以書籍目錄為主線,然後配合工具和靶場去練習即可;
那去哪裡可以下載到內網靶場?如果你能力夠強,電腦配置高,可以自己利用虛擬機搭建內網環境,一般需要3台以上的虛擬機;你也可以到國外找一些內網靶場使用,有一些需要收費的靶場還可以;
(4)滲透拓展
滲透拓展部分,和具體工作崗位聯系也比較緊密,盡量要求掌握,主要有日誌分析、安全加固、應急響應、等保測評等內容;其中重點掌握前三部分,這塊的資料網路上也不多,也沒有多少成型的書籍資料,可通過行業相關的技術群或者行業分享的資料去學習即可,能學到這一步,基本上已經算入門成功,學習日誌分析、安全加固、應急響應三部分的知識也相對較為容易。
方法2:先學習Web滲透及工具,然後再學習編程
適用人群:代碼能力很弱,或者根本沒有什麼代碼能力,其他基礎也相對較差的小夥伴
基礎需要打好,再學習Web滲透比如linux系統、計算機網路、一點點的Web框架、資料庫還是需要提前掌握;
像php語言、自動化滲透和代碼審計部分內容,可以放在最後,當學習完畢前面知識後,也相當入門後,再來學習語言,相對會容易一些;
【優先推薦】方法2,對於小白來說,代碼基礎通常較弱,很多很多小白會倒在前期學習語言上,所以推薦方法2的學習,先學習web滲透和工具,也比較有意思,容易保持一個高漲的學習動力和熱情,具體學習內容我就不說了,請小夥伴們參照方法1即可。
方法3:選擇一些適合自己的課程學習
適用人群:需要體系化學習、增強實戰能力的小夥伴
具體根據自身條件來講,如果你自學能力較差,那建議選擇課程學習,網上各大平台等都有很多各式各樣的課程,是可以更快幫助你迅速入門的,然後再根據自己自身所欠缺的方面,不斷去完善和學習,最後達到你所要的優秀水平。
學習書籍推薦如下:
【基礎階段】
Linux Basics for Hackers(中文翻譯稿)
Wireshark網路分析(完整掃描版)
精通正則表達式(中文第3版)
圖解HTTP 彩色版
[密碼學介紹].楊新.中文第二版
網路是怎樣連接的_戶根勤
[PHP與MySQL程序設計(第4版)].W.Jason.Gilmore
【web滲透階段】
web安全攻防滲透測試實戰指南
白帽子講Web安全
Web安全深度
【自動化滲透階段】
Python編程快速上手-讓繁瑣工作自動化
【代碼審計階段】
代碼審計:企業級Web代碼安全架構
【內網滲透階段】
內網安全攻防:滲透測試實戰指南
社會工程防範釣魚欺詐
⑷ 發包長度大於1518的發包工具
三款常用IP發包工具介紹
SENDIP 可在各種UNIX 或LINUX 版本中運行,本人使用的是SLACKWARE 8.0 和
REDHAT 9.0 兩個版本。
可在網站http://www.earth.li/projectpurple/progs/sendip.html 中下載最新的源代碼或RPM
包,目前版本為2.5,源碼包大小隻有54K。
2.1.1. 安裝過程
SENDIP 的安裝過程非常簡單,首先從前面介紹的網站中下載最新的源代碼包,目前為
sendip-2.5.tar.gz。
在LINUX 系統中執行:
#tar –xzvf sendip-2.5.tar.gz
#cd sendip-2.5
#make
#make install
在系統的/usr/local/bin 目錄下會產生一個SENDIP 命令文件,同時,在/usr/local/lib 目錄
下建立一個sendip 目錄,並在其下放置ipv4.so、ipv6.so、tcp.so 等與協議相關的模塊文件。
通過在命令行下運行這個文件,我們可以產生各種各樣我們需要的IP 包,還可以通過運行
腳本自動發送大量的IP 包。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第3 頁共14 頁
2.1.2. 發包方法
SENDIP 可以發送NTP, BGP, RIP, RIPng, TCP, UDP, ICMP、IPv4 和IPv6 等各種格式的
數據包,SENDIP 本身是以模塊的方式發送各種協議的數據包,用-p 參數指定協議類型,要
發送每種協議的數據包, 必須對該協議的數據包格式有一定的了解。通常發送
TCP/UDP/ICMP 數據包時,都必須以IP 包進行封裝,然後才可以發出去。本節我們將以TCP
數據包為例進行講述。
下面介紹一下SENDIP 的命令行格式,以下為直接執行SENDIP 時的輸出:
Usage: sendip [-v] [-d data] [-h] [-f datafile] [-p mole] [mole options] hostname
-d data add this data as a string to the end of the packet
Data can be:
rN to generate N random(ish) data bytes;
0x or 0X followed by hex digits;
0 followed by octal digits;
any other stream of bytes(以指定位元組的隨機數據填充包中的數據段)
-f datafile read packet data from file(以指定數據文件中的內容填充包中的數據段)
-h print this message(輸出幫助信息)
-p mole load the specified mole (see below)(指定協議類型)
-v be verbose(運行時輸出詳細運行信息,如不指定,運行時不輸出信息)
(協議類型是以模塊的方式指定的,用-p 參數指定)
Moles are loaded in the order the -p option appears. The headers from
each mole are put immediately inside the headers from the previos model in
the final packet. For example, to embed bgp inside tcp inside ipv4, do
sendip -p ipv4 -p tcp -p bgp ....
Moles available at compile time:
ipv4 ipv6 icmp tcp udp bgp rip ntp(支持的協議類型)
通常執行格式如下:
#sendip –v –d r64 –p ipv4 –iv 4 –ih 5 –il 128 –is 10.0.0.1 –id 30.0.0.1 –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-v:運行時輸出詳細運行信息,如不指定,運行時不輸出信息
–d r64:用64 位元組的隨機數值填充IP 包中的數據段
–p ipv4:指定協議類型為IP 協議(IP 協議有自己的相應參數,以i 開頭)
–iv 4:協議版本為4,即IPV4
–ih 5:指定IP 頭的長度為5×4=20 位元組
–il 128:指定IP 包的總長度為128 位元組
–is 10.0.0.1:指定IP 包的源地址
–id 30.0.0.1:指定IP 包的目的地址
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第4 頁共14 頁
–p tcp:指定IP 包中封裝的包的協議類型(TCP 協議有自己的相應參數,以t 開頭)
–ts 1379:指定TCP 包的源埠1379
–td 23:指定TCP 包的目的埠為23
-tt 8:指定TCP 包的偏移量即TCP 頭的長度,沒有TCP 選項時為5,即20 字
節,有TCP 選項時需要增加。
30.0.0.1:指定發包的目的主機
以上部分為利用SENDIP 發送一個簡單的TCP 數據包的方法,下面結合IP 和TCP 數據
包的格式詳細介紹IP 和TCP 協議的各種參數。
具體各種協議的數據包格式可參考TCP/IP 協議中對各種協議數據包格式的介紹,下面
我們只介紹IP 數據包的格式和TCP 數據包的格式:
IP 數據包的格式:
根據IP 數據包的格式,SENDIP 有如下命令行參數可以指定對應的IP 數據包中參數的
值。
Field name
Size
(bits)
SendIP
option
Description
Version 4 -iv Always 4(對應「4 位版本」,通常值為4,表示IPV4)
Header length 4 -ih
IP header length, measured in 32bit words, 5 if there are
no options(對應「4 位首部長度」,表示以32 位即4
位元組為單位的IP 首部長度,如果沒有IP 參數的話,
通常為5,表示首部長度為20 位元組,如有IP 參數的
話,需要調整該值)
Type of
Service/Differentiated
Services
8 -iy
服務類型(TOS)欄位由8 位組成,其中包括3 位的
優先權欄位(現已被忽略)、4 位的TOS 子欄位和1
位未用位但必須置0,4 位TOS 子欄位分別代表最小
時延、最大吞吐量、最高可靠性和最小費用。4 位只
能置其中1 位,使用時只要將設置相應位後運算出十
進制值即可。如要設置最大吞吐量位(00001000),只
需添加參數iy 8 即可。
Total Length 16 -il Total length of IP packet including header and data,
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第5 頁共14 頁
measured in octets(指定IP 包的總長度,包括IP 頭部
分和數據部分,以8 位位元組為單位,最長為65535)
Identification 16 -ii
Used to help reassembled fragmented packets(指定IP
包的標識號,用來幫助重新組裝分段的IP 包)
-ifr 1 bit: reserved, should be 0
-ifd 1 bit: don't fragment(可指定-ifd x,下可為0、1 或r) Flags 3
-ifm 1 bit: more fragmets(可指定-ifm x,下可為0、1 或r)
Fragment offset 13 -if
Where in the reconstructed datagram this fragment
belongs, measured in 64bit words starting from 0(以8
位元組長度為單位,指定段偏移量)
Time to Live 8 -it
Number of routers the packet can pass through before
being discarded(值的范圍從0 到255,指定TTL,表
示該包可通過的路由器的數目,用於防止包在循環路
徑上無休止地傳遞)
Protocol 8 -ip
Protocol associated with the data. See iana for an
uptodate list of assigned numbers(用於定義IP 包內部
封裝的上層協議的協議號,如TCP 為6,可在IANA
的網站上
http://www.iana.org/assignments/protocol-numbers
獲得最新的協議號表)
Header checksum 16 -ic
Checksum of the IP header data (with checksum set to
zero)(可指定IP 首部校驗和的值,通常由SENDIP 自
動生成,不指定該參數,除非要發出帶有錯誤校驗和
的包)
Source Address 32 -is Duhh...(源地址,以點分十進制方式表示)
Destination Address 32 -id Cabbage(目的地址,以點分十進制方式表示)
Options Variable -io...
No options are required. Any number can be added. See
below for details(定義各種IP 選項,如果定義了IP
選項,則前面的IP 頭的長度值要包括IP 選項的長度,
不帶IP 選項時,該值為20,帶IP 選項時,可設定該
值,如果要故意製造不匹配的包,可不符合規范。)
如果有IP 選項,還可指定IP 選項的值,SENDIP 支持的IP 選項如下表所示。
Name
SendIP
option
RFC Copy Class Number
Type
(see
above)
Length
(0 not
present)
Description
EOL -ioeol 791 0 0 0 0 0
Used as padding if needed
(使用該選項後,會自動在IP 頭
中未用到的位補0)
NOP -ionop 791 0 0 1 1 0
Do nothing. Often used as padding
so the next option starts on a 32 bit
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第6 頁共14 頁
boundary
RR -iorr 791 0 0 7 7 variable
Used to record the route of a
packet.(記錄包走過的每個路由
器, 通常用法是: -iorr
0f:ff.ff.ff.ff:10.0.0.234 –ioeol,其中
iorr 表示記錄路由,此時系統會自
動將IP 選項號置為07,0f 表示指
針,即記錄的最後一個IP 地址的
指針,系統會自動運算該IP 選項
的長度)
TS -iots 791 0 2 4 68 variable
Used to record the time at which a
packet was processed by an
intermediate system
LSR -iolsr 791 1 0 3 131 vairable
Loose Source Route - let the
source specify the route for a
packet.
SID -iosid 791 1 0 8 136 4
Rarely used, carries the SATNET
stream identifier.
SSR -iossr 791 1 0 9 137 variable
Strict Source Route - same as LSR,
but extra hops are not allowed.
SEC
791,
1108
1 0 2 130 variable Security, rarely used
E-SEC 1108 1 0 5 133 variable Extended Security, rarely used
通常在SENDIP 中指定IP 選項時,格式比較特別,下面我們以RR 記錄路由選項為例
介紹一下,如果要發送一個記錄三個IP 的數據包,需要考慮如下,一是指定IP 頭的長度要
包括IP 選項的長度,而是要指定RR 記錄路由選項的指針位置和IP 地址(本來是由系統自
動記錄IP 和更新指針位置,但現在必須手工指定),那麼記錄三個IP 包後,指針的位置應
是3+4×3+1=16,造好後,數據包的格式應該如下:
IP 頭07 15 16 10.0.0.234(IP1) 20.0.0.234(IP2) 30.0.0.234(IP3) 00(ioeol) tcp
20B RR len ptr 4bytes 4bytes 4bytes Ptr
具體命令行如下:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-ih 10 表示IP 頭的長度為10×4 為40 個位元組,去除標準的20 個位元組長度,為IP
選項預留為20 個位元組
-iorr 10:10.0.0.234:20.0.0.234:30.0.0.234 中第一個10 表示用16 進製表示的指針的
位置,後面為用冒號分隔的三個用點分十進製表示的IP 地址
-ioeol 表示用00 結束IP 選項,並用隨機數填充後面未用的IP 頭位置
以上部分只是以RR 記錄路由IP 選項為例,介紹了sendip 中指定IP 選項的方法,當然
也可以根據自己的要求發送IP 選項不符合常規的數據包。其他的IP 選項與此雷同,但發送
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第7 頁共14 頁
前需要詳細了解IP 選項的格式,才可正確發送。
TCP 數據包的格式:
根據TCP 數據包的格式,SENDIP 有如下命令行參數可以指定對應的TCP 數據包中參
數的值。
Field name
Size
(bits)
SendIP
option
Description
Source port 16 -ts
Source port number for the connection
(以十進制的方式指定TCP 原埠)
Destination port 16 -td
Destination port number
(以十進制的方式指定TCP 目的埠)
Sequence number 32 -tn
Number of the first data octet in this packet. If SYN bit is
set, this is the number of the first data octet of the stream
too.(指定TCP 序列號,如果不指定則隨機產生)
Acknowledgment
number
32 -ta
If ACK bit is set, the next sequence number the sender is
expecting to receive.
Data offset 4 -tt
Length of TCP header in 32 bit words(指定TCP 頭的長
度,單位是以32bits 也就是4 位元組為單位)
Reserved 4 -tr
Should be 0. Note, rfc793 defines this as a 6 bit field, but
the last 2 are used by rfc2481 for ECN as below.
Flags: ECN 1 -tfe
Flags: CWR 1 -tfc
ECN extension flags, see rfc2481. (指定TCP 標志位,
如果要打開哪一位,就在命令行參數中指定相應位的
值,如要設置SYN 狀態,只需在命令行加入-tfs 1 即可
)
Flags: URG 1 -tfu Urgent pointer is significant(同上)
Flags: ACK 1 -tfa Acknowledgment field is significant(同上)
Flags: PSH 1 -tfp Push function(同上)
Flags: RST 1 -tfr Reset the connection(同上)
Flags: SYN 1 -tfs Synchronize sequence numbers(同上)
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第8 頁共14 頁
Flags: FIN 1 -tff No more data from sender(同上)
Window 16 -tw
Number of octet starting from the one in the
Acknowledgement field that the sender is willing to
accept
Checksum 16 -tc
Checksum of the TCP header (with checksum set to 0),
data, and a psuedo-header including the source and
destination IP addresses, IP protocol field and a 16 bit
length of the TCP header and data.
Urgent pointer 16 -tu
If URG bit is set, tHe offset of the last octet of urgent data
in this packet.
Options Variable -to...
No options are required. Any number can be added. See
below for details.
如果有TCP 選項,還可指定TCP 選項的值,SENDIP 支持的TCP 選項如下表所示。
Name
SendIP
option
RFC Type
Length (0
not
present)
Description
EOL -toeol 793 0 0
Used as padding if needed(用00 填充,表示TCP
選項結束,把TCP 頭後面的位置用隨機數填充)
NOP -tonop 793 1 0
Do nothing. Often used as padding so the next
option starts on a 32 bit boundary
MSS -tomss 793 2 4
Specify the maximum recieve segment size of the
sender as a 16 bit number. Only valid when SYN is
also set
WSOPT -towscale 1323 3 3
The window size should be leftshifted by the value
of the option (an 8 bit number). Only valid when
SYN is also set.
SACKOK -tosackok 2018 4 2
Selective Acknowledgement is permitted on this
connection
SACK -tosack 2018 5 variable
Selective Acknowledgement of non-contiguous
blocks of data. The data in the option is a series of
(left edge)-(right edge) pairs giving, respectively,
the first sequence number the has been recieved and
the first that hasn't.
TSOPT -tots 1323 8 10
Timestamp. The first 4 bytes (TSval) are the time
that the packet was sent, the remaining 4 (TSecr)
echo the TSval of a packet that was recieved. TSecr
is only valid when the ACK bit is set.
從上表所示,可以看出,TCP 選項可能只有一個單位元組參數,如-toeol 和-tonop,也可
能由一個Type 號和一個length 長度以及該length 長度指定的位元組數的數據組成的參數,使
用時sendip 會自動運算length 的長度,所以,不能隨意設定TCP 選項的長度,但需要設定
TCP 選項的值。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第9 頁共14 頁
在設定TCP 選項時,同樣要考慮到TCP 頭的長度要包括TCP 選項的長度。
TCP 選項數據包的格式大致如下:
Kind=3 Len=3 數據:移位數
TCP 選項號TCP 選項長度TCP 選項數據佔一個位元組,總長度為三個位元組
具體命令行格式可參照如下格式:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 –tfa 0 –tfs 1 –towscale 0 –toeol 30.0.0.1
-towscale 0 :指設置TCP 選項3,長度為自動3,TCP 選項的值即移位數為0
-toeol :表示TCP 選項結束,後面用隨機數填滿TCP 頭
因為用SENDIP 設定TCP 選項時,不能設定長度,所以,如果要設定長度不正確的包,
還要藉助其他工具,如SNIFFER,用SNIFFER 抓到SENDIP 發送的包後,再將對應的TCP
選項的長度改為不規則的值即可。
根據前面介紹的內容,我們已經基本可以掌握用SENDIP 發送各種協議數據包的方法,
當然我們還可以利用他發送各種不符合標準的數據包,如校驗和錯誤、長度不正確、狀態位
不正確等各種我們需要的數據包,在使用時,建議與SNIFFER 搭配使用,以驗證SENDIP
發出的包是否正確,進行有針對性的測試。
2.2. NESSUS 工具
NESSUS 是一個非常龐大的工具,它可以提供功能完善的安全掃描服務,還可以提供全
面的發包功能,用以構造各種格式的網路通信包。本篇只關注NESSUS 的發包功能。
NESSUS 由兩個部分組成,一部分是伺服器,通常運行在POSIX 系統如LINUX/UNIX
系統中,負責掃描和攻擊,並收集數據,另一部分是客戶端,可以運行在LINUX/UNIX 系
統或WINDOWS 系統中,負責接收和顯示數據。
如果只是用來發包,則只需要服務端即可。
NESSUS 有專門的維護網站,可以隨時到http://www.nessus.org 網站下載最新的源代碼,
並獲得全面的幫助。目前,NESSUS 最新的版本為2.0.8a。
2.2.1. NESSUS 安裝方法
安裝NESSUS 前要知道NESSUS 可能需要的支撐軟體包,一個是GTK,通常POSIX
系統下的NESSUS 客戶端需要GTK,如果你的系統安裝了GTK,則必須確保安裝了
gtk-config 程序,可到ftp://ftp.gimp.org/pub/gtk/v1.2 網站下載最新的GTK 程序,如果只在
LINUX/UNIX 系統下安裝服務端,則可以不需要GTK 包;另一個是OPENSSL 包,如果希
望客戶端和服務端的通信採用SSL 方式,則需要OPENSSL 包,可到http://www.openssl.org/
下載最新的OPENSSL 包,OPENSSL 包是可選的。
NESSUS 有三種安裝方法:第一種是利用LINUX 下的LYNX 工具直接從網上安裝,這
種方法很容易,但安全性低,在此不予詳細介紹,可到NESSUS 網站上獲取相關信息。第
二種方法是使用NESSUS 提供的nessus-installer.sh 工具,直接安裝,這種方法簡單且安全性
比較高。第三種方法是獲取源碼包,然後分別編譯再進行安裝。下面分別介紹第二種和第三
種方法。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第10 頁共14 頁
2.2.1.1. 採用nessus-installer.sh 方式安裝
從NESSUS 網站下載最新的nessus-installer.sh 文件到本地LINUX 目錄,然後執行
#sh nessus-installer.sh
系統會自動安裝NESSUS 到你的系統中,中間會需要你提供相關的提示信息,一直按
回車即可。
2.2.1.2. 採用源碼包方式安裝
如果採用源碼包方式進行安裝,需要下載四個軟體包,並按順序進行安裝。四個軟體包
分別如下:
nessus-libraries
libnasl
nessus-core
nessus-plugins
安裝時必須按順序安裝這四個軟體包。
安裝前,我們必須獲得上面所說的四個軟體包,目前版本為2.0.8a:
nessus-libraries-x.x.tar.gz
libnasl-x.x.tar.gz
nessus-core.x.x.tar.gz
nessus-plugins.x.x.tar.gz
然後開始進行安裝。
1. 安裝nessus-libraries
#tar –xzvf nessus-libraries-x.x.tar.gz
#cd nessus-libraries-x.x
#./configure
#make
#make install
2. 安裝libnasl-x.x.tar.gz (執行與上面相同的操作)
3. 安裝nessus-core.x.x.tar.gz(執行與上面相同的操作)
4. 安裝nessus-plugins.x.x.tar.gz (執行與上面相同的操作)
5. 如果使用的是LINUX 系統,必須確保/usr/local/lib 路徑在/etc/ld.so.conf 文件中,如
果是SOLARIS 系統, 必須執行export LD_LIBRARY_PATH=
$LD_LIBRARY_PATH :/usr/local/lib 命令。
6. 執行ldconfig 命令
7. 如果不想或不能使用GTK 的客戶端,可強制使用命令行方式,這時,在執行第三
步編譯nessus-core 時,可以使用如下命令:
#tar –xzvf nessus-libraries-x.x.tar.gz
#cd nessus-libraries-x.x
#./configure --disable-gtk
#make
#make install
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第11 頁共14 頁
執行以上命令後,NESSUS 就已經安裝在您的系統中了。
2.2.2. NESSUS 的發包方法
NESSUS 通常採用腳本方式控制發出的包,下面我們以發送聖誕老人攻擊包為例,來介
紹如何利用NESSUS 發送數據包。
聖誕老人包是通過發送TCP Flag 中同時有SYN 和FIN 標志的數據包,穿透防火牆,
來達到攻擊的目的。
為使用NESSUS 發送攻擊包,首先要定義一個腳本,在LINUX 下,執行vi sendp 命令,
輸入如下內容:
srcaddr=this_host(); 註:自動獲取當前主機的IP 地址
ip = forge_ip_packet( ip_v : 4, 註:IP 協議版本為IPV4
ip_hl : 5, 註:IP 頭的長度為5×4=20 位元組
ip_tos : 0,
ip_len : 40, 註:在這里輸入實際的長度40,因為IP 頭和TCP 頭都為20
ip_id : 0xABA,
ip_p : IPPROTO_TCP, 註:內部數據包協議為TCP
ip_ttl : 255,
ip_off : 0,
ip_src : srcaddr); 註:可在此直接輸入IP
port = get_host_open_port(); 註:自動獲取當前主機上的可用埠
if(!port)port = 139; 註:如果沒有可用埠,就自動使用139 埠
tcpip = forge_tcp_packet( ip : ip, 註:表示IP 層協議採用前面定義的IP 協議包
th_sport : port, 註:可在這里直接輸入埠
th_dport : port, 註:可在這里直接輸入埠
th_flags : TH_SYN|TH_FIN, 註:設置TCP 狀態的SYN 和FIN 標志位
th_seq : 0xF1C,
th_ack : 0,
th_x2 : 0,
th_off : 5, 註:TCP 頭的長度位5×4=20 位元組
th_win : 512,
th_urp : 0);
result = send_packet(tcpip,pcap_active:FALSE);
編輯完上面的腳本後,保存退出,運行如下命令:
#nasl –t 目的IP 地址測試腳本
如:
#nasl –t 10.0.0.227 sendp
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第12 頁共14 頁
通過Sniffer 抓包,就會發現有相應的聖誕老人包。
在我的使用過程中,發現NESSUS 好像不支持發送帶有IP 或TCP 選項的包。
具體發包的參數可參考http://www.nessus.org/doc/nasl.html
2.3. SNIFFER 工具
用SNIFFER 發包時,有兩種方式,一種是直接利用Packet Generator 工具,從0 開始用
16 進制的方式造一個數據包,這種方法難度較高,因為要自己算出校驗和,除非需要重現
在網路上抓到的一個16 進制格式的數據包,另外一種方式是利用已經抓到的數據包修改一
下,再發送出去,具體實現方法分別如下。
2.3.1. 利用Packet Generator 直接造包
在SNIFFER 中,選擇Tools|Packet Generator 菜單,系統彈出窗口如下:
按圖中的紅色框中的按鈕,系統會彈出一個構造包內容的對話框,如下所示:
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第13 頁共14 頁
在上圖中可輸入包的內容,還可規定發包的個數和包的長度。
2.3.2. 利用已抓的包發包
利用已抓的包進行修改,可以避免大量的運算和輸入,只需要更改自己需要更改的地方,
然後發出去即可。
如上圖所示,按包的大致要求,用其他工具造好包後,用SNIFFER 抓包,或者直接將
網路上的可疑包抓過來,然後,用滑鼠郵件單擊該包,彈出如上圖所示的快捷菜單,從中選
擇Send Current Frame 菜單,系統就會彈出如下圖所示的發包窗口:
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第14 頁共14 頁
按要求更改包的內容,即可發送。需要注意的是如果更改了IP 地址或其他頭中的內容,
則需要更新校驗和,對MAC 或選項的更改不需要更改校驗和。
3. 總結
通過對比前面的三種發包工具,我們發現每種工具都有自己的優點和缺點,SENDIP 比
較短小而且功能較齊全,比較適合在日常測試中使用,SNIFFER 發包工具最自由,可以發
出任何可能的數據包,NESSUS 工具功能比較全面,但在發包方面不如SENDIP,所以,建
議如果是測試需要的話,應該採用SENDIP 和SNIFFER 相結合的方式,如果同時還要使用
掃描等其他功能,可以採用NESSUS 工具。