前记

这次写的主要是关于服务器的安全配置及加固,部分例子会以比赛时的环境进行讲解,对一些常见的漏洞进行加固讲解,以及一些安全配置思路的分享。疫情过后开学事情就会比较多,所以之后更新的速度可能会很慢。刚好实验室的学弟们也要开始学习混战攻防,看到了就当我亲手教过了吧哈哈哈。

分组混战

首先从比赛时的环境进行分析,在我比赛的三年中,我接触到关于linux的靶机环境有很多个,现在主要讲解的是2017国赛那一台,因为漏洞比较有讲解意义。
    首先当我们拿到一台靶机,第一件事情应该做的就是修改root密码,第一台靶机的root是弱口令123456,毋庸置疑我们需要修改密码,一个linux的root用户如果被掌握,那后果很严重,其他队伍完全可以对你的靶机进行进行关机且不能重启会不断触犯所有违规操作。比赛环境布置违规操作阀值一般为3,会扫描该服务三次,如果均未扫描到服务开启则会触犯违规,一般会去扣除三次。当然也有那种直接给你不断扣的负数的另当别论。
    对于服务器账号安全是非常重要的,我们也应该检查/etc/passwd下是否存在其他危险用户,比如admin以及guest等,查看其权限,删除用户或者修改危险用户密码。其次应该观察目录下是否存在木马文件,比如一些奇怪命名的文件,之前的一个漏洞就是在/root/目录下存在多个序号命名的文件,如果扫描端口我们会发现这些文件名正是所开启的一些端口的序号。通过netcat连接端口可以致使命令执行,且因运行在root用户下所以权限为system。
    再就是web安全,在linux中我们可以查看web目录下的站点,首先需要检查是否存在木马文件,其次检查功能性页面是否存在web漏洞,比如文件上传,命令执行,SQL注入,目录穿越等,以上这几个漏洞很巧的第一台靶机中都有,所以接下来我们会单独进行讲解加固方案。
    当然存在站点的地方自然就会有数据库,数据库我们主要是需要防范数据库用户密码,这是必要的。因为如果获取到的是数据库的管理员用户后果也非常严重,像sql server的SA以及mysql的root这些都是必须设置为强密码的。
    再就是修改配置文件,禁用危险函数,比如Apache的httpd.conf以及php.ini这些都是需要我们去检查配置的。
接下来我们讲解一些重要的漏洞加固方法

危险端口

以靶机为例,我们首先需要删除这些危险文件,如果直杀进程,端口仍然有可能重启。

使用命令netstat -ntlp查看所有开放的服务以及端口情况。
然后使用pkill -9 "autorunp*"删除即可,服务名根据具体环境而定。

还有一些服务本身在特定的版本中就是危险的,比如vsftp 2.3.4这是一个比较危险的版本,在利用后攻击者可获取root权限,在利用时因为其用户名提交为任意名称后添加:)被称为笑脸漏洞,即可开启一个6200端口获取root权限。
还有像Windows中445,135,3389等一些端口在不必要时也是可以关闭的,像17-010,0708,在服务器特定版本时没有打补丁开启相关端口是非常危险的

数据库加固

其实数据库的加固还是比较简易的,首先撇开web不说,我们这里只需要检查一些用户修改密码即可,
    使用select user();命令查看数据库用户。修改用户密码命令为:

select user();
use mysql;
update user from password=password("更改后的密码") where user="指定要修改的用户名";
flush privileges;

注意一定要刷新权限,不然我们修改的密码是不能生效的。

当然如果暴力删除用户也是可以的。

drop user xxx //用户名

配置文件规范

在我们对配置文件存在错误的配置时也会有一些安全隐患,下面我们主要对http.conf以及php.ini进行讲解。
    首先我们来看http.conf中对于Apche的用户的配置,这里是apache,但是如果被错误的配置为root那么在web上执行的命令同样具有超级管理员权限。即使如此,哪怕获得apache的shell权限配合其他的一些操作仍可以对服务器造成十分严重的危害,在我的<Web木马提权渗透>一文中就有对web提权至root的讲解,以及fork炸弹之流,更是可以不依靠root去权限即可对服务器进行资源耗尽攻击,仅仅几秒钟服务器就会处理不了大量后台进程而死机其语句仅仅只需要一行代码。

