我一直在尝试增加我的知识并尝试一些挑战。我已经坚持了两个星期,现在完成了大部分挑战,但是这一部分仍然存在。错误显示如下,我不了解什么?
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注入示例,但是我无法理解自己在做什么或如何使它正常工作。
答案 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';
尽管我认为这不会实现您想要的目标,但尚不清楚。一个简单的测试结果为:-
您可能希望对字符串进行串联,因此请使用 +
代替||
。例如
update user set last_browser= 'mozilla' || (select sql from sqlite_master''), last_time= '13-04-2019' where id = '14';
在这种情况下,您会得到类似:-
答案 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
从中进行迭代,找到所有表,列和标志。相当耗时,但却找不到优化的方法。