php csrf打MySQL_2020/1/30 PHP代码审计之CSRF漏洞

0x00 CSRF漏洞

CSRF(Cross-site request forgery)跨站请求伪造:也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

0x01 漏洞危害

以你的身份:

发邮件

发消息

财产操作比如转账,或者购买商品

修改密码

删除文章

0x02 漏洞本质

CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

一个典型的CSRF攻击有着如下的流程:

受害者登录a.com,并保留了登录凭证(Cookie)。

攻击者引诱受害者访问了b.com。

b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。

a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。

a.com以受害者的名义执行了act=xx。

攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。

0x03 挖掘思路

后台功能模块:管理后台。会员中心。添加用户等。

被引用的核心文件里面有没有验证token和referer相关的代码

没带token:可以直接请求这个页面。

没带referer:返回相同的数据

0x04 代码实例

我们首先创建一个数据库:

108529ebd61351df30eba0cf973f02b1.png

然后写一个数据库连接:

$conn = mysql_connect(server:"localhost",username:"root",password:"root");

mysql_select_db(database_name:"admin",$conn);//选择我们创建的admin数据库

mysql_query(query "SET NAMES GB2312");

?>

写一个登陆前端:

用户登陆

会员名:

密码:

写登陆表单:

if(!isset($_POST['submit'])){

exit('非法访问');

}

$username = $_POST['username'];

$password = $_POST['password'];

include ('conn.php');

$sql = "SELECT * FROM admin WHERE username='$username' and password='$password'";//讲我们的登陆信息插入数据库

$result= mysql_query($sql) or die("执行失败" . mysql_error());

if($conn = mysqli_fetch_array($result)){

session_start();//开启会话判断是否注册

$_SESSION['username'] = $row['username'];

echo $_SESSION['username'] . ".欢迎登陆";

echo '添加用户';

}

?>

写注册前端

会员注册

注册用户

密码

写注册表单

session_start();//判断是否存在已经登陆的用户名

if(!isset($_SESSION['username'])){

echo '';

}

$username = $_POST['username'];

$password = $_POST['password'];

include('conn.php');//包含引用数据库

$sql = "INSERT INTO admin(username,password) VALUES ($username,$password";//执行我们的数据库语句

$res_insert = mysql_query($sql);

if($res_insert){//如果我们的数据库文件存在

echo "';"

}else{

echo "';"

}

在注册用户处,我们发现没有任何保护,存在CSRF漏洞。

af17fcf71eccf9d8e7386002dda80f5b.png

直接使用bp自带的CSRF POC

ps:csrftest也可以用来测试,注意代理设置。

b45efff663abac4e8d3033a4ee2a9f88.png

诱导受害者使用浏览器访问生成的html文件,

点击submit,会发现注册成功。

这样的还不够直观,我们再来想一下,如果某网站修改密码处存在CSRF漏洞。

当受害者点击链接后,再次登陆会发现自己的密码被修改。我们能够得到受害者密码。(poc是我们制作的)

tips:用js自动触发就不用受害者点击Submit提交表单。意思就是,别人点击连接就可以直接触发csrf!

0x05  其他CSRF

CSRF蠕虫

在CSRF的攻击页面上嵌入蠕虫传播的攻击向量,蠕虫传播要面向不同的用户生成不同的请求。之前的攻击可预测所有的参数,现在必须想办法标识不同用户的数据。

1,服务端脚本获取准备一个php,asp页面,可以检测Referer字段读取url中的用户id等。

2,JSON劫持如果网站提供了这样的数据接口,可以用来获取敏感信息

flash CSRF

网站的根目录下有一个文件crossdomain.xml

secure='true' 表示只能通过安全连接请求

表示哪些域的flash请求可以读写本域的资源,同样可以读取token数据发送请求。

0x06 防御方法

1:验证码

这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串。但是这个方法只能用来辅助,不是主要手段,受限于业务,有的网站不能有验证码。

2:服务端进行CSRF防御

在客户端页面增加伪随机数。

(1).Cookie Hashing(所有表单都包含同一个伪随机值):

这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了:>

//构造加密的Cookie信息

$value = “DefenseSCRF”;

setcookie(”cookie”, $value, time()+3600);

?>

在表单里增加Hash值,以认证这确实是用户发送的请求。

$hash = md5($_COOKIE['cookie']);

?>

”>

然后在服务器端进行Hash值验证

if(isset($_POST['check'])) {

$hash = md5($_COOKIE['cookie']);

if($_POST['check'] == $hash) {

doJob();

} else {

//...

}

} else {

//...

}

?>

