tomcat temp 大量 upload 文件_滲透測試之文件上傳漏洞總結

873eb8e20da306e7a60a30d794f2fa58.png

文末下載上傳環境源碼

客戶端

js檢查

一般都是在網頁上寫一段javascript腳本,校驗上傳文件的后綴名,有白名單形式也有黑名單形式。

cb0a517f1e832cd9a298d30ec2480785.png

查看源代碼可以看到有如下代碼對上傳文件類型進行了限制:

我們可以看到對上傳文件類型進行了限制。

繞過方法

1.我們直接刪除代碼中onsubmit事件中關于文件上傳時驗證上傳文件的相關代碼即可。

73eb62819e69ec3901317d7e722273ff.png

或者可以不加載所有js,還可以將html源碼copy一份到本地,然后對相應代碼進行修改,本地提交即可。

2.burp改包,由于是js驗證,我們可以先將文件重命名為js允許的后綴名,在用burp發送數據包時候改成我們想要的后綴。

ec8f60e8cf14f957fbd7ee58b56ee84b.png

即可上傳成功:

eea7fa1fc03c64881eaf2ee9285433dc.png

服務端

黑名單

特殊可解析后綴

? ?

 if (file_exists(UPLOAD_PATH)) {        $deny_ext = array('.asp','.aspx','.php','.jsp');        $file_name = trim($_FILES['upload_file']['name']);        $file_name = deldot($file_name);//刪除文件名末尾的點        $file_ext = strrchr($file_name, '.');        $file_ext = strtolower($file_ext); //轉換為小寫        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA        $file_ext = trim($file_ext); //收尾去空        if(!in_array($file_ext, $deny_ext)) {            $temp_file = $_FILES['upload_file']['tmp_name'];            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            if (move_uploaded_file($temp_file,$img_path)) {                 $is_upload = true;            } else {                $msg = '上傳出錯!';            }        } else {            $msg = '不允許上傳.asp,.aspx,.php,.jsp后綴文件!';        }    } else {        $msg = UPLOAD_PATH . '文件夾不存在,請手工創建!';    }

這里做了黑名單處理,我們可以通過特殊可解析后綴進行繞過。

繞過方法

之前在4中總結過,這里不再贅述,可以使用php3,phtml等繞過。

dd22ae456a1e7f82359a693114bd6981.png

上傳.htaccess

if (isset($_POST['submit'])) {    if (file_exists(UPLOAD_PATH)) {        $deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");        $file_name = trim($_FILES['upload_file']['name']);        $file_name = deldot($file_name);//刪除文件名末尾的點        $file_ext = strrchr($file_name, '.');        $file_ext = strtolower($file_ext); //轉換為小寫        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA        $file_ext = trim($file_ext); //收尾去空        if (!in_array($file_ext, $deny_ext)) {            $temp_file = $_FILES['upload_file']['tmp_name'];            $img_path = UPLOAD_PATH.'/'.$file_name;            if (move_uploaded_file($temp_file, $img_path)) {                $is_upload = true;            } else {                $msg = '上傳出錯!';            }        } else {            $msg = '此文件不允許上傳!';        }    } else {        $msg = UPLOAD_PATH . '文件夾不存在,請手工創建!';    }}?>

我們發現黑名單限制了很多后綴名,但是沒有限制.htaccess

.htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置.通過htaccess文件,可以實現:網頁301重定向、自定義404頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。

繞過方法

我們需要上傳一個.htaccess文件,內容為:

SetHandler application/x-httpd-php

這樣所有的文件都會解析為php,接下來上傳圖片馬即可

7a337593c4f7a4b3e943800515aa9418.png

4e48807734800f48d90bcfa0425b5fd9.png

后綴大小寫繞過

if (isset($_POST['submit'])) {    if (file_exists(UPLOAD_PATH)) {        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");        $file_name = trim($_FILES['upload_file']['name']);        $file_name = deldot($file_name);//刪除文件名末尾的點        $file_ext = strrchr($file_name, '.');        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA        $file_ext = trim($file_ext); //首尾去空        if (!in_array($file_ext, $deny_ext)) {            $temp_file = $_FILES['upload_file']['tmp_name'];            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            if (move_uploaded_file($temp_file, $img_path)) {                $is_upload = true;            } else {                $msg = '上傳出錯!';            }        } else {            $msg = '此文件類型不允許上傳!';        }    } else {        $msg = UPLOAD_PATH . '文件夾不存在,請手工創建!';    }}

我們發現對.htaccess也進行了檢測,但是沒有對大小寫進行統一。

繞過方法

后綴名改為PHP即可

cae5cfbdeb5302eeb0f20aad0f15ce88.png

空格繞過

if (isset($_POST['submit'])) {    if (file_exists(UPLOAD_PATH)) {        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");        $file_name = $_FILES['upload_file']['name'];        $file_name = deldot($file_name);//刪除文件名末尾的點        $file_ext = strrchr($file_name, '.');        $file_ext = strtolower($file_ext); //轉換為小寫        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA        if (!in_array($file_ext, $deny_ext)) {            $temp_file = $_FILES['upload_file']['tmp_name'];            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            if (move_uploaded_file($temp_file,$img_path)) {                $is_upload = true;            } else {                $msg = '上傳出錯!';            }        } else {            $msg = '此文件不允許上傳';        }    } else {        $msg = UPLOAD_PATH . '文件夾不存在,請手工創建!';    }

黑名單沒有對文件中的空格進行處理,可在后綴名中加空格繞過。

繞過方法

589048e9aa82fc7b38436e47fdf05e56.png

點繞過

if (isset($_POST['submit'])) {    if (file_exists(UPLOAD_PATH)) {        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");        $file_name = trim($_FILES['upload_file']['name']);        $file_ext = strrchr($file_name, '.');        $file_ext = strtolower($file_ext); //轉換為小寫        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA        $file_ext = trim($file_ext); //首尾去空        if (!in_array($file_ext, $deny_ext)) {            $temp_file = $_FILES['upload_file']['tmp_name'];            $img_path = UPLOAD_PATH.'/'.$file_name;            if (move_uploaded_file($temp_file, $img_path)) {                $is_upload = true;            } else {                $msg = '上傳出錯!';            }        } else {            $msg = '此文件類型不允許上傳!';        }    } else {        $msg = UPLOAD_PATH . '文件夾不存在,請手工創建!';    }

windows會對文件中的點進行自動去除,所以可以在文件末尾加點繞過,不再贅述

::$DATA繞過

同windows特性,可在后綴名中加” ::$DATA”繞過,不再贅述

路徑拼接繞過

if (isset($_POST['submit'])) {    if (file_exists(UPLOAD_PATH)) {        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");        $file_name = trim($_FILES['upload_file']['name']);        $file_name = deldot($file_name);//刪除文件名末尾的點        $file_ext = strrchr($file_name, '.');        $file_ext = strtolower($file_ext); //轉換為小寫        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA        $file_ext = trim($file_ext); //首尾去空        if (!in_array($file_ext, $deny_ext)) {            $temp_file = $_FILES['upload_file']['tmp_name'];            $img_path = UPLOAD_PATH.'/'.$file_name;            if (move_uploaded_file($temp_file, $img_path)) {                $is_upload = true;            } else {                $msg = '上傳出錯!';            }        } else {            $msg = '此文件類型不允許上傳!';        }    } else {        $msg = UPLOAD_PATH . '文件夾不存在,請手工創建!';    }}

這里對文件名進行了處理,刪除了文件名末尾的點,并且把處理過的文件名拼接到路徑中。

繞過方法

cb20dba0aff9bfcc1387a54ce707bee5.png

這里我們可以構造文件名1.PHP. . (點+空格+點),經過處理后,文件名變成1.PHP.,即可繞過。

14e170f9976aba2bb7a37e085c9b16bb.png

雙寫繞過

if(file_exists(UPLOAD_PATH)) {


$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創建!';
}
}

繞過方法

這里我們可以看到將文件名替換為空,我們可以采用雙寫繞過:1.pphphp

a47c4ca6aec4fb5d19cf14193c48e31f.png

a0a2a33b8005d9f0bbbeb33f21d4622a.png

白名單

MIME檢查

if (isset($_POST['submit'])) {    if (file_exists(UPLOAD_PATH)) {        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {            $temp_file = $_FILES['upload_file']['tmp_name'];            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];            if (move_uploaded_file($temp_file, $img_path)) {                $is_upload = true;            } else {                $msg = '上傳出錯!';            }        } else {            $msg = '文件類型不正確,請重新上傳!';        }    } else {        $msg = UPLOAD_PATH.'文件夾不存在,請手工創建!';    }

繞過方法

這里檢查Content-type,我們burp抓包修改即可繞過:

d5f19f365d5d7f4ed41c6f846137774f.png

%00 截斷

if(isset($_POST['submit'])){    $ext_arr = array('jpg','png','gif');    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);    if(in_array($file_ext,$ext_arr)){        $temp_file = $_FILES['upload_file']['tmp_name'];        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;        if(move_uploaded_file($temp_file,$img_path)){            $is_upload = true;        } else {            $msg = '上傳出錯!';        }    } else{        $msg = "只允許上傳.jpg|.png|.gif類型文件!";    }}

$img_path直接拼接,因此可以利用%00截斷繞過

繞過方法

a7abf59fed49fdd1f03d05f632e679ae.png

然后直接訪問/upload/1.php即可

6dff73d65bac666ecc434c701ce72fb7.png

00截斷(post)

if(isset($_POST['submit'])){    $ext_arr = array('jpg','png','gif');    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);    if(in_array($file_ext,$ext_arr)){        $temp_file = $_FILES['upload_file']['tmp_name'];        $img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;        if(move_uploaded_file($temp_file,$img_path)){            $is_upload = true;        } else {            $msg = "上傳失敗";        }    } else {        $msg = "只允許上傳.jpg|.png|.gif類型文件!";    }}?>

save_path是通過post傳進來的,還是利用00截斷,但這次需要在二進制中進行修改,因為post不會像get對%00進行自動解碼。

繞過方法

86a351faba27c5f0ead1839a50530884.png

a00c5188388df3a93f860c67d8ab1757.png

接下來訪問1.php即可

780ae84b5f4ff24731d5b8c88cc2952a.png

文件內容檢查

文件幻數檢測

主要是檢測文件內容開始處的文件幻數,比如圖片類型的文件幻數如下,
要繞過jpg 文件幻數檢測就要在文件開頭寫上下圖的值:

88767288ad172b6c2f18251ab94a7d7d.png

Value = FF D8 FF E0 00 10 4A 46 49 46

要繞過gif 文件幻數檢測就要在文件開頭寫上下圖的值

9333031770183ce9b4850d83b40f91f7.png

Value = 47 49 46 38 39 61
要繞過png 文件幻數檢測就要在文件開頭寫上下面的值

6f9174d4d0fc1075f6e387c2299b8dd6.png

Value = 89 50 4E 47

然后在文件幻數后面加上自己的一句話木馬代碼就行了

文件相關信息檢測

圖像文件相關信息檢測常用的就是getimagesize()函數

只需要把文件頭部分偽造好就ok 了,就是在幻數的基礎上還加了一些文件信息

有點像下面的結構

GIF89a
(...some binary data for image...)<?php phpinfo(); ?>
(... skipping the rest of binary data ...)

本次環境中的文件頭檢測,getimagesize,php_exif都可以用圖片馬繞過:

copy normal.jpg /b + shell.php /a webshell.jpg

文件加載檢測

一般是調用API 或函數去進行文件加載測試,常見的是圖像渲染測試,甚至是進行二次渲染(過濾效果幾乎最強)。對渲染/加載測試的攻擊方式是代碼注入繞過,對二次渲染的攻擊方式是攻擊文件加載器自身。

對渲染/加載測試攻擊- 代碼注入繞過

可以用圖像處理軟件對一張圖片進行代碼注入

用winhex 看數據可以分析出這類工具的原理是在不破壞文件本身的渲染情況下找一個空白區進行填充代碼,一般會是圖片的注釋區

對于渲染測試基本上都能繞過,畢竟本身的文件結構是完整的

2ab759d38fd63b66773fc795d986d334.png

二次渲染

imagecreatefromjpeg二次渲染它相當于是把原本屬于圖像數據的部分抓了出來,再用自己的API 或函數進行重新渲染在這個過程中非圖像數據的部分直接就隔離開了

if (isset($_POST['submit'])){    // 獲得上傳文件的基本信息,文件名,類型,大小,臨時文件路徑    $filename = $_FILES['upload_file']['name'];    $filetype = $_FILES['upload_file']['type'];    $tmpname = $_FILES['upload_file']['tmp_name'];    $target_path=UPLOAD_PATH.basename($filename);    // 獲得上傳文件的擴展名    $fileext= substr(strrchr($filename,"."),1);    //判斷文件后綴與類型,合法才進行上傳操作    if(($fileext == "jpg") && ($filetype=="image/jpeg")){        if(move_uploaded_file($tmpname,$target_path))        {            //使用上傳的圖片生成新的圖片            $im = imagecreatefromjpeg($target_path);            if($im == false){                $msg = "該文件不是jpg格式的圖片!";                @unlink($target_path);            }else{                //給新圖片指定文件名                srand(time());                $newfilename = strval(rand()).".jpg";                $newimagepath = UPLOAD_PATH.$newfilename;                imagejpeg($im,$newimagepath);                //顯示二次渲染后的圖片(使用用戶上傳圖片生成的新圖片)                $img_path = UPLOAD_PATH.$newfilename;                @unlink($target_path);                $is_upload = true;            }        } else {            $msg = "上傳出錯!";        }    }else if(($fileext == "png") && ($filetype=="image/png")){        if(move_uploaded_file($tmpname,$target_path))        {            //使用上傳的圖片生成新的圖片            $im = imagecreatefrompng($target_path);            if($im == false){                $msg = "該文件不是png格式的圖片!";                @unlink($target_path);            }else{                 //給新圖片指定文件名                srand(time());                $newfilename = strval(rand()).".png";                $newimagepath = UPLOAD_PATH.$newfilename;                imagepng($im,$newimagepath);                //顯示二次渲染后的圖片(使用用戶上傳圖片生成的新圖片)                $img_path = UPLOAD_PATH.$newfilename;                @unlink($target_path);                $is_upload = true;            }        } else {            $msg = "上傳出錯!";        }    }else if(($fileext == "gif") && ($filetype=="image/gif")){        if(move_uploaded_file($tmpname,$target_path))        {            //使用上傳的圖片生成新的圖片            $im = imagecreatefromgif($target_path);            if($im == false){                $msg = "該文件不是gif格式的圖片!";                @unlink($target_path);            }else{                //給新圖片指定文件名                srand(time());                $newfilename = strval(rand()).".gif";                $newimagepath = UPLOAD_PATH.$newfilename;                imagegif($im,$newimagepath);                //顯示二次渲染后的圖片(使用用戶上傳圖片生成的新圖片)                $img_path = UPLOAD_PATH.$newfilename;                @unlink($target_path);                $is_upload = true;            }        } else {            $msg = "上傳出錯!";        }    }else{        $msg = "只允許上傳后綴為.jpg|.png|.gif的圖片文件!";    }}

本關綜合判斷了后綴名、content-type,以及利用imagecreatefromgif判斷是否為gif圖片,最后再做了一次二次渲染。

繞過方法

得去找圖片經過GD庫轉化后沒有改變的部分,再將未改變的部分修改為相應的php代碼。

6627b07520ac5b6055367607cee3c8e7.png

條件競爭

if(isset($_POST['submit'])){    $ext_arr = array('jpg','png','gif');    $file_name = $_FILES['upload_file']['name'];    $temp_file = $_FILES['upload_file']['tmp_name'];    $file_ext = substr($file_name,strrpos($file_name,".")+1);    $upload_file = UPLOAD_PATH . '/' . $file_name;    if(move_uploaded_file($temp_file, $upload_file)){        if(in_array($file_ext,$ext_arr)){             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;             rename($upload_file, $img_path);             $is_upload = true;        }else{            $msg = "只允許上傳.jpg|.png|.gif類型文件!";            unlink($upload_file);        }    }else{        $msg = '上傳出錯!';    }}

這里先將文件上傳到服務器,然后通過rename修改名稱,再通過unlink刪除文件,因此可以通過條件競爭的方式在unlink之前,訪問webshell。

繞過方法

88dc2248f3308981849c7dc9f8b96851.png

然后不斷訪問webshell:

9aa11938568e66f81c9c11e036db3736.png

上傳成功。

參考鏈接:

  1. https://blog.csdn.net/Kevinhanser/article/details/81613003

  2. https://secgeek.net/bookfresh-vulnerability/

  3. https://xz.aliyun.com/t/2435

上傳環境源碼:https://github.com/c0ny1/upload-labs

更多推薦

內網橫向滲透的常用姿勢

滲透測試之提權方式總結

滲透測試之linux系統提權總結

國內SRC漏洞挖掘經驗和自用技巧

任意文件上傳漏洞 getshell 教程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446086.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446086.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux加密框架 crypto算法模板 以及HMAC算法模板實例

HMAC算法模板實例 HMAC算法模板的創建實例的接口是hmac_create函數hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlin hmac_create輸入的參數包括 算法模板 tmpl 和 算法模板實例參數 tbhmac_cretae函數返回的結果為0表示算法模板實例已經創建注冊算法模…

python判斷密碼強度并輸出_密碼強度判斷

[python]代碼庫def pdsz(cd):nnnn Falsefor c in cd:if c.isnumeric():nnnn Truebreakreturn nnnndef pdzm(cd):nnnn Falsefor c in cd:if c.isupper():nnnn Truebreakreturn nnnndef pdhh(cd):nnnn Falsefor c in cd:if c.islower():nnnn Truebreakreturn nnnndef main(…

linux加密框架 crypto 算法crypto_register_alg的注冊流程

算法注冊流程 靜態算法模塊初始化 分組算法模塊初始化 AES算法模塊&#xff08;aes_generic.c&#xff09;的初始化接口aes_init實現向加密框架注冊AES算法的功能&#xff0c;如下所示。aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.12) - Bootlin sta…

python 方法的實例_python調用自定義函數的實例操作

在python中&#xff0c;想要調用自定義函數必須先聲明&#xff0c;然后才能調用。使用函數時&#xff0c;只要按照函數定義的形式&#xff0c;向函數傳遞必需的參數&#xff0c;就可以調用函數完成相應的功能或者獲得函數返回的處理結果。(1)聲明函數python中使用 def 可以聲明…

linux加密框架 crypto 靜態哈希算法crypto_register_shash注冊流程

參考鏈接 Linux加密框架的算法管理&#xff08;一&#xff09;_家有一希的博客-CSDN博客_linux加密框架設計與實現shash.c - crypto/shash.c - Linux source code (v5.15.12) - Bootlin 函數介紹 crypto_register_shash函數實現向加密框架注冊靜態哈希算法的功能&#xff0c;…

多個線程訪問統一對象的不同方法_C#多線程讀寫同一文件處理

在多線程訪問讀寫同一個文件時&#xff0c;經常遇到異常&#xff1a;“文件正在由另一進程使用&#xff0c;因此該進程無法訪問此文件”。多線程訪問統一資源的異常&#xff0c;解決方案1&#xff0c;保證讀寫操作單線程執行&#xff0c;可以使用lock解決方案2&#xff0c;使用…

linux加密框架 crypto 通用算法注冊接口__crypto_register_alg注冊流程

函數介紹 __crypto_register_alg函數實現向加密框架注冊算法&#xff08;包括靜態算法和動態算法&#xff09;的功能&#xff0c;輸入參數為算法說明alg&#xff0c;注冊成功時返回算法注冊用的算法幼蟲larval&#xff0c;注冊失敗時返回失敗原因。__crypto_register_alg函數執…

spark官方文檔_Spark整合Ray思路漫談

什么是Ray之前花了大概兩到三天把Ray相關的論文&#xff0c;官網文檔看了一遍&#xff0c;同時特意去找了一些中文資料看Ray當前在國內的發展情況(以及目前國內大部分人對Ray的認知程度)。先來簡單介紹下我對Ray的認知。首先基因很重要&#xff0c;所以我們先需要探查下Ray最初…

python用http協議傳數據_python基礎 -- 簡單實現HTTP協議

標簽&#xff1a;一、直接代碼# -*- coding: utf-8 -*-import socket__author__ ‘lpe234‘__date__ ‘2015-03-12‘if __name__ ‘__main__‘:sock socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind((‘127.0.0.1‘, 8001))sock.listen(5)while True:connecti…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg

算法查找接口crypto_find_alg 算法實例tfm是算法的一個可運行的副本&#xff0c;因此在創建算法實例前首先要查找確認算法是否已經注冊有效&#xff0c;此時算法查找由函數crypto_find_alg實現。補充&#xff1a; struct crypto_tfm *tfm; crypto_tfm類型指針tfm可以理解為指代…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup

參考鏈接 Linux加密框架的算法管理&#xff08;二&#xff09;_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的博客-CSDN博客 函數介紹 crypto_alg_mod_lookup函數輸入參數包括待查找的算法名name、算法類型type和算…

qt triggered信號_Qt之網絡編程UDP通信

點擊上方“Qt學視覺”&#xff0c;選擇“星標”公眾號重磅干貨&#xff0c;第一時間送達想要學習的同學們還請認真閱讀每篇文章&#xff0c;相信你一定會有所收獲UDP通信概述UDP(UserDatagramProtocol&#xff0c;用戶數據報協議)是輕量的、不可靠的、面向數據報(datagram)、無…

adguard沒有核心 core no_面試官:線程池如何按照core、max、queue的執行順序去執行?...

前言這是一個真實的面試題。前幾天一個朋友在群里分享了他剛剛面試候選者時問的問題&#xff1a;"線程池如何按照core、max、queue的執行循序去執行&#xff1f;"。我們都知道線程池中代碼執行順序是&#xff1a;corePool->workQueue->maxPool&#xff0c;源碼…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_larval_lookup

參考鏈接 Linux加密框架的算法管理&#xff08;二&#xff09;_家有一希的博客-CSDN博客 crypto_larval_lookup函數介紹 crypto_larval_lookup函數的輸入參數包括待查找的算法名name、算法類型type和算法類型屏蔽位mask&#xff0c;查找命中時返回查找到的算法或注冊用算法幼…

python ssh 遠程登錄路由器執行命令_ssh批量登錄并執行命令(python實現)

局域網內有一百多臺電腦&#xff0c;全部都是linux操作系統&#xff0c;所有電腦配置相同&#xff0c;系統完全相同(包括用戶名和密碼)&#xff0c;ip地址是自動分配的。現在有個任務是在這些電腦上執行某些命令&#xff0c;者說進行某些操作&#xff0c;比如安裝某些軟件&…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函數

參考鏈接 Linux加密框架的算法管理&#xff08;二&#xff09;_家有一希的博客-CSDN博客 函數介紹 static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type,u32 mask) {struct crypto_alg *alg;u32 test 0;if (!((type | mask) & CRYPTO_ALG_TESTED))…

linux加密框架 crypto 算法管理 - 動態和靜態算法管理

參考鏈接 Linux加密框架的算法管理&#xff08;三&#xff09;_家有一希的博客-CSDN博客 動態和靜態算法管理 靜態算法 加密框架中的算法分為靜態算法和動態算法兩種&#xff0c;其中靜態算法指的是以"算法名.ko"形式存在的靜態編譯的算法模塊&#xff0c;如aes.k…

3分鐘入門python_3分鐘帶你了解世界第一語言Python 入門上手也這么簡單!

一、Python入門1. Python爬蟲入門一之綜述Python爬蟲入門二之爬蟲基礎了解Python爬蟲入門三之Urllib庫的基本使用Python爬蟲入門四之Urllib庫的高級用法Python爬蟲入門五之URLError異常處理Python爬蟲入門六之Cookie的使用Python爬蟲入門七之正則表達式Python爬蟲入門八之Beaut…

linux加密框架 crypto 算法管理 - 算法檢測

參考鏈接 Linux加密框架的算法管理&#xff08;四&#xff09;_家有一希的博客-CSDN博客 函數介紹 如前所述&#xff0c;無論是靜態算法還是動態算法&#xff0c;算法注冊的最后一步都是進行算法正確性檢驗&#xff0c;一般流程是先調用__crypto_register_alg函數進行通用的算…

select選中的值_selenium下拉框處理(select)

前言 web自動化中&#xff0c;常見的場景還有一個下拉框的選擇&#xff0c;哪么在selenium中如何做下拉框的操作呢&#xff1f;selectselect在HTML中表示元素名&#xff0c;可創建單選或多選菜單。HTML中select長什么樣子&#xff1a;select在HTML中元素名&#xff0c;下面有選…