mysql怎么注入布尔 mysql手工注入( 二 )


在我们传入and 1=1/and 1=2时语句变为
传入的东西变成了字符串并不会被当做命令 。
所以字符型的测试方法最简单的就是加上单引号',出现报错 。
加上注释符--后正常回显界面 。
这里还有的点就是sql语句的闭合也是有时候不同的,下面是一些常见的
这一步可以用到order by函数,order by 函数是对MySQL中查询结果按照指定字段名进行排序,除了指定字 段名还可以指定字段的栏位进行排序 , 第一个查询字段为1 , 第二个为2,依次类推,所以可以利用order by就可以判断列数 。
以字符型注入为例:
在列数存在时会正常回显
但是列数不存在时就会报错
这步就说明了为什么是联合注入了,用到了UNION,UNION的作用是将两个select查询结果合并
但是程序在展示数据的时候通常只会取结果集的第一行数据,这就让联合注入有了利用的点 。
当我们查询的第一行是不存在的时候就会回显第二行给我们 。
讲查询的数据置为-1,那第一行的数据为空,第二行自然就变为了第一行
在这个基础上进行注入
可以发现2,3都为可以利用的显示点 。
和前面一样利用union select,加上group_concat()一次性显示 。
现在非常多的Web程序没有正常的错误回显,这样就需要我们利用报错注入的方式来进行SQL注入了
报错注入的利用步骤和联合注入一致,只是利用函数不同 。
以updatexml为例 。
UpdateXML(xml_target, xpath_expr, new_xml)
xml_target:需要操作的xml片段
【mysql怎么注入布尔 mysql手工注入】xpath_expr:需要更新的xml路径(Xpath格式)
new_xml:更新后的内容
此函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为 xml_target 新的XML片段 new_xml  , 然后返回更改的XML 。xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配 。
这个函数当xpath路径错误时就会报错,而且会将路径内容返回,这就能在报错内容中看到我们想要的内容 。
而且以~开头的内容不是xml格式的语法 , 那就可以用concat函数拼接~使其报错,当然只要是不符合格式的都可以使其报错 。
[极客大挑战 2019]HardSQL
登录界面尝试注入,测试后发现是单引号字符型注入,且对union和空格进行了过滤,不能用到联合注入,但是有错误信息回显,说明可以使用报错注入 。
利用updatexml函数的报错原理进行注入在路径处利用concat函数拼接~和我们的注入语句
发现xpath错误并执行sql语句将错误返回 。
在进行爆表这一步发现了等号也被过滤,但是可以用到like代替等号 。
爆字段
爆数据
这里就出现了问题flag是不完整的,因为updatexml能查询字符串的最大长度为32,所以这里要用到left函数和right函数进行读取
报错注入有很多函数可以用不止updatexml一种,以下三种也是常用函数:
堆叠注入就是多条语句一同执行 。
原理就是mysql_multi_query() 支持多条sql语句同时执行,用;分隔,成堆的执行sql语句 。
比如
在权限足够的情况下甚至可以对数据库进行增删改查 。但是堆叠注入的限制是很大的 。但是与union联合执行不同的是它可以同时执行无数条语句而且是任何sql语句 。而union执行的语句是有限的 。
[强网杯 2019]随便注
判断完注入类型后尝试联合注入,发现select被过滤,且正则不区分大小写过滤 。
那么就用堆叠注入,使用show就可以不用select了 。
接下去获取表信息和字段信息
那一串数字十分可疑大概率flag就在里面,查看一下

推荐阅读