XSS与CSRF

it2022-05-05  119

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]; a[i]=a[i]/10; int y=a[i]; a[i]=a[i]/10; int z=a[i]; 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)