偶然看到一位大佬的博客,其内容是一次校招的笔试题目,感觉问答部分比较好,搬过来作为个人学习使用,侵删。
1. 请简要说明Burpsuite、AWVS、sqlmap、Nmap、Metasploit这些工具在渗透测试中的用途。
Burpsuite:最重要的还是burpproxy来抓包,改包。
intruder攻击框架,
spider网站爬虫
repeater 通过proxy发过来的数据包,可以更直观的更改数据包来看到http的响应。
decoder:常用的编码解码工具
AWVS:知名的网络漏洞综合扫描器。
Sqlmap:常用的sql注入工具,其中包括
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
Nmap:常用的还是端口扫描等等的信息收集,也可以安装一些上手的插件来做辅助。
Metasploit:安全漏洞的检测工具,通过信息收集,来判断出可能存在的主机漏洞,从而调用一些payload来exploit
2. 请简要说明SQL注入、XSS漏洞、CSRF漏洞的原理及修补方案。
首先就这三种漏洞而言,均属于WEB漏洞,
所以问题大部分都出在代码的逻辑和非法字符的过滤上。
原理
1)SQL注入:设计程序,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等
2)XSS漏洞:XSS主要应用于钓鱼诈骗,盗取密码和个人隐私等,XSS攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站建设也产生了较严重的危害。
3)CSRF :和XSS做对比的是,前者称为跨站请求伪造,后者则称为跨站脚本攻击。
如果说XSS是一直凶猛的野兽,那么CSRF则更像是在草丛中,伺机而动的蛇。
通过盗用用户cookie,来伪造邮件,盗取账号,甚至付款等等。XSS攻击使用到的技术主要为HTML和Java,也包括VB和Action等。XSS攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生了较严重的危害。
防御方面
1.SQL注入方面:常见的防范方法
(1)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
(2)对进入数据库的特殊字符(’”<>&*;等)进行转义处理,或编码转换。
(3)确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。
(4)数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
(5)网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
(6)严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
(7)避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
(8)在网站发布之前建议使用一些专业的SQL注入检测工具进行检测,及时修补这些SQL注入漏洞。
2.常用的防止XSS技术包括:
(1)与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
(2)不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
(3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
(4)对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
(5)在发布应用程序之前测试所有已知的威胁。
3.关于CSRF的防御
(1).CookieHashing(所有表单都包含同一个伪随机值):
这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了:>
(2).验证码
这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄…这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,还有听闻是验证码图片的使用涉及了一个被称为MHTML的Bug,可能在某些版本的微软IE中受影响。
(3).One-TimeTokens(不同的表单包含一个不同的伪随机值)
在实现One-TimeTokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提交。考虑一下如果每次表单被装入时站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。
3. 请列举常见的上传漏洞(至少写出十种),并简要说明其利用方法。
IIS解析漏洞有两种:
1.当建立*.asa、*.asp格式的文件夹时,其目录下的任意文件都将被IIS当作asp文件来解析。
2.当文件为*.asp;1.jpg时,IIS6.0同样会以ASP脚本来执行。
Apache解析漏洞test.php.x1.x2.x3;
3.在Apache1.x和Apache2.x中1.php.rar会被当作php文件执行。
上传的文件命名为:test.php.x1.x2.x3,Apache是从右往左判断后缀
本地上传绕过:
4.前台脚本检测扩展名—绕过
当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名。
5.Content-Type检测文件类型—绕过
当浏览器在上传文件到服务器的时候,服务器对说上传文件的Content-Type类型进行检测,如果是白名单允许的,则可以正常上传,否则上传失败。
6.文件系统00截断—绕过
在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束。利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。
7.服务器端扩展名检测黑名单—绕过
当浏览器将文件提交到服务器端的时候,服务器端会根据设定的黑白名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合黑白名单的限制,则不予上传,否则上传成功。
8.JS检测上传文件—绕过
上传文件时,对方使用Java语句语法检测上传文件的合法性问题。
9.重写解析规则—绕过
上传覆盖.htaccess文件,重写解析规则,将上传的带有脚本马的图片以脚本方式解析。
10.后缀名大小写绕过
用于只将小写的脚本后缀名(如php)过滤掉的场合;
例如:将Burpsuite截获的数据包中的文件名【evil.php】改为【evil.Php】
11.双写后缀名绕过
用于只将文件后缀名,例如"php"字符串过滤的场合;
例如:上传时将Burpsuite截获的数据包中文件名【evil.php】改为【evil.pphphp】,那么过滤了第一个"php"字符串"后,开头的’p’和结尾的’hp’就组合又形成了【php】。
12. 特殊后缀名绕过
用于检测文件合法性的脚本有问题的场合;
例如:将Burpsuite截获的数据包中【evil.php】名字改为【evil.php6】,或加个空格改为【evil.php】等。
4. 公司获得授权对一家金融公司从外网做白盒测试,目标是取得内网域控权限及核心业务系统权限,请具体描述您的渗透步骤。
第一步,明确目标并进行信息收集:
包括但不限于:
whois、网站源IP、旁站、C段网站、服务器系统版本、容器版本、程序版本、数据库类型、二级域名、防火墙,后台,未授权页面,敏感url,域名注册人员信息,web应用中网站发帖人的id,管理员姓名,各个端口应用。
第二步,漏洞探索
漏洞综合扫描
主机漏洞
web容器配置问题,或老版本容器漏洞
web应用漏洞,各个业务单元的漏洞。
端口服务漏洞,常见的各个端口弱口令等
第三步,漏洞验证
将上步发现存在或可能存在的漏洞,都对其进行一一检查。
自动化验证:Sqlmap metasploit
手工验证,根据公开资源进行验证
试验验证:自己搭建模拟环境进行验证
登陆猜解:有时可以尝试猜解一下登陆口的账号密码等信息
业务漏洞验证:如发现业务漏洞,要进行验证
找到信息收集的通用、缺省口令等
第四步,进一步测试
当拿到系统权限时,进行进一步的内网入侵,重复二三步。
第五步,信息整理
通过渗透测试所拿到的信息,整理漏洞过程中的poc,exp等
记录操作中的步骤,以及高危漏洞获得权限的位置,web应用漏洞位置。
第六步,生成报告
根据信息整理的结果,生成完整的渗透测试报告,对于发现的漏洞,提出可修复意见。
5. 现在公司获得授权对京东或者唯品会之类的电商网站做渗透测试,请简要描述其可能存在哪些类型的漏洞及您的测试步骤。
电商与其他类型网站不同,涉及大量用户及支付功能的安全漏洞更加复杂。
5.1验证码回传漏洞
抓取response数据包检查信息。
5.2任意用户注册漏洞
第一步,利用自己的手机号接收验证码进行验证,下一步跳转到一个设定密码的页面
第二步,抓包,篡改手机号,使用任意手机号进行注册
5.3短信轰炸
第一种,有一定时间间隔,无限下发。
第二种,无限制,无限下发。
5.4暴力破解
暴力穷举的方式大量尝试性的猜破密码。
5.4业务一致性安全
通过抓包修改手机号码参数为其他号码尝试获取信息
例如在办理查询页面,输入自己的号码然后抓包,修改手机号码参数为其他人号码,查看是否能查询其他人的业务。
邮箱或者用户篡改
抓包修改用户或者邮箱参数为其他用户或者邮箱
订单id篡改
查看自己的订单id,然后修改id(加减一)查看是否能查看其它订单信息。
商品编号篡改
5.5 业务数据篡改
金额数据篡改
抓包修改金额等字段,例如在支付页面抓取请求中商品的金额字段,修改成任意数额的金额并提交,查看能否以修改后的金额数据完成业务流程。
商品数量篡改
抓包修改商品数量等字段,将请求中的商品数量修改成任意数额,如负数并提交,查看能否以修改后的数量完成业务流程。
最大数限制突破
很多商品限制用户购买数量时,服务器仅在页面通过js脚本限制,未在服务器端校验用户提交的数量,通过抓包修改商品最大数限制,将请求中的商品数量改为大于最大数限制的值,查看能否以修改后的数量完成业务流程。
本地js参数修改
部分应用程序通过Java处理用户提交的请求,通过修改Java脚本,测试修改后的数据是否影响到用户。