首页
社区
课程
招聘
[原创]浅析WEB安全编程(看雪2017安全开发者峰会演讲回顾0x3)
发表于: 2017-11-23 17:33 5641

[原创]浅析WEB安全编程(看雪2017安全开发者峰会演讲回顾0x3)

2017-11-23 17:33
5641



汤青松

中国婚博会PHP高级工程师、安全顾问。擅长安全测试工具的研发,web渗透测试,在处理web漏洞中积累有大量经验,2014年任职于乌云,负责众测开发工作;2015年在网利宝担任研发以及安全建设。目前正专注于PHP的编码安全,PHP安全编码方面的书籍正在撰写中。

他常常活跃在SegmentFault讲堂以及GitChat,多次分享了WEB安全方面的议题。曾在2017 PHP开发者大会上发表演讲《PHP安全开发:从白帽角度做安全》。

***


汤青松:非常高兴跟大家交流这个看雪编码的问题,我是汤青松。说到安全开发的话题,其实我一直是开发者,开发我是专业,安全我是业余,但是安全开发我还是专业的。在场的各位,对于关键词都有清晰的了解,我列举了一些安全的关键词,我们先来看一下。

常见代码注入、CSRF、O元支付、短信轰炸这些都是非常常见的漏洞,今天由于时间关系我讲不了那么多,我列举其中几个点跟大家分享一下,希望大家听了以后可以举一反三,在大脑中形成自己的安全意识,从而提高这个安全编码的能力。

今天要分享的是五个点:SQL注入、XSS跨占,请求伪造,越权漏洞以及支付漏洞。


我们看一下SQL注入,首先是漏洞成因,攻击方式以及防御方案。漏洞成因我们可以这两句话,使用用户参数拼接这个SQL语句,这个参数改变了原有的SQL结构,改变了这个SQL的注入。

我们看下面一张PPT,左边这是一个数据库,白色部分的字体是我们在代码中写到的SQL结构,黑色部分就是攻击者可能会传入的参数。当我们把这个SQL结构拼接出来之后形成了一个新的结构,这个结构被执行之后把整张表所有的数据传输出来,数据库比较大的访问更多请求,整个可能就挂了,还造成一些数据泄漏的情况,这些就是SQL的注入成因,参数改变了原有的SQL结构。


攻击者通常有哪几种攻击方式?我把它分为了三种类型:一种是回显注入,一种是报错注入,一种是盲注。


这里面有两张图,第一张图是传入ID是正常的正型数字,返回的结果是用户的一个信息传入ID等于1,上面把这个参数修改了一下,等于1,然后加了 or 1=‘1,当它拼接到之后,跟前面一样把整个表的数据传输出来,这边看到整个用户表的数据都被列举出来了。利用漏洞可以改变这个页面的数据我们叫做回显注入,这个黑客可以直接把这个数据下载下来。


报错注入,这张图非常清楚可以看到URL上面这个部分是正常URL加上攻击者利用的供给代码,其实这上面的供给代码也是执行不了,放到数据库当中,最后会造成数据库变为异常码,然后把异常码抛出来了,把这个用户名展示出来了,这是非常敏感的信息,我们写代码的时候需要把这个数据库抛出来的错误屏蔽掉,不要可以让前台显示出来,通过报错显示了一些敏感信息,我们称之为报错注入。


盲注,连接起来稍微可能复杂一点,它和回显注入以及报错注入不一样,我们没有办法通过这个页面数据看到它的区别,可以通过两种方式,比如说步尔盲注和时间盲注,下面的部分是正常URL,红色部分是布尔注入的表示式,前面加一个and截取一个字符,判断一下这个第一个字符是不是大于这个字母A,如果当它成立整个条件都是成立,这个时候页面是有反馈数据的。

如果不成立这个页面返回不了数据,这就是布尔数据,我们可以看到有数据和没有数据的情况,当字母A不断变换的时候,也可以把这个数据库里面的数据猜测出来。

