谁能解释一下这个查询的意思?
-999.9 and(select 1 from(select count(*),
concat((select (select concat(0x7e,0x27,unhex(Hex(cast(database() as char))),0x27,0x7e))
from `information_schema`.tables limit 0,1),floor(rand(0)*2))x
from `information_schema`.tables group by x)a)--
我发现表单中的必填字段由 1 填充,并且电子邮件 ID 是此特定查询的字段。
在表格中,我有姓名、手机号码、电子邮件 ID 和其他详细信息等序列。在电子邮件 ID 之后的任何字段,都填入空白或“空”,在电子邮件 ID 之前,所有字段都填入“1”。
最佳答案
这是一个盲目的SQL注入(inject)。当网站不易受到普通 SQL 注入(inject)攻击时使用。您的站点验证输入数据,可能不正确但足够好,不会让信息通过 SQL 注入(inject)泄漏。
SQL 盲注不尝试直接获取信息;如果发现泄漏,那么首先就不需要盲注。
工作原理:它注入(inject)奇怪的嵌入式查询,如问题中提到的查询,并检查页面的行为。当查询失败时,检查其查询结果的页面会产生不同的内容。它显示错误消息或重定向到某个页面,或者有时不产生任何输出(当查询失败的“处理”类似于“or die()”时)。
SQL 盲注做出一个假设,然后生成并注入(inject)一个要么正确运行要么失败的查询。它检查页面内容以了解注入(inject)的部分是否使查询成功或失败。根据结果(成功或失败),注入(inject)脚本知道它的假设是真还是假,然后它会做出决定并使用不同的假设再次尝试。
我不知道是什么在测试这个注入(inject)片段。由于 group by x 部分,它使查询在我使用的 MySQL 版本上失败。也许它在其他版本(MySQL 4?)上成功了;在这种情况下,它仅用于检测 MySQL 的版本。这与确切版本无关,而是与主要版本有关。主要的 MySQL 版本在这里和那里发生了一些小的变化,攻击者脚本知道正在运行的版本很重要。这样它就知道它可以使用哪些语言功能。如果它没有使用正确的语法,那么它的所有查询都会失败,并且它的目标也无法实现。 :-)
几个月前,我维护的一个遗留网站以类似的方式遭到攻击。我们认为所有输入数据都已正确检查,无法向其中注入(inject)内容。碰巧一个小漏洞仍然存在,有人决定攻击该站点(可能是为了提取电子邮件地址),他们使用的工具找到了这个漏洞并开始通过它注入(inject)查询。
注入(inject)查询类似于 2 RLIKE (SELECT ...) 其中 ... 代表选择 N 名称的复杂查询information_schema 中的 th 对象(表或列)(使用 LIMIT),使用函数 MID(name, K, 1)从所选名称中提取第 Kth 个字符,然后将该字符与指定字符进行比较(使用 IF() 或 CASE)最终生成2 或不是有效正则表达式的内容。
每个请求都会根据 ASCII 集中的特定字符检查单个表或字段名称的单个字符。如果检查的字符小于注入(inject)器提供的字符,则注入(inject)部分的计算结果为 2 RLIKE 2 并且查询正常运行。否则它的计算结果为 2 RLIKE ( 并且查询失败。这样,注入(inject)器脚本将它正在测试的字符的潜在值范围分成一半。下一个查询一次又一次地缩小它直到它找到了确切的字符。最多需要 7 个注入(inject)请求才能找到字段表的单个名称的单个字符。
然后它从 K+1 位置的字符开始,依此类推。使用相同的技术但使用不同的查询,脚本首先查找它想要查找的名称的长度。
这个过程很乏味,但这正是发明计算机的首要原因:为人类完成乏味的工作。
关于mysql - php中sql查询的注入(inject)攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23192757/
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我今天看到了一个ruby代码片段。[1,2,3,4,5,6,7].inject(:+)=>28[1,2,3,4,5,6,7].inject(:*)=>5040这里的注入(inject)和之前看到的完全不一样,比如[1,2,3,4,5,6,7].inject{|sum,x|sum+x}请解释一下它是如何工作的? 最佳答案 没有魔法,符号(方法)只是可能的参数之一。这是来自文档:#enum.inject(initial,sym)=>obj#enum.inject(sym)=>obj#enum.inject(initial){|mem
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我经常将预配置的lambda插入可枚举的方法中,例如“map”、“select”等。但是“注入(inject)”的行为似乎有所不同。例如与mult4=lambda{|item|item*4}然后(5..10).map&mult4给我[20,24,28,32,36,40]但是,如果我制作一个2参数lambda用于像这样的注入(inject),multL=lambda{|product,n|product*n}我想说(5..10).inject(2)&multL因为“inject”有一个可选的单个初始值参数,但这给了我......irb(main):027:0>(5..10).inject
我在Rails上使用带有ruby的solr。一切正常,我只需要知道是否有任何现有代码来清理用户输入,比如以?开头的查询。或* 最佳答案 我不知道执行此操作的任何代码,但理论上可以通过查看parsingcodeinLucene来完成并搜索thrownewParseException(只有16个匹配!)。在实践中,我认为您最好只捕获代码中的任何solr异常并显示“无效查询”消息或类似信息。编辑:这里有几个“sanitizer”:http://pivotallabs.com/users/zach/blog/articles/937-s
我正在为锦标赛开发一个Rails应用程序。我在这个查询中使用了三个模型:classPlayertruehas_and_belongs_to_many:tournamentsclassTournament:destroyclassPlayerMatch"Player",:foreign_key=>"player_one"belongs_to:player_two,:class_name=>"Player",:foreign_key=>"player_two"在tournaments_controller的显示操作中,我调用以下查询:Tournament.where(:id=>params