碎碎念
打算重拾信息安全的东西,然后今天朋友告诉我微信读书可以白嫖《从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注入,甚妙。