碎碎念

打算重拾信息安全的东西,然后今天朋友告诉我微信读书可以白嫖《从0到1:CTFer成长之路 》,于是从头读了读,着重的读了一下Web部分(自从学了逆向,有几年没碰Web了)。然后在看到注入点在table_reference部分,发现这句用法有些不知所云,与大佬Railgun讨论后在此记录以备忘。

正文

书中例子存在注入点的源码是:

1
$res = mysqli_query($conn,"SELECT title FROM $_GET['table']");

然后给出了注入方法:

1
SELECT title FROM (SELECT pwd AS title FROM wp_user)x;

对此这里的x不知所云,弃之报错,存之疑问,于是讨论乎。
在这里x可为任意字符,作用是派生表的做用。
所谓派生表派生表可以简化查询,避免使用临时表。相比手动生成临时表性能更优越。派生表与其他表一样出现在查询的FROM子句中。

所以相当于SELECT pwd AS title FROM wp_user查询到的内容,作为title列显示,然后临时存成一个叫x的表,以配合FROM关键字的查询。

最外层select语句查询的是title字段,所以临时表也应有这个字段才不会报错,所以这里要保持一致。而临时表x就无所谓了,FROM什么都可。

因此巧妙的用了as别名的原理,和派生表的作用构造了基于table_reference的SQLi注入,甚妙。