網絡安全自學篇-PHP代碼審計(五)

一個網絡安全小白在學習過程中記錄下的筆記,希望在CSDN能和大家一起成長,學習,分享,進步,下面分享的是代碼審計中命令執行以及跨站腳本攻擊的案例,希望對入門代碼審計的朋友們有所幫助,大神有興趣看看即可,勿噴感謝,同時也歡迎各位師傅私聊交流學習。文章有所參考,也感謝教授我網安知識的師父們,感謝出生在這個互聯網時代,知識觸手可及。

命令執行

命令執行漏洞
原理:攻擊者通過存在命令執行漏洞的應用程序在主機操作系統上執行任意命令(注意與代碼注入區分開),代碼執行的效果取決於語言本身,而命令執行不取決於語言,也不收命令本身限制。
挖掘思路:
1、用戶能夠控制函數輸入
2、存在能夠執行代碼的危險函數
命令執行的類型:
1、代碼層面過濾不嚴格
2、系統本身存在的漏洞
3、第三方組件存在漏洞
常見的危險函數有(``):
system、exec、passthru、shell_exec
1、system

 system ( string $command [, int &$return_var ] ) : string
 //command要執行的命令。return_var如果提供 return_var 參數, 則外部命令執行後的返回狀態將會被設置到此變量中。

在這裏插入圖片描述
2、passthru

  passthru ( string $command [, int &$return_var ] ) : void
 //command要執行的命令。return_var如果提供 return_var 參數, 如果提供 return_var 參數, Unix 命令的返回狀態會被記錄到此參數。 

在這裏插入圖片描述
3、exec(結果需要用echo回顯,只顯示一行)

   exec ( string $command [, array &$output [, int &$return_var ]] ) : string
 //command要執行的命令。 output如果提供了 output 參數, 那麼會用命令執行的輸出填充此數組, 每行輸出填充數組中的一個元素。 數組中的數據不包含行尾的空白字符,例如 \n 字符。 請注意,如果數組中已經包含了部分元素,exec() 函數會在數組末尾追加內容。如果你不想在數組末尾進行追加, 請在傳入 exec() 函數之前 對數組使用 unset() 函數進行重置。 return_var,如果同時提供 output 和 return_var 參數, 命令執行後的返回狀態會被寫入到此變量

在這裏插入圖片描述
4、shell_exec(結果需要用echo回顯,顯示全部)

    shell_exec ( string $cmd ) : string
 //command要執行的命令。

在這裏插入圖片描述
5、反引號``
在這裏插入圖片描述

XSS

跨站腳本攻擊
原理:攻擊者利用應用程序存在過濾不嚴的弱點輸入可以顯示在頁面上對其他用戶造成影響的惡意代碼。
挖掘思路:
參數無過濾並傳入輸出函數
1、搜索內容
2、發表文章
3、留言
4、評論回覆
5、資料設置
1、反射型(輸入–輸出)
案例:
1、將前端獲取的內容直接輸出到瀏覽器頁面

$content = $_GET['xss'];
echo $content;

在這裏插入圖片描述
2、將前端獲取的內容直接輸出到HTML標籤

<?php
$content = $_GET['xss'];
?>
<input type="text" value="<?php echo $content;?>">

閉合後的標籤

<body><input type="text" value=""><script>alert(/xss/)</script>"&gt;</body>

在這裏插入圖片描述
3、將前端獲取的內容直接輸出到

<?php
$content = $_GET['content'];
?>
<script>
    var xss = '<?php echo $content?>';
    document.write(xss);
</script>

在這裏插入圖片描述
2、存儲型(輸入–進入數據庫–取出數據-輸出)
xss.php

<?php
header("content-type:text/html;charset=utf-8");
$content = $_POST['content'];
$conn = mysql_connect("localhost","root","root");
mysql_select_db("xss",$conn);
if ($content != null) {
    $sql = "INSERT INTO xss VALUES ('1','$content');";
    $result = mysql_query($sql) or die('執行SQL語句失敗'.mysql_error());
}
?>
<form action="" method="post">
    <input type="text" name="content">
    <input type="submit" value="提交">
</form>

show.php

<?php
$conn = mysql_connect("localhost","root","root");
mysql_select_db("xss",$conn);
$sql = "SELECT payload FROM xss where id=1";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
    echo $row['payload'];
}

插入數據
在這裏插入圖片描述
顯示
在這裏插入圖片描述
在這裏插入圖片描述

3、DOM型(可能是存儲型也可能是反射型)
數據流向:URL->瀏覽器
案例:

<?php
$content = $_GET['content'];
?>
<input type="text" id="tid" value="<?php echo $content;?>">
<div id="show">
    <script>
        var text = document.getElementById("tid");
        var show = document.getElementById("show");
        show.innerHTML = tid.value;
    </script>

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章