SQLite查询出错,我要缺少什么?

时间:2019-04-13 05:11:42

标签: sqlite

我一直在尝试增加我的知识并尝试一些挑战。我已经坚持了两个星期,现在完成了大部分挑战,但是这一部分仍然存在。错误显示如下,我不了解什么?

sqlite查询中的错误:update users set last_browser= 'mozilla' + select sql from sqlite_master'', last_time= '13-04-2019' where id = '14'

为清楚起见进行了编辑:

我正在尝试CTF挑战,因此对这种事情我是完全陌生的,所以我正在学习。有一个带有测试凭证的登录页面,我们可以使用它来获取许多标志。我已经获得了大多数标志,这是剩下的最后一个标志。

使用提供的测试凭据登录Web应用程序后,出现以下消息:this link

标志的问题是“数据库表密码中隐藏了什么值?”

因此,从上一张图像开始,我尝试使用sql注入获取值。这是通过使用burp套件并尝试通过用户代理注入来完成的。 我已经尝试过使用上面显示的注入尝试的许多变体。我正在努力找出我要去哪里,特别是因为第二个单引号已自动添加到查询中。我已经遍历了sqlite文档和sql注入示例,但是我无法理解自己在做什么或如何使它正常工作。

2 个答案:

答案 0 :(得分:0)

子查询(例如select sql from sqlite_master)应放在方括号中。

所以你想要

update user set last_browser= 'mozilla' + (select sql from sqlite_master''), last_time= '13-04-2019' where id = '14';

尽管我认为这不会实现您想要的目标,但尚不清楚。一个简单的测试结果为:-

enter image description here

您可能希望对字符串进行串联,因此请使用 + 代替||。例如

update user set last_browser= 'mozilla' || (select sql from sqlite_master''), last_time= '13-04-2019' where id = '14';

在这种情况下,您会得到类似:-

enter image description here

答案 1 :(得分:0)

感谢大家的投入,我已经解决了这个问题。

sql查询的设置如下:

update users set last_browser= '$user-agent', last_time= '$current_date' where id = '$id_of_user'

使用burp套件编辑的用户代理为:

Mozilla', last_browser=(select sql from sqlite_master where type='table' limit 0,1), last_time='13-04-2019

从中进行迭代,找到所有表,列和标志。相当耗时,但却找不到优化的方法。