ter = array_value($config, 'filter');
$arr = array_value($filter, $type);
$enable = array_value($arr, 'enable');
$wordarr = array_value($arr, 'keyword');
if (0 == $enable || empty($wordarr)) return FALSE;
foreach ($wordarr as $_keyword) {
if (!$_keyword) continue;
$r = strpos(strtolower($keyword), strtolower($_keyword));
if (FALSE !== $r) {
$error = $_keyword;
return TRUE;
}
}
return FALSE;
}
// return http://domain.com OR https://domain.com
function url_prefix()
{
$http = ((isset($_SERVER['HTTPS']) && 'on' == $_SERVER['HTTPS']) || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
return $http . $_SERVER['HTTP_HOST'];
}
// 唯一身份ID
function uniq_id()
{
return uniqid(substr(md5(microtime(true) . mt_rand(1000, 9999)), 8, 8));
}
// 生成订单号 14位
function trade_no()
{
$trade_no = str_replace('.', '', microtime(1));
$strlen = mb_strlen($trade_no, 'UTF-8');
$strlen = 14 - $strlen;
$str = '';
if ($strlen) {
for ($i = 0; $i <= $strlen; $i++) {
if ($i < $strlen) $str .= '0';
}
}
return $trade_no . $str;
}
// 生成订单号 16位
function trade_no_16()
{
$explode = explode(' ', microtime());
$trade_no = $explode[1] . mb_substr($explode[0], 2, 6, 'UTF-8');
return $trade_no;
}
// 当前年的天数
function date_year($time = NULL)
{
$time = intval($time) ? $time : time();
return date('L', $time) + 365;
}
// 当前年份中的第几天
function date_z($time = NULL)
{
$time = intval($time) ? $time : time();
return date('z', $time);
}
// 当前月份中的第几天,没有前导零 1 到 31
function date_j($time = NULL)
{
$time = intval($time) ? $time : time();
return date('j', $time);
}
// 当前月份中的第几天,有前导零的2位数字 01 到 31
function date_d($time = NULL)
{
$time = intval($time) ? $time : time();
return date('d', $time);
}
// 当前时间为星期中的第几天 数字表示 1表示星期一 到 7表示星期天
function date_w_n($time = NULL)
{
$time = intval($time) ? $time : time();
return date('N', $time);
}
// 当前日第几周
function date_d_w($time = NULL)
{
$time = intval($time) ? $time : time();
return date('W', $time);
}
// 当前几月 没有前导零1-12
function date_n($time = NULL)
{
$time = intval($time) ? $time : time();
return date('n', $time);
}
// 当前月的天数
function date_t($time = NULL)
{
$time = intval($time) ? $time : time();
return date('t', $time);
}
// 0 o'clock on the day
function clock_zero()
{
return strtotime(date('Ymd'));
}
// 24 o'clock on the day
function clock_twenty_four()
{
return strtotime(date('Ymd')) + 86400;
}
// 8点过期 / expired at 8 a.m.
function eight_expired($time = NULL)
{
$time = intval($time) ? $time : time();
// 当前时间大于8点则改为第二天8点过期
$life = date('G') <= 8 ? (strtotime(date('Ymd')) + 28800 - $time) : clock_twenty_four() - $time + 28800;
return $life;
}
// 24点过期 / expired at 24 a.m.
function twenty_four_expired($time = NULL)
{
$time = intval($time) ? $time : time();
$twenty_four = clock_twenty_four();
$life = $twenty_four - $time;
return $life;
}
/**
* @param $url 提交地址
* @param string $post POST数组 / 空为GET获取数据 / $post='GET'获取连续跳转最终URL
* @param string $cookie cookie
* @param int $timeout 超时
* @param int $ms 设为1是毫秒
* @return mixed 返回数据
*/
function https_request($url, $post = '', $cookie = '', $timeout = 30, $ms = 0)
{
if (empty($url)) return FALSE;
if (version_compare(PHP_VERSION, '5.2.3', '<')) {
$ms = 0;
$timeout = 30;
}
is_array($post) and $post = http_build_query($post);
// 没有安装curl 使用http的形式,支持post
if (!extension_loaded('curl')) {
//throw new Exception('server not install CURL');
if ($post) {
return https_post($url, $post, $cookie, $timeout);
} else {
return http_get($url, $cookie, $timeout);
}
}
is_array($cookie) and $cookie = http_build_query($cookie);
$curl = curl_init();
// 返回执行结果,不输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//php5.5跟php5.6中的CURLOPT_SAFE_UPLOAD的默认值不同
if (class_exists('\CURLFile')) {
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
} else {
defined('CURLOPT_SAFE_UPLOAD') and curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
}
// 设定请求的RUL
curl_setopt($curl, CURLOPT_URL, $url);
// 设定返回信息中包含响应信息头
if (ini_get('safe_mode') && ini_get('open_basedir')) {
// $post参数必须为GET
if ('GET' == $post) {
// 安全模式时将头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, true);
// 安全模式采用连续抓取
curl_setopt($curl, CURLOPT_NOBODY, true);
}
} else {
curl_setopt($curl, CURLOPT_HEADER, false);
// 允许跳转10次
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
// 使用自动跳转,返回最后的Location
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
}
$ua1 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
$ua = empty($_SERVER["HTTP_USER_AGENT"]) ? $ua1 : $_SERVER["HTTP_USER_AGENT"];
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
// 兼容HTTPS
if (FALSE !== stripos($url, 'https://')) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
//ssl版本控制
//curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
curl_setopt($curl, CURLOPT_SSLVERSION, true);
}
$header = array('Content-type: application/x-www-form-urlencoded;charset=UTF-8', 'X-Requested-With: XMLHttpRequest');
$cookie and $header[] = "Cookie: $cookie";
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
if ($post) {
// POST
curl_setopt($curl, CURLOPT_POST, true);
// 自动设置Referer
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
}
if ($ms) {
curl_setopt($curl, CURLOPT_NOSIGNAL, true); // 设置毫秒超时
curl_setopt($curl, CURLOPT_TIMEOUT_MS, intval($timeout)); // 超时毫秒
} else {
curl_setopt($curl, CURLOPT_TIMEOUT, intval($timeout)); // 秒超时
}
//优先解析 IPv6 超时后IPv4
//curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
// 返回执行结果
$output = curl_exec($curl);
// 有效URL,输出URL非URL页面内容 CURLOPT_RETURNTRANSFER 必须为false
'GET' == $post and $output = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
curl_close($curl);
return $output;
}
function save_image($img)
{
$ch = curl_init();
// 设定请求的RUL
curl_setopt($ch, CURLOPT_URL, $img);
// 设定返回信息中包含响应信息头 启用时会将头文件的信息作为数据流输出
//curl_setopt($ch, CURLOPT_HEADER, false);
//curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
// true表示$html,false表示echo $html
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
// 计算字串宽度:剧中对齐(字体大小/字串内容/字体链接/背景宽度/倍数)
function calculate_str_width($size, $str, $font, $width, $multiple = 2)
{
$box = imagettfbbox($size, 0, $font, $str);
return ($width - $box[4] - $box[6]) / $multiple;
}
// 搜索目录下的文件 比对文件后缀
function search_directory($path)
{
if (is_dir($path)) {
$paths = scandir($path);
foreach ($paths as $val) {
$sub_path = $path . '/' . $val;
if ('.' == $val || '..' == $val) {
continue;
} else if (is_dir($sub_path)) {
//echo '目录名:' . $val . '
';
search_directory($sub_path);
} else {
//echo ' 最底层文件: ' . $path . '/' . $val . '
';
$ext = strtolower(file_ext($sub_path));
if (in_array($ext, array('php', 'asp', 'jsp', 'cgi', 'exe', 'dll'), TRUE)) {
echo '异常文件:' . $sub_path . '
';
}
}
}
}
}
// 一维数组转字符串 $sign待签名字符串 $url为urlencode转码GET参数字符串
function array_to_string($arr, &$sign = '', &$url = '')
{
if (count($arr) != count($arr, 1)) throw new Exception('Does not support multi-dimensional array to string');
// 注销签名
unset($arr['sign']);
// 排序
ksort($arr);
reset($arr);
// 转字符串做签名
$url = '';
$sign = '';
foreach ($arr as $key => $val) {
if (empty($val) || is_array($val)) continue;
$url .= $key . '=' . urlencode($val) . '&';
$sign .= $key . '=' . $val . '&';
}
$url = substr($url, 0, -1);
$url = htmlspecialchars($url);
$sign = substr($sign, 0, -1);
}
// 私钥生成签名
function rsa_create_sign($data, $key, $sign_type = 'RSA')
{
if (!function_exists('openssl_sign')) throw new Exception('OpenSSL extension is not enabled');
if (!defined('OPENSSL_ALGO_SHA256')) throw new Exception('Only versions above PHP 5.4.8 support SHA256');
$key = wordwrap($key, 64, "\n", true);
if (FALSE === $key) throw new Exception('Private Key Error');
$key = "-----BEGIN RSA PRIVATE KEY-----\n$key\n-----END RSA PRIVATE KEY-----";
if ('RSA2' == $sign_type) {
openssl_sign($data, $sign, $key, OPENSSL_ALGO_SHA256);
} else {
openssl_sign($data, $sign, $key, OPENSSL_ALGO_SHA1);
}
// 加密
return base64_encode($sign);
}
// 公钥验证签名
function rsa_verify_sign($data, $sign, $key, $sign_type = 'RSA')
{
$key = wordwrap($key, 64, "\n", true);
if (FALSE === $key) throw new Exception('Public Key Error');
$key = "-----BEGIN PUBLIC KEY-----\n$key\n-----END PUBLIC KEY-----";
// 签名正确返回1 签名不正确返回0 错误-1
if ('RSA2' == $sign_type) {
$result = openssl_verify($data, base64_decode($sign), $key, OPENSSL_ALGO_SHA256);
} else {
$result = openssl_verify($data, base64_decode($sign), $key, OPENSSL_ALGO_SHA1);
}
return $result === 1;
}
// Array to xml array('appid' => 'appid', 'code' => 'success')
function array_to_xml($arr)
{
if (!is_array($arr) || empty($arr)) throw new Exception('Array Error');
$xml = "";
foreach ($arr as $key => $val) {
if (is_numeric($val)) {
$xml .= "<" . $key . ">" . $val . "" . $key . ">";
} else {
$xml .= "<" . $key . ">" . $key . ">";
}
}
$xml .= "";
return $xml;
}
// Xml to array
function xml_to_array($xml)
{
if (!$xml) throw new Exception('XML error');
$old = libxml_disable_entity_loader(true);
// xml解析
$result = (array)simplexml_load_string($xml, null, LIBXML_NOCDATA | LIBXML_COMPACT);
// 恢复旧值
if (FALSE === $old) libxml_disable_entity_loader(false);
return $result;
}
// 逐行读取
function well_import($file)
{
if ($handle = fopen($file, 'r')) {
while (!feof($handle)) {
yield trim(fgets($handle));
}
fclose($handle);
}
}
// 计算总行数
function well_import_total($file, $key = 'well_import_total')
{
static $cache = array();
if (isset($cache[$key])) return $cache[$key];
$count = cache_get($key);
if (NULL === $count) {
$count = 0;
$globs = well_import($file);
while ($globs->valid()) {
++$count;
$globs->next(); // 指向下一个
}
$count and cache_set($key, $count, 300);
}
return $cache[$key] = $count;
}
$g_dir_file = FALSE;
function well_search_dir($path)
{
global $g_dir_file;
FALSE === $g_dir_file and $g_dir_file = array();
if (is_dir($path)) {
$paths = scandir($path);
foreach ($paths as $val) {
$sub_path = $path . '/' . $val;
if ('.' == $val || '..' == $val) {
continue;
} else if (is_dir($sub_path)) {
well_search_dir($sub_path);
} else {
$g_dir_file[] = $sub_path;
}
}
}
return $g_dir_file;
}
?>Kali Linux渗透测试技术介绍【第二期】-阿南达文事网
Kali Linux渗透测试技术介绍【第二期】
编程日记910
更新时间:2025-05-10 13:00:16
Kali Linux渗透测试技术介绍【第二期】
文章目录
- 写在前面
- 一、什么是Kali Linux
- 二、渗透测试基础概述和方法论
- 三、好书推荐
-
- 写作末尾
写在前面
对于企业网络安全建设工作的质量保障,业界普遍遵循PDCA(计划(Plan)、实施(Do)、检查(Check)、处理(Act))的方法论。近年来,网络安全攻防对抗演练发挥了越来越重要的作用。企业的安全管理者通过组织内部或外部攻击队,站在恶意攻击者的视角,识别自身网络安全建设过程中的防护短板,检验安全应急预案的有效性并持续优化,为业务发展提供更强的保驾护航能力。
一、什么是Kali Linux
Kali Linux是一种专门设计用于渗透测试和网络安全评估的Linux发行版。它集成了大量的渗透测试工具和资源,可以支持高级渗透测试任务。以下是在Kali Linux上进行高级渗透测试的一些常见技术和工具:
- 社会工程学:社会工程学是一种通过利用人类心理学、社交工程和欺骗等手段获取信息或越过安全控制的技术。在Kali Linux上,你可以使用工具如Social Engineer Toolkit(SET)和BeEF(Browser Exploitation Framework)来执行社会工程学攻击,如钓鱼、恶意软件传播等。
- 网络扫描和漏洞评估:Kali Linux包含强大的扫描工具,如Nmap、OpenVAS和Nessus等。你可以使用这些工具来扫描目标网络,发现开放端口、服务的漏洞和系统弱点。
- 密码破解和凭据收集:渗透测试常常涉及破解密码和获取凭据,以获取对目标系统的访问权限。Kali Linux提供了各种密码破解工具,如John the Ripper、Hydra和Hashcat等。你可以使用这些工具来进行密码破解和凭据收集。
- 漏洞利用:Kali Linux集成了多个漏洞利用工具,如Metasploit Framework、ExploitDB和Armitage等。这些工具可以用于搜索、开发和利用已知漏洞,以获得目标系统的控制和权限提升。
- Web应用程序测试:对Web应用程序进行安全评估是渗透测试的重要组成部分。Kali Linux提供了多个用于Web应用程序渗透测试的工具,如Burp Suite、OWASP Zap、sqlmap和DirBuster等。这些工具可用于检测和利用Web应用程序的漏洞,如跨站脚本(XSS)、SQL注入、文件包含等。
- 逆向工程和漏洞分析:逆向工程和漏洞分析是渗透测试中的关键技术。Kali Linux集成了许多逆向工程和漏洞分析工具,如IDA Pro、Ghidra、Radare2和OllyDbg等。这些工具可以用于分析恶意软件、查找漏洞和逆向工程应用程序。
请记住,进行高级渗透测试时,你必须遵循法律、道德和伦理准则。只能在获得授权的系统上执行渗透测试,严格遵守相关法律和规定。同时,你还应该保护测试所涉及的目标系统和数据的安全,并避免对无法获得授权的系统进行攻击。
二、渗透测试基础概述和方法论
渗透测试(Penetration Testing)是一种用于评估计算机系统、应用程序和网络的安全性的方法。它模拟了真实的攻击场景,以发现潜在的漏洞和弱点,并提供建议和解决方案来增强系统的安全性。以下是渗透测试的基础概述和方法论:
- 确定目标和范围:在进行渗透测试之前,首先需要确定测试的目标和范围。明确要测试的系统、网络或应用程序,以及测试的限制和法律合规要求。
- 收集信息(信息搜集):渗透测试的第一阶段是信息收集,旨在获取关于目标系统和网络的详细信息。这包括收集目标的IP地址、域名、系统架构、网络拓扑、开放端口以及可能的用户信息等。
- 漏洞分析和评估:在这一阶段,渗透测试团队分析和评估目标系统中的漏洞和弱点。他们使用各种技术和工具,如漏洞扫描器、安全审计工具和手动漏洞挖掘方法来发现可能存在的漏洞。
- 实施攻击(渗透测试):在这个阶段,渗透测试团队利用已发现的漏洞和弱点尝试实施攻击。这可能包括利用漏洞进行远程访问、绕过认证机制、注入恶意代码等。此过程需要谨慎行事,确保只在授权的范围内进行测试。
- 获取权限和持久性:如果攻击成功,渗透测试团队将试图获取系统的权限,并保持持久性,以便在后续测试中保持对目标系统的访问。这可能涉及提升权限、创建后门访问、绕过防火墙等。
- 维持访问和清理痕迹:渗透测试团队可能会试图维持对目标的访问,以便进一步挖掘漏洞和弱点。他们也会努力清除在测试过程中留下的痕迹,以减少被检测或追踪的风险。
- 编写报告和提供建议:在渗透测试结束后,渗透测试团队将编写一份报告,详细说明发现的漏洞、攻击路径和建议的修复措施。报告提供给系统管理员和相关利益相关者,以帮助他们改善系统的安全性。
渗透测试方法论根据不同的标准和框架有所不同,其中一种常用的方法论是"OSSTMM"(开放式源安全测试方法论)。
- 预扫描:收集信息、识别目标。
- 扫描:识别目标系统和应用程序的漏洞。
- 渗透和拓展:获取系统的访问权限并寻找可能的目标漏洞。
- 持久和交付:
- 报告编写和评审。
渗透测试方法论强调全面的测试过程,从信息收集到攻击和测试漏洞,最终提供详细的报告和建议。重要的是要记住,在进行渗透测试时,一定要遵守合法和道德的准则,并获得有关方面的授权。
三、好书推荐
1. 书籍简介
本书是企业进行网络安全对抗演练不可多得的参考书,对攻击队和防守队都适用。
本书系统地介绍了安全测试流程的最佳实践和常见误区,围绕Kali Linux这个开源工具,详细阐述了各类测试技术的原理和操作方法。即使是初学者,也可以在本书深入浅出的指引下轻松上手。对于富有经验的渗透测试人员,本书更是提供了进阶实战场景的实用脚本和代码库资源,相信能给读者带来新的启发。
企业攻防对抗演练是攻防双方的思路、策略、技术和情报能力的综合比拼。“敌暗我明”“攻防力量不对称”的情况往往瞬息万变,结果胜负是一时的,过程常态化才是主旋律。在现实的网络空间安全中,这样的常态化每天都在上演,安全团队只有正确制定攻防演练的目标,才能得到企业对安全工作的认可。
2. 读者对象
如果你是一名渗透测试人员、IT专家或网络安全顾问,希望利用 Kali Linux 的一些高级功能最大限度地提高网络安全测试的成功率,那么这本书就是为你准备的。如果你以前接触过渗透测试的基础知识,将有助于你理解本书内容。
3. 随书资源
本书的代码包托管在 GitHub 上,链接如下:
对于更多丰富的代码包和精彩视频,感兴趣的读者可从以下地址获取:
/
我们还提供了一个 PDF 文档,包含本书中使用的屏幕截图/图表的彩色图像。你可以从以下地址下载:
.pdf
本文来源:IT阅读排行榜,图片来源:原创
责任编辑:王莹,部门领导:卢志坚
发布人:白钰
写作末尾
🌻《Kali Linux高级渗透测试》免费包邮送出
🌴根据博客阅读量本次活动一共赠书若干本,评论区抽取若干位小伙伴免费送出2-3本实体好书
🌵参与方式:关注博主、点赞、收藏、评论区评论 “关注网络安全,我学《Kali Linux高级渗透测试》 ”(切记要点赞+收藏,否则抽奖无效,每一条评论在奖池中加入一个抽奖名额,每个人最多评论三次)
🌼活动截止时间:2023-09-17 12:00:00
🍒开奖时间:2023-09-17 14:00:00
🍀中奖通知方式:私信通知
🍉兑奖方式:截图证明
本文发布于:2024-11-10,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Kali Linux渗透测试技术介绍第二期
发布评论