安全测试(二) web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例

文章目录

前言

JS注入

SQL注入

HTTP协议

web应用接口场景实现分析

1、url路由实现

2、“/test”路由访问功能,最简单实现get、post响应示例

3、“/test”接口分析说明

4、可能存在js或sql注入场景说明

5、存在js或sql注入场景分析

6、存在js或sql注入场景 防范

  SQL注入关键字漏洞定义,防范替换字符串表

  JS注入关键字漏洞定义,防范替换字符串表

结束语


前言

        安全测试 web常规安全漏洞问题介绍和防范说明,如:SQL注入攻击、XSS跨站点脚本攻击、JS注入、注释与异常信息泄露、跨站点请求伪造、路径遍历与强制浏览、越权访问类常见网络安全问题是什么?_Benjamin CSDN博客-CSDN博客

        

        安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。

        

        为什么自己没有找到漏洞,哪么可能存在漏洞场景是?

攻击流程和常见应用防火墙处理流程


JS注入

         简称:JS注入攻击,特殊符号注入,代码注入等

XSS 攻击即跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意 JavaScript脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。

常见的 XSS 攻击类型有两种:

一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。

“杀马特”、“烙鸡鸭” 3G时代利用浏览器自身特性自动化预加载 “下一页” 插入恶意链接无意间被迫主访问xxx网站……

“这是最好的时代,这是最坏的时代”

另外一种 XSS 攻击是持久型 XSS 攻击,黑客提交含有恶意脚本的请求,保存在被攻击的 Web 站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的。

恶意弹窗

恶意请求


SQL注入

        攻击者在 HTTP 请求中注入恶意 SQL 命令(drop table users;),服务器用请求参数构造数据库 SQL 命令时,恶意 SQL 被一起构造,并在数据库中执行。

常见危害

1、删库

2、越权访问数据,恶意增改数据


HTTP协议

        HTTP(S)是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,,现在大多数访问都使用了HTTPS协议,而HTTPS的默认端口为443。

HTTP请求的方法:
    HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的  操作方式
    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法

GET

        向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

POST

        向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form


web应用接口场景实现分析

项目背景

        Python Web.Py框架开发WEB问答平台,该项目支持登陆注册、发布帖子、帖子分页、评论叠楼和统计相关功能,后台统计等功能。   

项目地址

        GitHub - Github-Benjamin/Question-Answer: Python Web.Py开发WEB问答平台

针对分析

4.论坛发帖功能,对用户提交的数据实现字符过滤替换操作,防JS命令注入,遗留SQL注入漏洞

web.py框架实现说明

1、url路由实现

# -*- coding:utf-8 -*-
# /**
#  * Created by Benjamin on 2017/9/7
#  */
import web
from model.model import *

urls = (
    '/', 'Main',
    '/login','Login',
    '/logout','Logout',
    '/user/(\d+)','User',
    '/title/(\d+)','Title',
    '/titled','Titled',
    '/huifu/(\d+)','Huifu',
    '/tubiao','Tubiao',
    '/about','About',
    '/test','test'
)

render = web.template.render("templates")


# 此处省略具体方法实现
# ……


if __name__ == "__main__":

    web.config.debug = False
    web.config.session_parameters['timeout'] = 10*60
    app = web.application(urls, globals())
    app.notfound = notfound
    app.internalerror = internalerror
    db = web.database(dbn='mysql', host='127.0.0.1', port=3306, user='root', pw='', db='question', charset='utf8')
    session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'username': None})
    app.run()

2、“/test”路由访问功能,最简单实现get、post响应示例

代码

class test(object):
    def GET(self):
        return "Hello Benjamin!"
    def POST(self):
        return "Hello Benjamin!"

本地调试访问地址

http://127.0.0.1:8080/test

浏览器访问截图

3、“/test”接口分析说明

        该路由方法实现最简单的响应返回,无任何逻辑判断和参数获取判断处理,则针对该接口分析几乎不可能存在JS和SQL注入漏洞。

“做的越多即可能错的越多”

“什么都没做,什么也没做,那么就没有任何问题吗?”

4、可能存在js或sql注入场景说明

场景说明

        一切与数据交互(增删改查)的地方均可能存在问题,列举如下场景分析

用户提交问题

用户场景截图

讲解网站年久失修,找一个现维护的网站图代替.png

提交评论接口

# 用户提交问题
class Put(object):
    def POST(self):
        username = session.username
        if username:
            data = web.input()
            title = data.get('title')
            content = data.get('content')
            if (title and content):
                data = Puts(title,content,username)
                if data:
                    raise web.seeother('/question/%s' % data[0].get('id'))
                else:
                    return render.public(render.head(username), '<h3>服务器异常,提交问题失败</h3>')
            else:
                return render.public(render.head(username), '<h3>问题或描述为空,请重新输入数据</h3>')
        else:
            raise web.seeother('/')

sql执行

# 用户提交问题
def Puts(title,content,username):
    times = str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    # 字符处理防止JS注入
    content = content.replace('<', '&#60;').replace('>', '&#62;').replace('\r', '<br>').replace(' ', '&nbsp;').replace('	', '&nbsp;&nbsp;&nbsp;&nbsp;').replace("'", "&#39;").replace('"', '&#34;')
    sql = "insert into question(id,title,content,fbtime,click,keywords,username) values(NULL,'%s','%s','%s',%s,'%s','%s')" % (title, content, time.strftime('%Y-%m-%d'), 1, username, username)
    SelectMysql(sql)
    sql = "SELECT * FROM question WHERE title = '%s' and username = '%s' ORDER BY id DESC LIMIT 1"%(title,username)
    data = SelectMysql(sql)
    return data

5、存在js或sql注入场景分析

        一切与数据交互(增删改查)的地方均可能存在问题,上述步骤4中针对可能存在的js和sql注入字符串做了替换处理,防止低级的js和sql注入,解决常规数据安全的问题,以维护系统的安全稳定性。

6、存在js或sql注入场景 防范

  SQL注入关键字漏洞定义,防范替换字符串表

SQL注入攻击字符串replace替换字符串
=&nbsp;=&nbsp;
>&nbsp;>&nbsp;
<&nbsp;<&nbsp;
@&nbsp;@&nbsp;
'&nbsp;'&nbsp;
"&nbsp;"&nbsp;
(&nbsp;(&nbsp;
)

&nbsp;)&nbsp;

  JS注入关键字漏洞定义,防范替换字符串表

XSS攻击字符replace替换字符
=&nbsp;=&nbsp;
:&nbsp;:&nbsp;
-&nbsp;-&nbsp;
(&nbsp;(&nbsp;
)&nbsp;)&nbsp;
<&nbsp;<&nbsp;
>&nbsp;>&nbsp;
!&nbsp;!&nbsp;
[&nbsp;[&nbsp;
]&nbsp;]&nbsp;
.&nbsp;.&nbsp;
@&nbsp;@&nbsp;


结束语

没有绝对安全系统

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BenjaminQA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值