:() { :|:& };:


    对于目录浏览我们同样需要提防,如果hack可以对你的web服务器进行目录浏览那真的是太好了,省去了hack对你的站点目录扫描了。所以我们也需要对其进行配置,这里apache默认是可以任意浏览的。这里我们需要修改本段。

 Options Indexes FollowSymLinks修改为 Options FollowSymLinks

同样我们也不能输出错误回显,因为错误回显某些时候会泄漏关于服务器的一些重要信息。

php_flag display_errors        off  php_value error_reporting       2047


对于上传目录我们也需要进行禁止脚本执行,杜绝文件上传执行shell。

配置中增加如下内容:
<Directory  "上传目录">  <Files  ~  ".php">  Order  allow,deny  Deny  from  all  </Files>
</Directory>

接下来进行讲解php配置文件
    对于php.ini文件,首先我们应该进行限制危险函数,例如system,eval等函数在不必要的情况下可以禁用。

    同样的在上面的open_basedir我们也可以进行配置,限制php访问的目录,这样可以防护对于文件包含造成的影响。
    同理我们也可以进行配置GPC对一些特殊符号进行过滤,以及开启安全模式防护服务器安全。

magic_quotes_gpc=On
safe_mode=on

也可以对上传的一些信息进行限制,比如限制禁用上传功能或者限制上传文件大小。

Web安全

对于web安全我们主要讲解三个比较常见的漏洞,SQL注入、文件上传、命令执行。
    首先来讲解SQL注入,众所周知SQL注入是由于外部提交的数据未经过滤直接拼接到了SQL语句中并被数据库执行。SQL也成文OWASP top 10的榜首,其危害不言而喻。

<?php$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);if ($SELF_PAGE = "sqli_id.php"){$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',);
}$PIKA_ROOT_DIR =  "../../";
include_once $PIKA_ROOT_DIR . 'header.php';include_once $PIKA_ROOT_DIR."inc/config.inc.php";
include_once $PIKA_ROOT_DIR."inc/function.php";
include_once $PIKA_ROOT_DIR."inc/mysql.inc.php";$link=connect();
$html='';if(isset($_POST['submit']) && $_POST['id']!=null){//这里没有做任何处理,直接拼到select里面去了,形成Sql注入$id=$_POST['id'];$query="select username,email from member where id=$id";$result=execute($link, $query);if(mysqli_num_rows($result)>=1){while($data=mysqli_fetch_assoc($result)){$username=$data['username'];$email=$data['email'];$html.="<p class='notice'>hello,{$username} <br />your email is: {$email}</p>";}}else{$html.="<p class='notice'>您输入的user id不存在,请重新输入!</p>";}
}
?>

以上即是一段典型的数字型注入的代码。
对于SQL注入我们从代码层次来看,可以进行危险字符过滤,或者预编译的方式进行数据库操作,这里推荐的是预编译,不仅可以预防SQL注入也可以提高执行效率,当然如果您预编译仍然使用了SQL语句拼接的方式那依旧是没用,我们需要把参数处以占位符表示,将SQL语句提前预设好,使用set进行替换占位符表示的参数,这样SQL编译器就不会认为提交上来的是一段SQL语句而只是参数了。


以上两段代码即是预编译存在注入的案例对比。

这里讲一个不少程序员都会出现的问题
    这里大家可以看到关于zx这张表中的内容,看似id为6以及7的deepName是不是一样呢?答案是否的,接下来我们看一下

这里我们来看一下这个表的结构,我们可以看到deepName为varchar类型并且长度限制为8。

这里我们假设程序员管理员登录的SQL语句为:

select count(*) from zx where deepName="$name" and password="$passwd";

这里我们假设为管理员用户名为admin,密码为123456。我们来执行下这段语句。

我们发现count为1,这时一般的程序逻辑在判断可以查询出数据后一般就直接跳过登录了。但是我们再添加一个用户

这时我们又创建了一个用户,但是注意他的语句。我们在admin的后面输入了4个空格,结合admin本身5个字符达到9个已经越界了。

insert into zx values(9,"admin    ","123");

下图我们可得,越界的字符被自动删除了。id为6的字段长度为5,id为9的则长度为8。

我们下面来看一下正章

