MySQL注入点,用工具对目标站直接写入一句话,需要哪些条件?
root权限以及网站的绝对路径
过滤了单引号into outfile还能用吗?不能,GPC要off才行,可以测试Hex编码
- 数据库当前用户为root权限;
- 知道当前网站的绝对路径;
PHP的GPC为 off状态;(魔术引号,GET,POST,Cookie)- 写入的那个路径存在写入权限。
当我们无法使用联合查询时,我们可以使用fields terminated by与lines terminated by来写shell
代替空格的方法
+号,%0a、%0b、%a0 、 /**/ 注释符等
outfile和dumpfile的区别outfile:
1、 支持多行数据同时导出
2、 使用union联合查询时,要保证两侧查询的列数相同
3、 会在换行符制表符后面追加反斜杠
4、会在末尾追加换行
dumpfile:
1、 每次只能导出一行数据
2、 不会在换行符制表符后面追加反斜杠
3、 不会在末尾追加换行
因此,我们可以使用into dumpfile这个函数来顺利写入二进制文件;
当然into outfile函数也可以写入二进制文件,只是最终无法生效罢了(追加的反斜杠会使二进制文件无法生效)
如果服务器端本身的查询语句,结果有多行,但是我们又想使用dump file,应该手动添加 limit 限制
secure-file-priv写shellMySQL的secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。
当secure_file_priv的值没有具体值时,表示不对MySQL的导入|导出做限制,如果是null,表示MySQL不允许导入导出。
而且在mysql 5.6.34版本以后 secure_file_priv 的值默认为NULL。并且无法用SQL语句对其进行修改。
( outfile被禁止,或者写入文件被拦截,没写权限 ,有root权限)
因为是用的慢查询日志,所以说只有当查询语句执行的时间要超过系统默认的时间时,该语句才会被记入进慢查询日志。
一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。
如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中
通常情况下执行sql语句时的执行时间一般不会超过10s,所以说这个日志文件应该是比较小的,而且默认也是禁用状态,不会引起管理员的察觉
拿到shell后上传一个新的shell,删掉原来shell,新shell做隐藏,这样shell可能还能活的时间长些
像这种东西还是比较适合那些集成环境,比如,appserv,xampp...因为权限全部都映射到同一个系统用户上了,如果是win平台,权限通常都比较高
其它方法:通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,找上传点 GetShell