作者:汪娇娇
时间:2017年8月15日
当时也是看了一本书《白帽子讲web安全》,简单的摘录然后做了个技术分享,文章不是很详细,建议大家结合着这本书看哈。
(1)影响“源”的因素:
"http://store.company.com/dir/phther.html"
"http://customer.com/dir/phther.html"
"http://news.company.com/dir/phther.html"
"http://store.company.com:81/dir/phther.html"
"https://store.company.com/dir/phther.html"
(2)对当前页面来说,页面内存放JS文件的域并不重要,重要的是加载JS所在的域是什么。
(3)<script>、<img>、<iframe>、<link>等都可以跨域加载资源。=> get请求
<script src="1.js"></script>
<img src="1.jpg"/>
<link rel="stylesheet" href="1.css"/>
通常指黑客通过“HTML注入”篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
分类:
(1)cookie劫持:demo:test3
(2)构造GET和POST请求
(1)GET:
例:正确删除谋篇文章的链接是:
http://blog.sohu.com/menage/entry.do?m=delete&id=123456
攻击者通过插入一张图片发起一个GET请求:
var img = document.createElement("img");
img.src = "http://blog.sohu.com/menage/entry.do?m=delete&id=123456";
document.body.appendChild(img);
(2)POST:
(3)xss钓鱼
窃取密码:伪造一个登录框
(4)识别用户浏览器
(5)识别用户安装的软件
try{
var Obj = new ActiveXObject('XunLeiBHO.ThunderIEHElper');
}catch(e){
//异常,不存在该软件
}
(6)CSS History Hack
通过css发现一个用户曾经访问过的网站:style的visited属性。 demo:test3-2
(7)获取用户的真实IP地址
借助第三方软件:例如,Java环境的Java Applet接口
(1)利用字符编码
系统转义了双引号:
var redirectUrl = "\";alert(/xss/);";
GBK/GB2312编码
Firefox中:"%C1"被认为是1个字符 %C1",alert(/xss/);//
(2)绕过长度限制
<input type="text" value="$var" />
"><script>alert(/xss/)<script>
" onclick=alert(1)//
(3)使用<base>标签 demo:test4
window.name = "alert(document.cookie)";
location.href = "http://www.xssedsite.com/xssed.php";
evel(name);
(1)HttpOnly
现在很多浏览器都禁止JS访问带有HttpOnly的cookie。
Set-Cookie时标记: demo:test6
(2)输入检查(必须放在服务端)
例:1+1<3
(3)输出检查:编码或转义 demo:test7
php中:htmlspecialchars()和htmlentities()
JS中:escape()
(4)正确防御XSS
<div>$var</div>
<div><script>alert(/xss)</script></div>
<div id="abc" name="$var"></div>
<div id="abc" name=""><script>alert(/xss/)</script><""></div>
String safe = ESAPI.encode().encodeForHTMLAttribute(request.getParameter("input"));
<script>
var x = "$var";
</script>
<script>
var x = "",alert(/xss);//";
</script>
<a href="#" onclick="funcA('$var')">test</a>
<a href="#" onclick="funcA('');alert(/xss/);//'>test</a>
<style>@import 'http://ha.ckers.org/xss.css';</style>
攻击者诱使用户访问一个恶意网址,并以该用户身份在第三方站点里执行一次操作。 例:删除博客文章:http://blog.sohu.com/menage/entry.do?m=delete&id=123456
Session Cookie
Third-party Cookie:IE、Safari禁止发送,FireFox、Opera、Chrome、Andriod允许
P3P头是W3C制定的一项关于隐私的标准,如果网站返给浏览器的HTTP头中包含P3P头,将允许浏览器发送第三方Cookie
CSRF本质:重要操作的所有参数都可以被攻击者猜到
http://host/path/delete?username=abc&item=123
http://host/path/delete?username=md5(salt+abc)&item=123
http://host/path/delete?username=abc&item=123&token=[random(seed)]
问题:
(1)多页面问题:多个有效的token
(2)保密性:尽量把token放在表单中,post请求
条件:
(1)用户能够控住输入
(2)原本程序要执行的代码,拼接了用户输入的数据
var ShipCity;
ShipCity = Request.form("ShipCity");
var sql = "select * from OrdersTable where ShipCity = '"+ ShipCity +"'";
Beijing
Beijing',drop table OrdersTable--
错误回显
http://newspaper.com/items.php?id=2
SELECT title,description,body FROM items WHERE ID = 2
http://newspaper.com/items.php?id=2 and 1=2
SELECT title,description,body FROM items WHERE ID = 2 and 1=2
MYSQL:BENCHMARK()函数,BENCHMARK(count,expr)
(1)猜版本:
http://www.site.com/new.php?id=5 and substring(@@version,1,1)=4
(2)确认表名admin,列名passwd是否存在
id=5 union all select 1,2,3 from admin
id=5 union all select 1,2,passwd from admin
(3)猜username和password具体的值
id=5 and ascii(substring((select concat(username,0x3a,passwd) from users limit 0,1),1,1)) > 64 /*ret true*/
lib_mysqludf_sys.so上传到数据库能访问到的路径下。
使用CALL或EXCUTE来执行。
xp_cmdshell
EXE master.dbo.xp_cmdshell 'cmd.exe dir c'
0xbf27 or 1=1
统一UTF-8
找到漏洞,修改漏洞
String custname = request.getParameter("customerName");
String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1,custname);
ResultSet results = pstmt.executeQUery();
尽量避免使用动态的语句,对用户的输入数据进行严格过滤或编码函数来处理。
interger
eval()、PHP的动态include、system()
从后往前解析
Phpshell.pgp.rar.rar.rar.rar
截断字符:分号
adc.asp;xx.jpg
jpg -> php
cgi.fix_pathinfo
图片里实际内容是代码