Mysql注入读文件 mysql数据库在渗透测试过程中能够使用的功能还是比较多的,出了读取数据之外,还可以进行读写(但前提是权限足够)。 读文件前提: 1、用户权限足够高,尽量具有root权限。 2、secure_file_priv不为NULL Mysql文件读写函数 举例:select load_file(’/etc/hosts’) 上面的例子是有条件限制的: 1、必须有权限读取并且文件必须完全可读。 and (select count() from mysql.user)>0 /如果结果返回正常,说明具有读写权限./ and (select count() from mysql.user)>0 /* 返回错误,应该是管理员给数据库账户降权了*/ 2、欲读取文件必须在服务器上 3、必须指定文件完整的路径 4、欲读取文件必须小于max_allowed_packet 如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的就是权限。 在windows下,如果NTFS设置得当,是不能读取相关的文件的,当遇到administrators才能访问的文件, users就不能实现用load_file读取文件了。
在实际的注入中,我们有两个难点需要解决: 1、绝对物理路径。 2、构造有效的畸形语句。 在很多PHP程序中,当提交一个错误的查询时,如果display_errors=on,程序就会暴露web目录的绝对路径,只有知道路径,那么对于一个可以注入的PHP程序来说,整个服务器的安全将受到严重的威胁。
关于mysql into outfile注射,要使用into outfile 把代码写到web目录取得webshell首先需要3大先天条件: 1、知道物理路径(into outfule ‘物理路径’), 这样才能写对目录。 2、能够使用union (需要mysql 3以上的版本) 3、对方没有对(’)进行过滤(因为outfile后面的(’’)不可以用其他函数代替转换) 后天条件需要二个: 1、就是mysql用户拥有file_priv权限(不然就不能写文件或读文件) 2、对web目录有写权限MS的系统就不说了,一般都会有权限的,但是*nix的系统,通常都是rwxr-xr-x,也就是 说组跟其他用户都没有权限写操作,所以,要满足这5大条件还是蛮高难度的。