#我的笔记#web渗透

The first day,fighting.

Web渗透测试:

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


1、SQL注入攻击

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

对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中的FORM标签来辨别是否还有参数传递,在<FORM>和</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函数取得对应的中文字符。

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





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

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

其次,在页面参数中输入如下语句:<script>alert(document.cookie)</script>

当用户浏览时便会弹出一个警告框,内容显示的是浏览者当前的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:spamvictim@example.com”,可能会形成:

subject:hello

cc:spamvictim@example.com

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


5、Directory Traversal:目录遍历

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

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

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

6、exposed err messages:错误信息

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:于川皓 学号:16140210089 转载自:https://baike.baidu.com/item/sq...
    道无涯_cc76阅读 5,993评论 0 2
  • 漏洞挖掘与利用 测试环境的搭建 引言 为什么要搭建本地测试环境?我想下面的东西能够回答你的疑惑。 第二百八十五条 ...
    作业没写完阅读 8,651评论 0 4
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 13,534评论 2 22
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 6,345评论 0 5
  • 注入攻击的分类 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传...
    查无此人asdasd阅读 5,680评论 0 5