[Zer0pts2020]phpNantokaAdmin
[Zer0pts2020]phpNantokaAdmin
考点
sqlite3 select特性
sqlite3建表语法
wp
题目功能流程如下

填参数,点下一步,最后的请求是向/?page=create发送 POST请求,请求内容如下
然后请求/?page=index,来到插入数据的页面

向/?page=insert发送POST请求,内容如下
然后请求/?page=index

那么后台的语句可能如下
但是testa那个字段输入字母也会成功插入

然后找信息,啥都没找到,直接用BUU给的代码吧
三个文件,config.php定义flag位置,flag_bf1811da表的flag_2a2d04c3字段
util.php存放自定义函数,index.php实现路由和视图功能
先说自定义的函数,redirect($path)调用header函数进行重定向页面,flash($message, $path = '?page=index')向session中写入信息,e($string)把string使用htmlspecialchars($string, ENT_QUOTES)进行转义,只编码双引号和单引号,is_valid($string)判断输入是否含有如下字符
然后index.php,全部采用pdo的方式操作数据库
如果session中存在database字段,就返回flag_bf1811da表和flag_2a2d04c3字段
insert部分就直接使用insert语句插入POST的values数组,delete是直接清空session,新建一个空白的session
看新建表的地方
要输入表名和列名,只有表名被强制转换为字符串,然后是对表名和列名的限制
最后是SQL语句的拼接
最终SQL执行顺序
可控点就是table_name、column和type
payload
相当于CREATE TABLE aaaa as select [sql] from sqlite_master;

payload
相当于CREATE TABLE aaaa as select [flag_2a2d04c3] from flag_bf1811da;

小结
sqlite3在select时,如果列使用
[]、""、``包裹时会自动忽略这些符号之后的列名sqlite3可以使用
create table ... as select ... from ...来复制表
最后更新于