Web安全需要会写代码吗?

2021-07-19 11:38:28 浏览数 (1)

Web安全中的Web漏洞,多数是因程序接收了“错误”的输入数据,造成了非预期的程序运行出错。这个输入数据是程序的设计者,实现代码时未预料到的数据,造成Web程序出现“漏洞”。

Web漏洞程序,是万千有Bug的Web程序中的一种。

黑盒测试

Web程序漏洞的存在,是建立在Web程序运行的基础之上的。测试人员可以通过尝试给Web程序提供的不同的输入数据, 尝试让Web程序出错,这本质上,相当于对Web程序,进行基于特定数据输入的功能性黑盒测试,故意针对Web程序,提供可能会造成出错的输入数据,让Web程序产生,所谓的“漏洞”现象,并可以复现漏洞,并且利用程序的出错,获得程序所在计算机的更大的用户权限、或者达到其他的目的。

白盒测试

寻找Web程序漏洞的手段,一种是设计异常输入的测试用例,进行黑盒测试, 给出异常程序输入、判断异常输出。除黑盒测试之外。还可以通过Web程序的代码审计,白盒方式对源码进行静态分析检查,针对设计逻辑、代码书写规范等角度,分析源代码可能出现的漏洞问题。

代码审计

一旦我们发现代码有问题,我们可以针对代码的这个安全问题点, 设计让程序出错的各种测试用例,设计用例对应的输入数据,执行这些测试,暴露复现Web程序的漏洞。

Web安全中,最老生常谈漏洞种类:XSS注入漏洞。

此漏洞程序的设计实现者,考虑了用户提供的正常的输入数据,没有更多的过滤不怀好意的用户,对程序提供进行XSS注入数据。

我们平时使用的攻击靶机程序,是人为故意写出各种漏洞的Web程序的集合。我们也来写一个漏洞,用Python代码快速的写出有安全隐患的Web程序,写一段具有XSS漏洞功能Web代码,如下。

代码语言:javascript复制
class Foo(tornado.web.RequestHandler):
    def get(self):
        a_value = self.get_argument("a_key", "") or "/abc/efg"
        device_type = self.get_argument("device_type", "") or "Andriod"
        if device_type == "Andriod":
            self.write('<iframe src="%s" width="0", height="0"></iframe>' % a_value)
        else:
            self.write("""
            <script type="text/javascript">
            </script>
            """ % a_value)

以上这段代码,核心的逻辑是取得用户输入的参数a_key对应的值a_value,问题出现在a_key的值在正常情况下应该是一个URL,但是如果用户提交的a_key的值,不是正常的URL,附加了另外的字符内容,self.write语句在执行的时候,告诉浏览器去回显执行,这段含有JavaScript注入代码字符串组装成的代码,就会执行用户提供的URL以外的JavaScript子句。Web程序在设计时,又没有判断过滤URL的合法性,造成为了XSS的注入。

代码语言:javascript复制
<img src="a" onerror ="alert("XSS")">

从自动化检测的角度,可以针对一个Web请求的URL对应每个Parameters参数,注入JavaScript或SQL子句。这是自动化的Web扫描器可以做的。

从软件测试角度来说,Web渗透测试,就是针对有漏洞的Web程序进行的测试,有漏洞的Web程序,本质还是Web程序。Web程序在现实世界由很多种语言实现,Python、PHP、JAVA、JavaScript等等语言实现。从白盒设计、代码审计的角度,能读懂Web代码、实现Web代码、更便于发现和理解Web程序的漏洞。

对于Web安全,只懂代码还是不够的,还需要了解Web体系的架构,Web防火墙、防火墙的绕过攻击与防御等方面的相关知识.

0 人点赞