You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
var Db = require('./db');
var markdown = require('markdown').markdown;
var poolModule = require('generic-pool');
var pool = poolModule.Pool({
name : 'mongoPool',
create : function(callback) {
var mongodb = Db();
mongodb.open(function (err, db) {
callback(err, db);
})
},
destroy : function(mongodb) {
mongodb.close();
},
max : 100,
min : 5,
idleTimeoutMillis : 30000,
log : true
});
backbone 用法
一个十分简化的MVC的nodejs后台框架
nodejs 后端相关技巧
nodejs 中避免header注入的方法
functionhtmlEscape(text){returntext.replace(/[<>"&]/g,function(match){switch(match){case"<":return"<";case">":return">";case"&":return"&";case"\"":return""";}returnmatch;});}functionresponseHeaderEscape(text){returntext.replace(/[\r\n]/g,function(match){switch(match){case'\n': return"%0a";case'\r': return"%0d";}returnmatch;});}varusername=req.param('user'),pass=req.param('pass'),op=req.param('op'),url=req.param('url');if(typeofurl=='string'){if(url[0]!='/'){url=null;// not a local location}else{url=htmlEscape(responseHeaderEscape(url));// avoid http response header injection! and avoid html injection}}
服务器端验证和session设置
for(variinusers){varu=users[i];if(u.username==username&&u.pass==pass){req.session.islogin=true;req.session.username=u.username;varlevel={};for(variinu.group){vargroupName=u.group[i];if(groups[groupName]){level=_.extend(level,groups[groupName]);}}req.session.level=level;varresultText=['login success with username:',username,'granted operations:',JSON.stringify(req.session.level)].join(' ');log.log(req,resultText);log.console(req,'LOGIN',log.level.OK,resultText);break;}}
The text was updated successfully, but these errors were encountered:
XSS
HTML标签的属性可以使用HTML编码
可以实现跨域请求的标签及相关属性
<script src="..."></script>
标签嵌入跨域脚本<link rel="stylesheet" href="...">
标签嵌入CSS。由于CSS的松散的语法规则,CSS的跨域需要一个设置正确的Content-Type消息头。<img>
嵌入图片。支持的图片格式包括PNG,JPEG,GIF,BMP,SVG,...<video> 和 <audio>
嵌入多媒体资源。<object>, <embed> 和 <applet>
的插件。@font-face
引入的字体。一些浏览器允许跨域字体( cross-origin fonts),一些需要同源字体(same-origin fonts)。<frame> 和 <iframe>
载入的任何资源。站点可以使用X-Frame-Options消息头来阻止这种形式的跨域交互。xss编码问题
编码的分类
html实体编码(10进制与16进制)
通过实体编码绕过
首先数据经过php过滤,之后嵌入到网页中,浏览器调用html解析器对页面进行解析。php没有对html编码的数据进行过滤,html解码后造成xss
JS编码:js提供了四种字符编码的策略
利用js编码进行xss
利用
php的htmlspecialchars会过滤以下字符,并将其转化为html实体形式
处理之后的解码顺序为js解码->html解码,从而成功构成xss
该段代码也是非常典型的dom型xss
url编码
base64编码
支持base64编码的标签
CSS编码
GBK编码
0x7E/0x800xFEGBK2312编码
unicode和utf-8实现
UTF-8是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。
如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。
UTF-7编码
utf-7有些字符本身可以直接以单一的ASCII字符来呈现。第一个组群被称作“direct characters”,其中包含了62个数字与英文字母,以及包含了九个符号字符:
UTF-7 Bom
解析顺序
html parser => css parser => js parser
解码顺序
html decoding => url decoding => js decoding
属性
支持的编码方式:
html编码的理解:
直接显示(浏览器自身解码),经过解码之后形成了html标签的形式
解码===>过滤===>显示(此时可直接在浏览器里显示出html样式)
比如输入数据为
要是第一种直接显示在浏览器里则是
并不会执行,因为浏览器只是将其看为字符串
要是经过事先解码为<script>alert(1);</script>,之后再进行显示,则会执行,因为浏览器会将其看为javascript代码
html解析
解析可以分为两个子过程——语法分析及词法分析
词法分析就是将输入分解为符号,符号是语言的词汇表——基本有效单元的集合。对于人类语言来说,它相当于我们字典中出现的所有单词。
语法分析指对语言应用语法规则。
解析器一般将工作分配给两个组件——词法分析器(有时也叫分词器)负责将输入分解为合法的符号,解析器则根据语言的语法规则分析文档结构,从而构建解析树,词法分析器知道怎么跳过空白和换行之类的无关字符。
然后我的理解是这样的:
首先html编码被还原出来 然后就成了换行 跟冒号
为什么换行后还能够执行 是因为浏览器中的解析器中词法分析器 起的作用会跳过空白跟换行之类的无效字符。
然后就构造成了一个完整的语句
代码执行!
Entity编码
HTML解析器在建立文档树的时候会针对节点内的Entity编码解码后传输。
以下两个表示相同:
下面两个例子代码不会执行,因为,编码的是标签本身的结构而非节点内的内容:
经典漏洞
XSS注入技巧
新型引入外部html的方法,
test.php
在测试注入处,直接利用link标签引入即可!
例如:
CVE-2012-3414
参数过滤不严导致反射型xss
xss payloads:
xss绕过技巧
过滤尖括号的绕过方法
过滤括号的绕过方法
如果过滤了某种符号,不入<>.(),此时可以使用unicode或是\x的形式进行绕过
例子,如果过滤了<>,那么可以用\u003c,\u003e和\x3c,\x3e过滤或是两种符号混合的过滤方式,特别是在dom xss中,这种方法会特别好用:
比如payload:keyvalue=\x3Cimg\u0020src=1\u0020onerror=alert(1)\x3e&attr=133
在HTML属性中,会自动对实体字符进行转义。一个简单的比方。
是等效的
iframe 相关xss
重要知识点
ajax正常只能请求同源数据,<script><iframe>可进行跨域请求
支持data协议的标签与属性
a标签 href属性
测试在chrome(51)下可以成功弹窗,但是firefox下无法弹窗
object标签 data属性
iframe 相关属性
meta标签 url属性
可以执行js的属性
xss 代码存储
CSRF
1、https跳转到http时就不会带referer
2、用iframe亦可绕过referer
那么这样攻击呢,会被发现,攻击者为了实攻击目的达到隐秘的效果,会将此页面放到一个 iframe标
签里面,然后设置一个跳转,利用iframe隐藏攻击
3、如果referrer为空:
由于浏览器特性,跨协议请求时不带refer(Geckos内核除外),比如https跳到http,如果https环境不好搭建的话,ftp其实也是可以的:)
利用 xxx.src='javascript:"HTML代码的方式"'; 可以去掉refer,IE8要带。
4、隐藏csrf攻击
延伸拓展
Reference
Browser Security-超文本标记语言
XSS编码剖析
nmap 使用
Tags: 安全工具
[toc]
重点参数
重点脚本
脚本分类,--script=类别 这种方式进行比较笼统的扫描
按应用服务扫描
smb破解
smb字典破解
查询敏感信息
查看系统信息
猜解mssql用户名和密码
xp_cmdshell 执行命令
dumphash值
4)Mysql
扫描root空口令
列出所有mysql用户
Mysql所有脚本应用
sid扫描
弱口令破解
脚本延伸
其余参数
批量扫描
主机发现
扫描技巧
指定端口和扫描顺序
服务版本识别
OS识别
防火墙/IDS躲避和哄骗
输出
Refrence
Nmap速查手册
NMAP 基础教程
nmap脚本使用总结
相关库
generic-pool 库
数据库连接池库,一开始就创建一沓数据库连接,并保持长连不断开。当我们需要访问数据库的时候,就去那一沓连接(俗称连接池)中拿来一个用,用完(对数据库增删改查完)后再把这条连接释放到连接池中(依然不断开)。这样我们只在一开始创建一沓数据库连接时会有一些开销,而这种开销总比频繁的创建和销毁连接小得多。
在 Node.js 中,我们可以使用 generic-pool 这个模块帮助我们创建和管理数据库连接池。
backbone 用法
一个十分简化的MVC的nodejs后台框架
nodejs 后端相关技巧
nodejs 中避免header注入的方法
服务器端验证和session设置
The text was updated successfully, but these errors were encountered: