手工sql注入&&绕过waf &&一个实例分析

手工sql注入&&绕过waf &&一个实例分析_第1张图片

这篇文章,将教大家基本的手工sql注入和绕过waf的知识;分享一个实例,为了效果建议读者自己去搭建环境,因为真实环境都不怎么理想。

1. sql注入的基础

2. sql注入绕过waf

3. sql注入一个绕过实例

手工sql注入的基础

基础注入,盲注注入(时间和bool),报错注入,联合注入(union)

推荐sql-labs资源这个练习平台,推荐《mysql注入天书pdf》

1.base(基础的语句注入)

我们利用该表可以进行一次完整的注入。以下为一般的流程。

1)猜数据库

2)猜某库的数据表

3)猜某表的所有列

4)获取某列的内容

2.union注入

union注入和基础的注入相差不大,只需将前面的数据置0,即没有那个指定字段即可;当然先要确定字段,下面的文章有分析

3. 时间注入

主要用到一些截断字符对数据库的字符进行判断

1)先试数据库的长度,当数字为6时发生了延时,说明数据库名共五个字符。

2)开始猜数据库的字(当发生延时,说明当前数据库第一个字母为m):

3)其他的数据只需修改查询语句即可

4. bool注入

是根据回显,对的查询是一种回显,错的查询又是一种回显

也是字符截断函数来操作的

if(length(database())>8,1,sleep)

其他的不多说了

5. 报错注入

是通过报错函数来进行操作的

https://www.cnblogs.com/wocalieshenmegui/p/5917967.html  十种报错注入

作者常尝试的是这三个报错函数updatexml,exp,floor

手工sql注入&&绕过waf &&一个实例分析_第2张图片

sql注入绕过waf

ok,这是本篇的重点

作者就不填写那些网上普遍有的,给出几个记得到并且常用的,但是有些简单的还是要简单试下

1. 大小写混写

2. 编码试下  作者常用url编码;拿到数据库名和表名常用16进制替换他们的名字

3. 替换

and &&

or ||

相同函数的替换(这个先要过前面的引号闭合,字符过滤;前面的如果过不了,一般作者都考虑不到这,真要用到时才换)

4. 注释绕过

1)内联/*!50000*/,一般是被杀了的

2)/*!50000union/*!50000/*!(select*/~1,2,3)  (过安全狗写法,亲测可用,下面实际操作我们将这样操作)

3)句末注释://, -- , /**/, #, --+,--  -, ;--a

作者常用 -- -,屡试不爽(一般+是被过滤了的)

实际运用

手工操作一波,我的测试过程:

单引号走起

手工sql注入&&绕过waf &&一个实例分析_第3张图片

这种情况gpc一般是打开了

双引号,同样如此:

手工sql注入&&绕过waf &&一个实例分析_第4张图片

ok,其实我们首先应该确定是字符型参数还是数字型

当id=2

手工sql注入&&绕过waf &&一个实例分析_第5张图片

id=1+1

手工sql注入&&绕过waf &&一个实例分析_第6张图片

这里+是被过滤了的,所以我们用-来做个运算

手工sql注入&&绕过waf &&一个实例分析_第7张图片

一切正常

ok,说明是数字型的参数,那么就不用引号闭合,可以进行接下来的注入

(这里给大家补充一点小知识:cms审计时,这种id之类的都是inval函数处理的;其他的cms地方sql注入漏洞很有一些是因为数字型参数不需要引号闭合进行操作的)

如果是字符型的怎么办,字符型的gpc情况确实不好办,作者遇到的基本是编码绕过:这里的编码是gbk的编码,sprint函数这类的编码漏洞绕过;编码漏洞情况同样适合xss漏洞,都是绕过waf。

这里,作者是先进行常规注入,id=2 order by 2

手工sql注入&&绕过waf &&一个实例分析_第8张图片

id=2 order by 1 正常

手工sql注入&&绕过waf &&一个实例分析_第9张图片

说明只能显示一列数据了

OK,我们进行union测试

手工sql注入&&绕过waf &&一个实例分析_第10张图片

发现了什么,union不见了

不急,我们有姿势

双写union(作者还真看到过只过滤一次关键词的代码)

手工sql注入&&绕过waf &&一个实例分析_第11张图片

嗯,看来是过滤那个单词大小写(虽然过时了,现在匹配函数都直接大小通杀,不妨碍随手试下)

手工sql注入&&绕过waf &&一个实例分析_第12张图片

看到UNIon被ban了

OK,不要着急,我们试下其他的方法

用过狗方法,这里就这样过了(普通内联试过无法)

手工sql注入&&绕过waf &&一个实例分析_第13张图片

 手工sql注入&&绕过waf &&一个实例分析_第14张图片

但美中不足的是网站的数据库系统配置出了问题,出现下面这个错误

作者这样尝试

手工sql注入&&绕过waf &&一个实例分析_第15张图片

不指定库也是查找当前库;再尝试用limit0,1限制,效果也是如此

手工sql注入&&绕过waf &&一个实例分析_第16张图片

Illegal mix of collations for operation 'UNION'

遇到了这个问题,是数据库的编码不一样

原因参考:

https://www.cnblogs.com/google4y/p/3687901.html

ok,我们继续,作者直接or来取数据库

手工sql注入&&绕过waf &&一个实例分析_第17张图片

被ban了

||  代替or

and呢(这比较有意思了,也是经常遇到了情况,waf特定情况才ban字符串,绕过本来就是经验和猜)

手工sql注入&&绕过waf &&一个实例分析_第18张图片

我们看到,没有语法错误,是正确的,那我们取下数据库呢

手工sql注入&&绕过waf &&一个实例分析_第19张图片

按照mysql的语法,作者原先以为没有错(其实是错的语法)

手工sql注入&&绕过waf &&一个实例分析_第20张图片

本地测试了下

手工sql注入&&绕过waf &&一个实例分析_第21张图片

错误,再多语句,分号试了下,是对的

手工sql注入&&绕过waf &&一个实例分析_第22张图片

想当然的给网址来了下分号(sqlmap中根据数据库的不同也有多语句测试)

手工sql注入&&绕过waf &&一个实例分析_第23张图片

当然是错误的

时间注入嘛,测试成功(突破口哦)

手工sql注入&&绕过waf &&一个实例分析_第24张图片

作者一开始这样测试

嗯,忘记单引号被过滤

用mysql的其他函数来解决

附上测试代码(sql时间盲注的代码除了sql的语句不同,其他的类似;bool盲注,就是修改返回判断条件,if “aaa” in res.content:,bool就没有去测试了,有兴趣自己试一下吧)

手工sql注入&&绕过waf &&一个实例分析_第25张图片

报错注入试下:

手工sql注入&&绕过waf &&一个实例分析_第26张图片

这么多报错函数,就没有一一去测试

总结

本篇文章较基础,但对于作者来说,较全面了

手工注入知识就这些,更高级的就是各种姿势了

大体也是这个流程,这也是作者的所有干货了

文章仅用于普及网络安全知识,提高小伙伴的安全意识的同时介绍常见漏洞的特征等,若读者因此做出危害网络安全的行为后果自负,与合天智汇以及原作者无关,特此声明!

别忘了投稿哦

大家有好的技术原创文章

欢迎投稿至邮箱:[email protected] 

合天会根据文章的时效、新颖、文笔、实用等多方面评判给予100元-500元不等的稿费哦

有才能的你快来投稿吧!

了解投稿详情点击重金悬赏 | 合天原创投稿等你来!

手工sql注入&&绕过waf &&一个实例分析_第27张图片

你可能感兴趣的:(手工sql注入&&绕过waf &&一个实例分析)