时间盲注,下面蓝色区域部分,我们知道数据库里面可以用一些IF函数,也是截取第一个字符,如果这个不成立就到五秒钟返回,通过这个页面返回的时间可以判断这个地方是不是有注入的,也可以把这个数据都给下载下来。


刚刚说到攻击者碰到三种攻击方式,下面看一下怎么样检测页面当中有没有什么注入?现在有非常多的工具,如果对注入了解不是太深,也是有快速检测的方法。

我们可以看到这是一个CMD窗口,上面是我写到的检测表达式,Splmap.py以及我们需要检测的UI,需要有这个注册点它会告诉你有哪些注入,比如说这个页面是我在本地测试的结果,它就告诉了有回显注入、错误注入以及一些盲注。


开发者最关心的就是怎么样防范服务器的安全?

编码的过程中有三点建议,值得借鉴。

参数会改变SQL的结构,我们会让这个参数当中不但有这个SQL的结构,当我知道这个参数是整型的时候,我们就把这个参数转型为整型,整型肯定不包括这个SQL的结构,无法改变结构的目的,哪就不存在着SQL注入。

有的时候我们无法预测它传什么参数,比如说我们去论坛回复一个帖子,我们肯定没有办法控制的,这个时候我们可以用PDO预处理,这也是最常见的方法,也是一个最好的方法。但是有的时候我们会写一些复杂社会语句,我们会会用第一种方法,我们适前定义好这个SQL的语句结构,再把我们的参数放进去,这个时候是无法达到更改SQL语句处理的目的。

当这个业务比较大的时候,这个日志是非常多的,可以找一些SQL的取模软件,可以把这个取模一下,取模之后并不太多的,如果直接看的话是海量的日志,是没法看的。


看一下漏洞成因、攻击场景以及防御方法。画了一张图,上面有一个URL,下面是一个页面返回的HTML代码,我们可以看到白色部分HTML是我们事先定义好,黑色部分参数是想用户想搜索的关键词,当我们搜索了test+Div最后等于123,对后反馈页面一般搜索会告诉你用户搜索了什么关键词,结果如何等等。

这个地方如果没有做好转移,可能会造成XSS跨站,我们可以看到蓝色部分是我们事先定义好的结构,被攻击者利用之后它先把这个DIV结束了,最后加上一个script标签,它也有可能不跟体谈标签,直接发送到它的服务器上。参数未经过安全过滤,然后恶意角本被放到网页当中被执行了,用户浏览的时候执行了这个脚本。


XSS也分好几种类型,比如说这里有三种类型,反射型、存储型以及DOM型。


反射型:这个截图当中是专门训练一些WEB漏洞的练习页面,我们可以输入自己的名字,输入之后会把我们的名字在这里显示了出来,我们输入了一个张三,这个时候弹出来了一个123,在那边显示了一个张三,但是script标签没有出来,因为这个标签被执行了。



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 6112
活跃值: (1212)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
2
看雪编辑按:曾问过一位搞  WEB  安全的人为什么  PHP  是世界上最好的语言,他的回答是  PHP  网站漏洞多,有饭吃。结合目前黑灰产中借助  WEB  漏洞进行各种薅羊毛的现状,这不禁触发了我们的深切反思。问题究竟出在什么地方,为什么网站会存在  SQL  注入、XSS  跨站、CSRF  这些漏洞,我们应该如何避免在代码中产生这些错误?本次议题是由中国婚博会的  PHP  高级工程师汤青松为我们带来的“浅析  WEB  安全编程”,作为开发人员你会发现其中有许多点是值得我们学习借鉴的,安全问题必须引起每一位开发者的重视。
2017-11-23 17:43
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
以后web程序员必须要做个安全培训
2017-11-23 18:24
0
雪    币: 1
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
必须得做个安全培训
2017-11-24 09:00
0
游客
登录 | 注册 方可回帖
返回
//