这里我们可以看到用户通过用户名admin (三个空格),指定密码为123456却成功返回了count值,在实际站点中这样已经造成越权登陆。

你是不是若有所思了呢?

文件上传防护
    对于文件上传来讲,最重要莫过于代码执行了,如果上传到一个服务器后但是却没有办法解析执行,那么这样的文件上传是没有意义的。所以我们需要有针对性的进行加固,对于代码层来讲,应该多重验证,对于后缀名、MIME、文件大小、文件内容等均需要进行验证,验证后缀以及MIME需使用白名单策略,相比黑名单更加安全一些,毕竟黑名单总是可能会存在漏掉的一些文件类型。假设我们要求上传的是图片类型。那么有一个php中的函数getimagesize()函数可以对图片信息进行验证,防止假图片,虽然这个函数可以被绕过但是仍是提高了攻击门槛,毕竟在现今互联网中真正对网络造成危害的仍是那些不懂编程的"脚本小子"。

命令执行
    命令执行漏洞危险其实挺大了也很普遍,在一些CMS中我们总是能看到目标后台对服务器进行ping操作,这时如果开发人员未对命令进行规范编码则有可能存在任意命令执行。

<?php
$arg=$_SERVER[‘HTTP_X_FORWARDED_FOR’];
if($arg){system("ping".$arg);
}
?>

这是一个最经典的命令执行漏洞,我们可以通过伪造ip地址进行命令执行,抓包设置
X-Forwarded-For进行代码执行,构建payload:X-Forwarded-For:127.0.0.1|ls
网上也有一些案例讲解,但是我觉得比较离谱就贴了这个了,像一些直接从外部获取参数的,其实程序员一般来讲并不会那么做。所以为了贴合真实我还是以伪造ip这种方式进行讲解,可能对初学者不友好,这点见谅。
    除了|以外还有&、&&、||可以作为管道符进行连接,但是触发条件不同,这个大家可以自己百度学习。对于命令执行的加固,在代码层我们可以过滤这一类管道符,PHP提供了两个函数escapeshellcmd以及escapeshellarg分别是过滤整条命令以及参数的。对于这些漏洞其实完全是可以杜绝的。

后记

本次就讲这么多,通过上面的解析相信大家对于服务器加固已经有了一个初步的认识,当然一切的学习仍是需要与实践相结合,所以对于加固这一块仍是需要多研究多实践。对于一个服务器的整体安全来讲,不能单单只靠一个地方的防护,缺少这个意识也正是当今仍有许多服务器存在漏洞隐患等。网络安全是一个整体,并不存在一劳永逸,上面大家可能会发现在服务器配置与代码层有一些防护是重叠的,这是不是说我们可以不配置重叠的呢?答案我认为是否的,依然是上面那句话,网络安全是一个整体,有一个安全理念叫做纵深防御,不同方面相互构成一个整体,像我们通过web可以系统命令执行,数据库可以写入文件一个道理,不同服务之间是可以相互影响的。在道哥的<<白帽子讲Web安全>>中我的安全世界观一章中令我印象深刻,他说:一个水桶能够装多少水不是取决于最长的那块木板,而是最短的那一块,我认为这很形象的说明了当今网络安全的问题。像SQL注入真的出现有许多年了,预编译技术出现也有许多年,但是为什么至今仍有一些网站存在SQL注入呢?我认为更多的是一部分程序员并没有接受新的开发技术,在前几年我学习WEB开发时,我在培训学习到的是预编译,但是在回来看网上的一些教程时,仍然是那些拼接语句,直接连接数据库的方法,所以这也与学习资源有关,许多安全的开发技术并没有普及开来,在我学习时对于学习资源这一点真的非常感慨,毕竟自学始终有限。

**就说到这里吧,希望大家能够美梦成真!
最近在等远方传来的消息,希望我也能美梦成真吧!
**

