第十七关:

sql-labs靶场通关(17-22)_数据库



我们会发现这里有用户名,我们依靠这个用户名进行注入点测试操作

我们发现在password那有单引号注入


我们先用Order by 1#来看看列数

sql-labs靶场通关(17-22)_代码审计_02


查看不了列数,如果我们要利用联合查询的话只能利用order by看有多少列数,再根据列数去写语句。这里查看不了列数,所以我们用报错注入来查看

sql-labs靶场通关(17-22)_数据库_03


利用报错注入即可获取数据库,数据表,列以及值

sql-labs靶场通关(17-22)_单引号_04


sql-labs靶场通关(17-22)_数据库_05


代码审计一波:

uname被放入了check_input函数里

passwd并没有进行什么操作

Check_input()的作用是过滤单引号以及进行数字类型的转换,验正输入的值是否为空,所以刚才我们在unam那里加单引号测试注入点并没有起作用。



第十八关:

sql-labs靶场通关(17-22)_单引号_06


代码审计,发现passwd uname都被check_input()函数所修饰,不能加单引号测试,(其他的比如”’) )))都不行

sql-labs靶场通关(17-22)_数据库_07


这是条插入语句,插入了uagent这个数据,但是源代码对uagent并没有进行过滤

sql-labs靶场通关(17-22)_单引号_08



登录成功的界面如下:

sql-labs靶场通关(17-22)_代码审计_09


这里回显了IP 以及 User-Agent, 所以我们使用User-Agent注入

sql-labs靶场通关(17-22)_数据库_10



sql-labs靶场通关(17-22)_代码审计_11



利用BP抓包(只有成功登录才有)

sql-labs靶场通关(17-22)_数据库_12


这里我们修改User-agent 并且输入单引号测试,会发现报错

sql-labs靶场通关(17-22)_单引号_13

sql-labs靶场通关(17-22)_代码审计_14


因为吧user-agent插入了数据库,我们只需要闭合$uagent前后的单引号即可。

sql-labs靶场通关(17-22)_数据库_15


这样的话就得到了数据库的名字


通关成功


第十九关:


先进行代码审计:

sql-labs靶场通关(17-22)_代码审计_16


sql-labs靶场通关(17-22)_代码审计_17


这里赋予uagent的值为referer


同时插入了referer

那我们就可以在referer上做文章


在referer上加单引号测试

sql-labs靶场通关(17-22)_单引号_18


说明存在注入点,那么利用报错注入即可


sql-labs靶场通关(17-22)_单引号_19


通关成功



第二十关:

sql-labs靶场通关(17-22)_代码审计_20


sql-labs靶场通关(17-22)_数据库_21


我们发现cookie被传入了库中,并且进行了查询

sql-labs靶场通关(17-22)_单引号_22


在cookie处测试

sql-labs靶场通关(17-22)_数据库_23


sql-labs靶场通关(17-22)_单引号_24


其他步骤都是一样的

通关成功


第二十一关:

sql-labs靶场通关(17-22)_单引号_25


这里我们发现cookie 进行了base64位编码

经过转换发现:

sql-labs靶场通关(17-22)_数据库_26


我们先判断闭合方式:

sql-labs靶场通关(17-22)_单引号_27


sql-labs靶场通关(17-22)_单引号_28


回显正常,换成(1)=(2 :



sql-labs靶场通关(17-22)_数据库_29


报错

那么注入方法跟之前就是一样的,多了编码的步骤

sql-labs靶场通关(17-22)_数据库_30


sql-labs靶场通关(17-22)_代码审计_31


爆出了数据库,通关成功


第二十二关:

先进行代码审计:

sql-labs靶场通关(17-22)_代码审计_32


又进行了base64位编码

sql-labs靶场通关(17-22)_单引号_33


同时Cookie值放入数据库中。

这里经过测试,注入点为

其他步骤跟二十一关是一样的:

sql-labs靶场通关(17-22)_单引号_34


sql-labs靶场通关(17-22)_代码审计_35