3:One-Time Tokens(不同的表单包含一个不同的伪随机值

在实现One-Time Tokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提交。考虑一下如果每次表单被装入时站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点

function gen_token() {

//这里我是贪方便,实际上单使用Rand()得出的随机数作为令牌,也是不安全的。

$token = md5(uniqid(rand(), true));

return $token;

}

2).然后是Session令牌生成函数(gen_stoken()):

function gen_stoken() {

$pToken = "";

if($_SESSION[STOKEN_NAME] == $pToken){

//没有值,赋新值

$_SESSION[STOKEN_NAME] = gen_token();

}

else{

//继续使用旧的值

}

}

?>

2).WEB表单生成隐藏输入域的函数:

function gen_input() {

gen_stoken();

echo “

value=\”" . $_SESSION[STOKEN_NAME] . “\”> “;

}

?>

3).WEB表单结构:

session_start();

include(”functions.php”);

?>

gen_input(); ?>

4).服务端核对令牌:

客户端验证

CSRF漏洞 内容 1.CSRF漏洞的概述 2.CSRF漏洞的原理 3.CSRF漏洞的分类与利用 4.CSRF漏洞的挖掘与防御 背景 CSRF(Cross-Site Request Forgery,跨站请求伪造),它是一种常见的Web攻击方式,很多开发者对它很陌生。它在2007年曾被列为互联网20大安全隐患之一。即使是大名鼎鼎的Gmail,在2007年底也存在CSRF漏洞,从而被黑客造成巨大的损失。 什么是CS... 阅读详情

相关推荐

DVWA(Web 渗透的靶机环境)+csrf漏洞练习

用来进行安全脆弱性鉴定的PHP/MySQL Web 应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。十个攻击模块,分别是:1、Brute Force(暴力(破解))、2、Command Injection(命令行注入)、3、CSRF(跨站请求伪造)、4、- File Inclusion(文件包含)、5、File Upload(文件上传)、6、Insecure CAPTCHA (不安全的验证码)、

net的博客 1万+

php代码命令执行漏洞-常见危险函数

php代码/命令执行漏洞-常见危险函数 php代码执行相关 eval() mixed eval ( string $code ) 把字符串code作为php代码执行。常见的一句话木马: <?php eval($_GET['pass']) ?> 访问: http://xxx/codeexec.php?pass=phpinfo(); 得到phpinfo()页面。 assert() PHP 5 bool assert ( mixed $assertion [, string $desc

qq_41272376的博客 6394

高通Sensor Tuning实战:手把手教你用Chromatix生成并打包bin文件(附避坑指南)

本文详细介绍了高通Sensor Tuning的全流程实战,从Chromatix配置到Bin文件加载验证。通过手把手教程,帮助开发者掌握Chromatix工具链的使用,避免常见配置错误,提升调试效率。特别针对kalama等新一代平台,提供经过验证的解决方案和避坑指南。

ios99的博客 450

跨站请求伪造(CSRF)解决方案

1)验证HTTP Referer字段 根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。 比如某银行的转账是通过用户访问http://bank.com/XX?XX=xx&amp;XX=xx页面完成,用户必须先登录bank.com,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,...

SmallTenMr的博客 5425

Web 安全 PHP 代码审查之常规漏洞

工欲善其事,必先利其器。我们做代码审计之前选好工具也是十分必要的。下面我给大家介绍两款代码审计中比较好用的工具。功能介绍RIPS 是一款基于 PHP 开发的针对 PHP 代码安全审计的软件。另外,它也是一款开源软件,由国外安全研究员 Johannes Dahse 开发,程序只有 450KB,目前能下载到的最新版是0.55。在写这段文字之前笔者特意读过它的源码,它最大的亮点在于调用了 PHP 内置解析器接口。

qq_44005305的博客 2237

csrf漏洞与ssrf漏洞

