XSS与CSRF

XSS

    反射型XSS,也叫做“非持久型XSS”,只是简单的把用户输入的数据“反射”给浏览器;

    存储型XSS,也叫做“持久型XSS”,会把用户输入的数据“存储在”服务器端。常见的场景是,黑客写下一篇含有恶意JavaScript代码的博客文章,文章发表后,所有访问该博客文章的用户,都会在他们的浏览器中执行这段恶意的JavaScript代码;

    DOM Based XSS,从效果来说也是反射型XSS,单独划分出了是因为DOM Based XSS的形成原因比较特殊,通过修改页面的DOM节点形成的XSS

 

HTML基本语法

HTML 标签是由尖括号包围的关键词,比如 <html>
HTML 标签通常是成对出现的,比如 <b> 和 </b>
标签对中的第一个标签是开始标签,第二个标签是结束标签
开始和结束标签也被称为开放标签和闭合标签

<!DOCTYPE html> <!-- 声明这是HTML5文档 -->
<html> <!-- HTML有两部分组成,head部分与body部分 -->
    <head>
        <meta charset="utf-8"> <!-- 指定编码方式 -->
        <title>我是文章标题</title>
    </head>
    <body>
        <h2>我是2号标题</h2>
        <input type='text' name='input' placeholder="我是文本输入框">
        <input type='submit' value='我是确定按钮'>
    </body>
</html>

CSS基本语法

规则由两个主要的部分构成:选择器,以及一条或多条声明。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>我是文章标题</title>
        <style type="text/css">
            /* 设置CSS样式 */
            h2 {
                color:red; font-size: 14px;
            }
        </style>
    </head>
    <body>
        <h2>我是2号标题</h2>
        <input type='text' name='input' placeholder="我是文本输入框">
        <input type='submit' value='我是确定按钮'>
    </body>
</html>

javascript 语法

在 HTML 中,JavaScript 代码必须位于 <script> 与 </script> 标签之间。
 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>我是文章标题</title>
        <script type="text/javascript">
            //弹窗
            alert('hello world');
        </script>
            
    </head>
    <body>
        <h2>我是2号标题</h2>
        <input type='text' name='input' placeholder="我是文本输入框">
        <input type='submit' value='我是确定按钮'>
    </body>
</html>

成果

 

   

 

XSS挑战

第一题,比较简单,就不放图,直接在URL后加上<script>alert(1)</script>就通关了。

第二题

打开这之后发现源代码value=“ ”里面是空的,就想着把URL改了,但是keyword还必须有东西,

注意要参考源代码里test的格式,不能少了右边的尖括号还有双引号。

<script>alert(1)</script>这段代码写进去之后,跳出弹窗,证明是xss.

 

补充一个题目,bugku上面一个普通的二维码

 

16进制编辑器打开发现末尾,发现有一串数字,没有8,应该是八进制,下面就要写脚本,

 

 

把八进制转换为十进制,再转换为字符,就OK啦。

脚本如下:

package java_lianxi;

import java.util.Scanner;

public class 八进制转十进制 {

public static void main(String[] args) {
// TODO 自动生成的方法存根
String str;
String sr="";
int[] a=new int[42];
Scanner sc=new Scanner(System.in);
str=sc.next();
int n=str.length();
int num=0;
for(int i=0;i<n;i++) {
sr=sr+str.charAt(i);
if((i+1)%3==0&&i!=0) {
a[num]=Integer.parseInt(sr);
sr="";
num++;
}
}
int sum;
char sum2;
for(int i=0;i<num;) {
int x=a[i]%10;
a[i]=a[i]/10;
int y=a[i]%10;
a[i]=a[i]/10;
int z=a[i]%10;
sum=x+y*8+z*8*8;
sum2=(char)(sum);
System.out.print(sum2);
sum=0;
i++;
}
// for(int i=0;i<num;i++) {
// System.out.println(a[i]);
// }
}

}

DOM Based XSS

当输入内容点击“write”按钮后,会在当前页面插入一个超链接,其地址为文本框内容

<!DOCTYPE html>

<html>
<head>
    <title></title>
    <script type="text/javascript">
        function test(){
            //getElementById():查找并定位id元素
            //定义一个变量str,获取id为text的值
            var str = document.getElementById("text").value;
            //将超链接写入id为t的标签中
            document.getElementById("t").innerHTML = "<a href='" + str + "' >testLink</a>";
        }

    </script>
</head>
<body>
    <div id="t"></div>
    <input type="text" id="text">
    <input type=“submit” value=“write” onclick=“test()”> <!– 当点击按钮时,会触发JavaScript的test函数 -->
</body>
</html>

构造如下数据:

‘ οnclick=alert(1)//

输入后,页面代码就变成了:<a href=‘ ‘ οnclick=alert(1)//’ >testLink</a>

CSRF,

Cross Site Request Forgery,即跨站点请求伪造

它是一种常见的Web攻击,也是Web安全中最容易被忽略的一种攻击方式

它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。

一般攻击方式为攻击者诱使用户访问了一个页面,就以该用户身份在第三方站点里执行了一次操作

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值