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……

相關文章
相關標籤/搜索