https://www.leavesongs.com/PENETRATION/sql-injections-in-mysql-limit-clause.html
一般实际过程中使用 limit 时,大概有两种情况,一种使用 order by ,一种就是不使用 order by 关键字
执行语句
这种情况下的 limit 后面可以使用 union 进行联合查询注入
执行语句
执行语句
此时后面再次使用 union 将会报错
除了 union 就没有其他可以使用的了吗,非也
此方法适用于 5.0.0<MySQL <5.6.6 版本,在limit语句后面的注入
MySQL 5中的SELECT语法:
limit 关键字后面还可跟 PROCEDURE 和 INTO 两个关键字,但是 INTO 后面写入文件需要知道绝对路径以及写入shell的权限,因此利用比较难,因此这里以 PROCEDURE 为例进行注入
报错,尝试一下对其中一个参数进行注入,这里首先尝试报错注入
成功爆出 mysql 版本信息,证明如果存在报错回显的话,可以使用报错注入在 limit 后面进行注入
不存在回显怎么办,延迟注入呀
执行命令
如果 select version() 第一个为5,则多次执行sha(1)达到延迟效果
这里使用 sleep 进行尝试,但均未成功,所以需要使用BENCHMARK进行替代
1、UDF提权专用webshell,导出dll、再执行命令。2、Phpspy.php的Mysql上传(提示 "上传失败、原因:Result consisted of more than one row"、实际上大多数已上传成功),再连接mysql执行命令。
3、Mysql允许外连的情况下也可以使用Hack MySQL上传,再通过命令行登陆执行命令。
php默认提供了. magic_quotes_gpc 方式转义一些特殊字符.但这样的防护是有限的.
更多的是需要程序本身的健壮性来保证安全.
要防止注入. 就得程序对输入的内容进行把控了.
可以用函数. 把非法字符过滤掉即可.
例如:
数字类型: 程序期望获取的是数字ID . 就可以 用 intval() 来处理下外部输入的内容 .
字符类型: 期望的是字母数字的组合. 就可以用preg_match 判断输入的是否符合 .
....
用什么就取什么..
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)