然后将得到的结果作为文件名通过send_from_directory函数返回
这里就是重点了, 因为一眼看出这里可以sqlite注入, 对我们传入的数据未做任何处理过滤就插入了执行语句中
注意一点,...这里的flag是不可能在sqlite数据库中的, 因为这个sqlite并没有进行任何的文件读取操作, 而是使用sqlite3.connect(':memory:')的方式将数据库放在缓存中, 只在使用完了之后再保存在本地..., 所以它是没有任何原始数据的
而且也不需要和任何服务端进行连接(这点个人感觉就是sqlite的一个很重要的特点了, CTF的题目几乎都是mysql, nodejs的题目则是有不少使用sqlite的,.../flag/flag1 => flag/flag1
获得的文件名会被拼接到第一个参数(目录)的后面, 然后读取文件将读取内容返回
所以就是说使用了这个函数之后我们不管怎么控制第二个参数都只能获取第一个参数目录下面的文件..., 但是还是记一下吧:
想通过找到读取文件的sqlite参数进行文件读取然后算出PIN码拿后台, 但是并没有找到文件读取的可用函数
堆叠注入, 通过语句执行达到更大的活动权限, 但是代码中的语句都是只能支持一句代码的