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.mzph.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表示算法模板实例已经创建注册算法模…

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…

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

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;查找命中时返回查找到的算法或注册用算法幼…

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…

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;下面有选…

linux加密框架 crypto 算法管理 - 创建哈希算法实例

crypto_alloc_ahash函数 加密框架中的哈希算法可以是同步方式实现的也可以是异步方式实现的&#xff0c;但是算法应用不关注哈希算法的实现方式&#xff0c;关注的是哈希算法提供的算法接口。为实现统一管理&#xff0c;加密框架默认哈希算法的实现方式为异步方式&#xff0c;…

发票管理软件_企业为什么需要ERP企业管理软件?

对于一个制造企业来说&#xff0c;生产是企业最大的动力&#xff0c;而生产也需要进行优化管理&#xff0c;一个好的生产管理方式会带给企业巨大的发展空间和利润价值。对于一个制造企业来说&#xff0c;生产是企业最大的动力&#xff0c;而生产也需要进行优化管理&#xff0c;…

linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程

参考链接 Linux加密框架的应用示例&#xff08;一&#xff09;_家有一希的博客-CSDN博客 本文大纲 本节将从应用角度说明加密框架的运行流程&#xff0c;包括加密框架如何管理算法、如何动态创建算法&#xff0c;应用模块如何创建算法实例、如何通过算法实例调用算法接口等。…

java 累进计费率计算_设计费400万,缴纳所得税100万,如何筹划

很多公司老板都会把利润放在第一位&#xff0c;照理说这是没错的&#xff0c;公司要盈利才能继续经营下去。我国有很多针对小微企业的政策&#xff0c;盈利不高的情况下&#xff0c;基本不会去考虑纳税问题&#xff0c;也没有多少税收压力。但是对一些暴利的服务型行业、软件设…

linux加密框架 crypto 算法管理 - 哈希算法应用实例

参考链接 Linux加密框架应用示例&#xff08;二&#xff09;_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程_CHYabc123456hh的博客-CSDN博客 在应用模块中创建并初始化哈希算法实例 假设某个SA配置使用的认证算法为"hmac(md5…