跨站请求伪造(CSRF漏洞是一种Web应用程序安全漏洞,攻击者通过伪装成受信任用户的请求来执行未经授权的操作。这可能导致用户在不知情的情况下执行某些敏感操作,如更改密码、发送消息等。要防止CSRF攻击,可以使用随机生成的令牌来验证每个请求的来源和合法性。CSRF利用流程:攻击者发现CSRF漏洞-->构造代码-->发送给受害人-->受害人打开-->受害人执行代码-->完成攻击CSRF利用条件1.用到了cookie鉴权2.被攻击方鉴权未过期3.知道目标网站请求的详细信息。

lin__ying的博客 1347

php代码审计学习路线

通过上述路线,你将逐步掌握从PHP开发基础到漏洞挖掘与修复的完整知识体系。建议在学习过程中,多进行实战演练,不断积累审计经验,并积极参与安全社区讨论与比赛。这样,你不仅能够熟练掌握PHP代码审计的技能,还能为职业发展奠定良好的基础。

wanggonghanfei的博客 1024

php代码审计靶场,记一次简单的php代码审计

PHP代码审计所需工具:(1)环境:PHPstudy我这里直接使用phpstudy。其他的如:xampp,lamp等集成环境都可以。Phpsyudy官网地址:https://www.xp.cn(2)代码审计工具:“工欲善其事,必先利其器。”一款好的代码审计工具可以辅助我们的白盒测试,提高挖掘漏洞的效率。下面我来介绍一下两款常用的代码审计工具。1.RIPSRips是PHP语言开发的一款流行的审...

weixin_36326528的博客 612

Web 安全 PHP 代码审查之常规漏洞_rips工具漏洞利用生成的php代码如何使用(1)

XSS 又叫 CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入其中 Web 里面的 html 代码会被执行,从而达到恶意的特殊目的。XSS 属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。在 WEB2.0 时代,强调的是互动,使得用户输入信息的机会大增,在这个情况下,我们作为开发者,在开发的时候,要提高警惕。

2401_84296945的博客 659

CSRF-代码审计+检测绕过

数据包保存为html文件导出,打开文件删除除了添加管理员用户的其他表单,将文件放到服务器让目标管理员访问。检测代码的意思就是:收到请求时检测请求里的referer值是否和Host值相同,不相同就不执行请求。2.借目标——在目标网站寻找可上传地方,上传请求数据包,获取目标同域名访问地址。1.伪造——需要在添加管理员用户的请求数据包文件中”固定来源“3.复现失败——看代码——完美过滤(无法绕过)——没有漏洞。2.复现失败——看代码——缺陷过滤(成功绕过)——有漏洞。目标管理员访问链接,成功创建管理员用户。

xiaoheizi的博客 509

PHP代码审计入门-DVWA靶场CSRF

从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,数据库是navicat,需要有基本的前端基础、简单的php+mysql后端基础、渗透知识和漏洞原理,文章跟随流沙前辈学习记录,看看曾经遥不可及的代码审计能不能慢慢啃下来。好的,文章内容代码不是重点,重点是逻辑和漏洞。然后产生疑惑, &dvwaSessionGrab函数为什么要加& ,百度一番没看懂,吐槽一下:他喵的就不能用朴实无华的语言写出来,非得装杯。因为什么限制也没做。

身高两米不到的博客 1343

PHP代码审计 ------------CSRF漏洞

CSRF( Cross-site request forgery)跨站请求伪造,也有人写出XSRF。黑客伪造用户木匾用户的HTTP请求。然后将这个HTTP请求发送给存在CSRF的网站,有CSRF的网站执行了伪造的HTTP请求,就引发了跨站请求伪造相对来说,比xss更具有危害性,

qq_62344745的博客 360

PHP代码审计笔记--CSRF漏洞

PHP代码审计笔记--CSRF漏洞   CSRF(Cross-site request forgery)跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行和难以防范,所以被认为比XSS更具危险性。 漏洞防范: 1、增加Token/Referer验证 2、增加验证码 ...

520

csrf漏洞php代码审计1

1)原理 当我们打开或登录某个网站,浏览器与网站所存放的服务器会产生一个会话,之后一段时间,所有通过这个认证会话的请求,都会被视为可信的动作,比如此时你正登录网上银行,正在转账,此时攻击者构造恶意转账代码,当你不小心点击它时,就会完成相应的转账操作,因为此时浏览器认为这是可信的正常操作。 (2)分类dvwa low 我们可以看到low难度的源代码中,并没有添加token,且修改密码是通过get请求发送,该修改请求可以构造 。 medium 前端代码还是一样的,没有添加token,分析.

m0_55772907的博客 377

PHP-代码审计-CSRF

挖掘经验 黑盒挖掘 抓包看看有没有token,如果没有token的话,再请求该页面,不带referer,如果返回数据还是一样很可能就存在csrf漏洞 白盒挖掘 读代码的时候,看看几个核心文件有没有验证token和referer相关的代码,这里的核心文件指的是被大量文件引用的基础文件,或者直接搜token这个关键字找,如果核心文件没有,再去看看你关心的功能点的代码有没有验证 漏洞防范 添加token验证 ...

weixin_44110913的博客 278

Python爬虫零基础入门【第九章:实战项目教学·第17节】内容指纹去重:URL 变体/重复正文的识别!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 786

中国政区图矢量,到村级别

中国政区图矢量,到村级别,KML格式,支持转shp格式。

上一篇: 如何在日志中查找mysql日志临时密码_通过查询日志定位持有锁的SQL语句
下一篇: 视频监控异常检测 python_Python异常的检测和处理方法
Axeel Ander
博客等级 码龄8年 36粉丝 92原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值