服务器加固指南 -- 思路分享相关推荐

  1. HyperLedger Fabric 学习思路分享

    HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...

  2. NB-IOT实现万物互联设计思路分享 (从硬件到单片机到云平台)

    NB-IOT实现万物互联 产品设计思路分享 NB-IOT窄带物联网(Narrow Band Internet of Things, NB-IoT),是一种专为万物互联打造的蜂窝网络连接技术.NB-IO ...

  3. 基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署

    基于第三方开源库的OPC服务器开发指南(2)--LightOPC的编译及部署 前文已经说过,OPC基于微软的DCOM技术,所以开发OPC服务器我们要做的事情就是开发一个基于DCOM的EXE文件.一个代 ...

  4. 云服务器加固系统,云服务器加固

    云服务器加固 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 购买云耀云服务器时 ...

  5. 全网最全安全加固指南

    干货 | 全网最全安全加固指南 安全加固相关概念阐述 安全加固定义 安全加固和优化是实现信息系统安全的关键环节.通过安全加固,将在信息系统的网络层.主机层.软件层.应用层等层次建立符合安全需求的安全状 ...

  6. 云服务器加固系统,服务器加固系统

    服务器加固系统 内容精选 换一换 实例支持自动化发放裸金属服务器,远程Console登录.支持租户自主管理裸金属服务器生命周期:查询.启动.关机.重启.删除.导出服务器列表:将租户名下的所有裸金属服务 ...

  7. Windows服务器加固

    Windows服务器加固 一. 账户安全要求 二. 权限安全要求 三. 通用安全管理 四. 日志审计安全 五.网络协议安全 一. 账户安全要求 1. 账户错误登录锁定 次数(8) 开始->运行- ...

  8. MMORPG类游戏制作思路分享(Unity3D+PhotonServer)

    核心问题 如何实现所有客户端玩家信息同步(如位置信息)? 同步模式一般分两种:状态同步和帧同步.而本文主要针对MMO类游戏,所以建议用状态同步. 状态发生后,客户端上传操作到服务器,服务器收到后处理行 ...

  9. 中国软件杯 公共地点人流量计算的云监管平台 业务部分思路分享

    赛题名称:公共地点人流量计算的云监管平台 获奖名次:二等奖 项目主要分工: 周泽淼 云端全部业务 张宗浩 边缘端核心业务与算法部分 杨帆 前端框架 部分业务逻辑及宣传视频 赛题中对业务的要求抽取出来后 ...

最新文章

  1. ipa包中图片进行了Compress之后的主要处理和作用
  2. Winforn中使用FastReport实现点击导出按钮PDF预览并弹出另存为对话框
  3. 五、PHP框架Laravel学习笔记——回退、当前路由、单行为
  4. 「leetcode」131.分割回文串【回溯算法】详解!
  5. 功能强大的云打印组件-开始使用
  6. 【安卓开发】Android平台的记账本app(全部代码+room框架操作数据库+设计报告)
  7. 股票历史数据下载-A股所有股票的历史数据下载
  8. matlab中符号函数sgn,matlab 饱和函数 sat
  9. 浏览器存储cookie
  10. 2010公司处级聚会尾牙主持词
  11. armbian清理_N1盒子armbian/ubuntu/linux系统修改日志输出到内存
  12. ibus五笔造词、删词功能
  13. (附源码)ssm小型超市管理系统的设计与实现 毕业设计 011136
  14. HTTP 新增的 103 状态码,这次终于派上用场了!
  15. 计算机资料室英语翻译,资料英文怎么说_资料的英文怎么写 - 沪江英语
  16. 暴雪战网服务器维护时间,暴雪战网登录不上去2021
  17. 【硬刚大数据】从零到大数据专家之数据仓库体系建模实施注意事项小总结
  18. c++栈和队列的应用(停车问题)
  19. 国科大人工智能技术学院揭牌,第一批研究生正式入学
  20. 在交通突发事件应急处置中如何更好发挥“情指行一体化”警务模式作用?

热门文章

  1. 大语言模型参数说明(Temperature,Top p,Top k)
  2. C语言系列——第九节-数据的存储(进阶)
  3. 【深度学习之美】“机器学习”三重门,“中庸之道”趋若人(入门系列之四)...
  4. 【量化系列】使用聚宽实现净利润跳空策略
  5. python 宝可梦_python学习笔记——保可梦数据分析,Python4,宝可梦
  6. 「题解」CF1468M Similar Sets
  7. 代码随想录算法训练营第二十五天|216.组合总和III 17.电话号码的字母组合
  8. vim-tabe多标签切换
  9. 2022寒假字节跳动前端训练营笔记
  10. 用JavaScript编写Java虚拟机?谈谈哗众取宠的BicaVM