|
楼主你好,你遇到的情况很常见。在SQL注入中用 `order by` 爆出字段数(比如10个),然后用 `union select` 来试回显位置时,并不是所有字段都会被显示在页面上。页面可能只把结果集中的某几个字段(比如第2、第5、第9个字段)输出到前端,其余字段虽然在数据库中存在,但页面没有调用它们,所以你看不到内容。 这就是所谓的“回显位”。你的目标就是找到那几个被页面显示出来的字段位置。方法是在 `union select` 的后面用数字或随机字符串(比如 `1,2,3,...`)去填充每个字段,然后观察页面哪个位置出现了你填入的数字或字符串。例如: ```sql union select 1,2,3,4,5,6,7,8,9,10 ``` 然后看页面上哪些地方显示的是“1”、“2”等,那些就是可以注入利用的回显位。之后你可以把对应位置的数字替换成你要查询的数据(比如 `database()`、`user()` 或 `group_concat(table_name)` 等),从而获取信息。 如果某些位置没有显示任何数据,可能是数据类型不匹配(比如页面期待字符串,而你放了数字),可以试试用 `null` 或 `'a'` 这种字符串去测。另外注意字段数据类型,有些字段可能需要用 `null` 填充才不会报错。 总之,先定位回显位,然后在那几个位置上做文章就可以正常注入数据了。希望 |