小言_互联网的博客

MYSQL注入

401人阅读  评论(0)

首先,先介绍一下 什么是SQL注入?

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

注入过程:

  • 使用 ’ 测试是否存在注入点,如果页面显示与之前不同或者报错则存在注入点。(在输入框输入)
  • 使用and逻辑语句和’1’='1/‘1’=/2(1=1/1=2)进一步判断是否能够带入sql命令和注入类型。
    (被拦截的时候测试有哪些字符会被拦截过滤掉,被过滤掉的命令要记住)
  • 使用order by N查询列数(方便union注入,报错则不需要)
  • 使用select 1,2,…,N查询回显位置(报错则不需要)
  • 在带有回显的部分带入注入命令查询信息
  • 查询信息可以使用union select concat(database()(数据库名字),user()(当前用户),version()(数据库版本))等

查询顺序

数据库名→表名→列名→数据

格式如下
Union select table_schema form information_schema.table where tables where table_schema=database()数据库名

Union select table_table form information_schema.table where tables where table_schema=database()表名

Union select column_name form information_schema.column where tables where table_name='table_name’列名

Union select 'column_name’form(table_name)数据

floor报错注入

Floor函数是一个下取整函数(即忽略小数部分)
Rand(0)能够产生一个随机数 ((0)可以更稳定的产生一个真随机数,如果不加(0)则可能会出现重复的数,Rand(0)会产生一个0→1的随机小数)
Floor(rand(0)*2)能够产生0或者1的随机二值

Count ()+Group by *会对查询表格归类计数,相同值得列归一后计数加1
Concat()可以将两列值合并为一列Select

查询时应输入 Select count(*),concat(floor(rand(0)*2),version())x from information_schema.tables group by x

当显示出报错的标准语句Duplicate entry ‘1xxx’ for key ‘<group_key>’ mysql>就成功了。(‘1xxx’ / 'xxx1’中的 1 为随机数,xxx为当前使用的数据库名,在报错时随机数肯定为1,不会为0)

实际破解过程中

  • 可以用/**/代表空格
  • /LIMIT/ 可以控制我们查询当前数据段里的哪一个数据/LIMIT/(0,1)是第一个数据,/LIMIT/(1,1)是第二个数据
  • 可以利用burpsuit暴力破解表名,查询一些常见表名:flag,whale,passord,key,aflag……

转载:https://blog.csdn.net/borrrrring/article/details/105100344
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场