常見的WEB安全漏洞

安全漏洞分類

作用於服務端的漏洞,作用於客戶端的漏洞

常見的服務端漏洞

不好的設計

基於機制不可知來隱藏敏感信息是不安全的

<?php
// 用可預測的COOKIE值判斷管理員
if ('admin' == $_COOKIE['role']) {
    echo 'Welcom, admin';
    echo 'You can do whatever you want';
}

// 基於MD5生成TOKEN
$name = $_POST['name'];
$passwd = $_POST['passwd'];

// hello hacker, we use double md5, crack it if you can
// http://www.cmd5.com/
$passwd = md5(md5($passwd));

register($name, $passwd);

非法文件上傳

形成漏洞的前提:

  • 上傳的文件能夠被Web容器解釋執行。所以文件上傳後所在的目錄要是Web容器所覆蓋到的路徑。
  • 用戶能夠從Web上訪問這個文件。如果文件上傳了,但用戶無法通過Web訪問,或者無法得到Web容器解釋這個腳本,那麼也不能稱之爲漏洞。

錯誤的做法:

  • 對於上傳的文件不做限制
  • 允許上傳的文件改名,對改的名字不做限制

正確的做法:

  • 白名單限制上傳文件的類型
  • 拋棄原始文件名,按規則生成新的文件名
  • 只提供上傳功能:不要允許改名
  • 上傳的文件單獨存放,取消執行權限

sql注入

就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。

// http://10.94.43.36:8112/sqlinject.php?username=&password=%27%20or%20%27%27=%27

<?php
$username = $_GET['username'];
$password = $_GET['password'];

$conn = mysql_connect('127.0.0.1', 'root', '') or die("connect failed". mysql_error());
mysql_select_db('user', $conn);

$sql = "select name,password from student where 
    name='$username' and password='$password'";

$ret = mysql_query($sql, $conn);

$result = [];
while ($row = mysql_fetch_array($ret)) {
    $result[] = $row;
}

$data = [
   'sql' => $sql,
   'data' => $result,
];

exit(json_encode($data));

命令執行

不可信的用戶輸入跨越邊界進入SHELL

// http://10.94.43.36:8112/rce.php?cmd=whoami
// system函數
$cmd = $_GET['system'];

if (!empty($cmd)) {
    system($cmd);
}

// http://10.94.43.36:8112/rce.php?eval=echo%20%27helloword%27;
// eval函數: eval() 函數把字符串按照 PHP 代碼來計算。

$cmd = $_GET['eval'];

if (!empty($cmd)) {
    eval($cmd);
}

內網代理

不可信的用戶輸入跨越邊界進入網絡訪問或文件系統

信息泄露

報錯信息(sql, stacktrace)
物理路徑泄露
用戶信息泄露

本身不會帶來很嚴重問題,但是可能會幫助黑客更快的攻克你的系統

常見的客戶端漏洞

xss

什麼是XSS?跨站腳本攻擊(Cross Site Scripting)
反射型
持久型
DOM型

// http://xxxx:8112/xsstest.php?username=%3Cscript%3Ealert(document.cookie)%3C/script%3E  

header('X-XSS-Protection:0');
header('Content-Security-Policy:0');

$username = $_GET['username'];

echo 'Welcom ' . $username;

csrf

CSRF(Cross-site request forgery跨站請求僞造,也被稱爲“One Click Attack”或者Session Riding,通常縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS非常不同,並且攻擊方式幾乎相左。XSS利用站點內的信任用戶,而CSRF則通過僞裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認爲比XSS更具危險性。

// http://xxxx:8112/csrftest.php

header('X-XSS-Protection:0');
header('Content-Security-Policy:0');

$username = $_GET['username'];

$test = '<img src="https://passport.baidu.com/passport/?logout"/>';

echo $test;

Json Hijack

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