#我的笔记#web渗透

The first day,fighting.

Web渗透测试:

渗透测试是对系统安全性的测试,通过模拟恶意黑客的攻击方法,来评估系统安全的一种评估方法。


1、SQL注入攻击

首先找到带有参数传递的URL页面,如搜索页面、登录页面、提交评论页面等。

对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中的FORM标签来辨别是否还有参数传递,在

的标签中间的每一个参数传递都有可能被利用。

当找不到有输入行为的页面时候,可以尝试找一些带有某些参数的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=10

在URL参数或表单中加入某些特殊的SQL语句或SQL片段,如在登录页面的URL中输入HTTP://DOMAIN/INDEX.ASP?USERNAME='HI' OR 1=1

根据实际情况,SQL注入请求可以使用以下语句:

' or 1=1--    

" or 1=1--

or 1=1--

' or 'a'='a

" or "a"="a

') or ('a'='a

OR是一个逻辑运算符,在判断多个条件的时候,只要一个成立,则等式就成立,后面的AND就不再执行判断了,也就是说绕过了密码验证,只用用户名就可以登录。

--是忽略或注释,通过连接符注释掉后面的密码验证(对access数据库无效)。

预防SQL注入:转义敏感字符及字符串;屏蔽出错信息;在服务端正式处理之前对提交数据的合法性进行检查(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)。最根本的解决手段是在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作。

SQL注入步骤:

首先,判断环境,寻找注入点,判断数据库类型。

其次,根据注入参数类型,在南海中重构SQL语句的原貌,按参数类型主要分为三种:

(A)ID=49

这类注入的参数是数字型,SQL语句原貌大致如下:

select * from 表名 where 字段=49

注入的参数为ID=49 and [查询条件],即生成语句:

select * from 表名 where 字段=49 And [查询条件]

(B)class=连续剧

这类注入的参数是字符型,SQL语句原貌大致如下:

select * from 表名 where 字段=‘连续剧’

注入的参数为class=连续剧’ and [查询条件] and ' ' ='  ,即生成语句:

select * from 表名 where 字段=‘连续剧’ and [查询条件] and ' '=' ' 

搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下:

Select * from 表名 where 字段like ’%关键字%’

注入的参数为keyword=’ and [查询条件] and ‘%25’=’, 即是生成语句:

Select * from 表名 where字段like ’%’ and [查询条件] and ‘%’=’%’

接着,将查询条件替换成SQL语句,猜解表名,例如:

ID=49 And (Select Count(*) from Admin)>=0

如果页面就与ID=49的相同,说明附加条件成立,即表Admin存在,反之,即不存在(请牢记这种方法)。如此循环,直至猜到表名为止。

表名猜出来后,将Count(*)替换成Count(字段名),用同样的原理猜解字段名。

最后,在表名和列名猜解成功后,再使用SQL语句,得出字段的值。

SQL注入常用函数:

Access: asc(字符),SQL Server: unicode(字符)

作用:返回某字符的ASCII码

Access: chr(数字),SQL Server: nchar(数字)

作用:根据ASCII码返回字符

Access: mid(字符串,N,L),

SQL Server: substring(字符串,N,L)

作用:返回字符串从N个字符起长度为L的子字符串,即N到N+L之间的字符串

Access:  abc(数字),SQL Server: abc(数字)

作用:返回数字的绝对值(在猜解汉字的时候会用到)

Access: A between B And C ,SQL Server: A between B And C 

作用:判断A是否界于B和C之间

中文处理方法:

access:中文的ASCII码可能会出现负数,取出该负数后用abs()取绝对值,汉字字符不变。

SQL Server:中文的ASCII为正数,但由于是UNICODE的双位编码,不能用函数ascii()取得ASCII码。必须用函数Unicode()返回Unicode值,再用nchar函数取得对应的中文字符。

#我的笔记#web渗透_第1张图片

注意,引用数字时不需要按添加开始和结尾的单引号定界符。数据库处理数值类型的值时,数值不带引号。

#我的笔记#web渗透_第2张图片
#我的笔记#web渗透_第3张图片





2、Cross-site scripting(XSS):跨站点脚本攻击

首先找到带有参数传递的URL,如登录页面,搜索页面,提交评论,发表留言页面等。

其次,在页面参数中输入如下语句:

当用户浏览时便会弹出一个警告框,内容显示的是浏览者当前的cookie串,这就说明该网站存在XSS漏洞。

预防XSS漏洞:对JavaScript,VB script,HTML,ActiveX,Flash等语句或脚本进行转义;在服务端正式处理之前对提交数据的合法性进行检查(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)。

3、CSRF:跨站点伪造请求

与XSS不同,且攻击方式几乎相左,XSS是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。

XSS和CSRF目的在于窃取用户的信息,如session和cookies.

4、Email Header Injection:邮件标头注入

如果表单用于发送email,表单中可能包括subject输入项(邮件标题),我们要验证subje中应能escape掉\n标识。

因为“\n”是换行,如果在subje中输入“hello\ncc:[email protected]”,可能会形成:

subject:hello

cc:[email protected]

如果允许用户使用这样的subject,那他可能会利用这个缺陷通过我们的平台给其他用户发送垃圾邮件。


5、Directory Traversal:目录遍历

程序中没有过滤用户输入的“../”和“./”之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。

测试方法:在URL中输入一定数量的“../”和“./”,验证系统是否escape掉了这些目录跳转符。

预防目录遍历:限制Web应用在服务器上的运行,进行严格的输入验证,控制用户输入非法路径。

6、exposed err messages:错误信息

首先找到一些错误页面,比如404或500页面。

验证在调试未开通过的情况下,是否给出了有好的错误提示信息,比如“你访问的页面不存在”等,而并非暴露一些程序代码。

预防错误信息:测试人员在进行需求检查时,应该对出错信息进行详细检查,比如是否给出了出错信息,是否给出了正确的出错信息。

你可能感兴趣的:(#我的笔记#web渗透)