XSS初探

XSS 漏洞初探

0X00 前言

Web发展至今,前端危害最大的是XSS(跨站脚本)和CSRF(跨站请求)漏洞。javascript

  • 非持久XSS攻击:该类的xss攻击是一次性的,仅仅会当前页面的访问产生影响;攻击者要求用户访问一个被攻击者篡改后的链接,用户访问该连接时,被植入的攻击脚本被用户浏览器执行,从而达到攻击目的。
  • 反射性XSS:通过后端,不通过数据库
  • 存储型XSS:通过后端和数据库
  • DOM型xss:不通过后端,DOM—based XSS漏洞是基于文档对象模型DOM的一种漏洞,DOM—xss是经过URL传入参数去控制触发的。

0X01 反射型 XSS

  • 反射型XSS.php文件
<from action="" method="get">
    <input type="text" name="xss"/> 文本框
    <input type="submit" value="test"/>  按钮
</from>
<?php
    $xss=@$_GET['xss'];
    if($xss!==null) {
        echo $xss;
    }
?>

代码说明:php

包含一个表单,用于向页面本身发送GET请求,带一个名为xss的参数;php读取该参数且不为空则echo输出xss参数内容。这里没有设置任何过滤和检查机制,因此xss会执行任何的代码包含 )在输出弹窗后HTML代码也会被改写;html

  • 反射型xss:前端

    浏览器 —> 后端 —> 浏览器页面java

0X02 存储型 XSS

  • 存储型xss.php文件:
<form action="" method="post">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>
<?php
    $xss=@$_POST['xss'];
    $con = mysqli_connect("127.0.0.1","root","123456");// 链接mysql
    mysqli_select_db($con,"xss");// 链接xss库
    if($xss!==null){
        $sql="insert into temp(id,payload) values('1','$xss')";
        $result=mysqli_query($con,$sql);
        echo $result;
    }
?>

用户输入的内容仍是没有过滤,可是并非显示在页面中,而是执行php+mysql命令将内容插入到数据库中;mysql

mysqli_connect(servername/ip , username , password):sql

​ 设置数据库的登陆地址,数据库登陆名,登陆密码等数据库

​ 创建MySQL数据库链接后端

【PHP 5.5+ 再也不使用connect进行链接数据库,改用MySQLi或PDO_MySQL来进行链接】浏览器

mysqli_close() : 关闭数据库链接

mysqli_select:从数据库表中选取数据

​ mysqli_select_db():选取数据库

mysqli_query(参数/sql命令):执行sql命令,可使用参数存储一个sql命令也能够在query中直接写明sql命令

ps:在输入提交script脚本时候注意字符转义的问题哦

  • show.php
<?php
    $sql = mysqli_connect("localhost","root","123456");
    mysqli_select_db($sql,"xss");
    $shl="select payload from temp where id=1";
    $result=mysqli_query($sql,$shl);
    while($row=mysqli_fetch_array($result)){
        echo $row['payload'];
    }
?>

show.php文件的做用:

链接数据库打开xss库,执行sql命令查看temp表中的内容

  • 总结:

上述的存储型XSS的流程是:

经过xss.php程序将xss脚本写入数据库中,在经过show.php查看存储在数据库中的xss脚本,以此达到解析脚本的方法。

xss数据从浏览器通过后端写入到数据库中,在通过后端调用数据库内容显示在页面上。

0X03 DOM型 XSS

<?php
    error_reporting(0);//禁用报错
    $name = $_GET["name"];
?>
<input id="text" type="text" value="<?php echo $name; ?>"/>
<div id="print"></div>
<script type="text/javascript">
    var text = document.getElementById("text");
    var print = document.getElementById("print");
    print.innerHTML = text.value ;// 获取text值输出print
</script>

对xss.php进行分析:

php接收一个name的get请求,input标签中 id:text得到了name设置的请求值,在script中,print输出并将text的内容一并输出,而text的值就是name的请求内容(经过URL进行构造)

而构造的URL:http://localhost/xss.php?name=< img src=1 onerror=alert(1)>

含义是:name为调用一个 1 文件照片信息(img),若是不存在报错弹出窗口(alert)并显示内容为 1 。

0X04 漏洞利用初探

经过xss跨站脚本,来得到用户的Cookie和其余有用的信息,利用平台的特性,xss利用诸如:xss Shell ,BeEF,Anehta,CAL9000……

相关文章
相关标签/搜索