作者:桑葚
介绍:练习时长两周半的web安全练习生
我觉得sql注入在web安全里面是很重要的一个漏洞,所以大家很有必要去认真学习一下。 以下笔记均是在靶场进行练习的,各位兄弟可以做一个参考。实战的时候灵活运用,具体问题具体分析。 正式开始! mysql注入的基本流程。 1:首先我们要判断是否存在注入,为我们接下来获取网站的数据库名,表名,列名以及数据做好准备。 存在注入判断:and 1=1(正确) and 1=2(错误) 但是在这里的话,就存在一些问题,每个程序员写代码的风格不一样,我挑选其中的几样跟大伙交流一下。 当看到这样一个网站的时候,我们去判断注入,输入了and 1=1 或者 and 1=2,网站都没有任何的回显。 我们可以尝试这样,在id=1后面家上一个'。闭合前面的字符。 因为可能在网页代码里存在这样的情况$_GET='$id'(乱写的,做个演示) ''在这个符号里面的东西,会被统一识别为字符,也就是说,如果你不去闭合的话,就会存在这样的情况。$_GET='$id and 1=1',你所加入的判断都会被当作字符处理。 所以我们需要进行闭合,然后进一步我们的判断。当然,也存在$_GET=('$id')这样的形式,同样的道理,我们进行')闭合。 当and 1=1显示正常,and 1=2显示错误的时候,那么这个地方大概率存在注入点。 我们就可以利用order by x union select 1,2,3..,进行联合查询,判断其中的字段。为我们接下来的注入做好准备。 当这个网站的注入点在id=1的地方时,你在page=1后面输入自己的注入判断是不会有结果的(用sqlmap的话,它会自动帮我们尝试每个注入点)。 话不多说。 用靶场环境(sqlilabs)第一关举例。 当我们进行字段判断的时候,发现什么也没有回显。 我们加入',进行闭合。 发现还是没有任何反应。 这个时候,我们可以在oder by 1,2,3,4这里动动心思。我们在后面添加--+,省略后面的内容,来看看结果: 这里存在一个临界点,当我们输入1,2,3,4的时候,爆出错误。输入1,2,3的时候,无字段反应。 接下来,我们运用select语句进行查询。 我们在2的地方进行database查询。 这里啰嗦几句,在mysql里面: table_schema:数据库名 table_name:表名 column_name:列名 并且mysql多带有默认的数据库:information_schema information_schema.tables:存储表名信息的表 information_schema.columns:存储列名信息的表 information_schema.schemata:存储数据库名信息的表 mysql中符号“.”代表下一级 举个例子:information_schema.tables:数据库infor...下的tables表 回到正文: 我们对刚刚查询出来的数据库security进行下一步查询。 所用语句:union select 1,table_name,3 from information_schema.tables where table_schema='security'--+ 回显结果如下: 这里,我们注意到只回显了一个表名,那么我们怎样获取这个数据库下的所有表名呢? 完善一下我们的语句:union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+ 回显结果如下: file:///C:\Users\Priess\AppData\Local\Temp\ksohtml15096\wps15.jpg 这里,我们对“users"这张表继续进行探索。(users这张表也大多包含了管理员的信息) 修改我们的语句:union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+ 回显结果如下: 到这里的时候,我们发现回显了很多的结果出来,很多不是这个表里面的信息也出现了。因为我们没有指定一个范围。它就默认去搜索所有有关“users”下的信息。我们可以完善一下我们的语句,让他爆出所在数据库下的信息。 完善语句:union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security'--+ 回显结果如下: 继续: 我们针对username以及password继续进行挖掘 修改我们的语句:union select 1,username,password from users limit 2,1--+ 回显结果如下: 演示就到这里了。 我想说的是,当我们在实战的过程里,会遇到各种各样的问题。 比如多种符号的干扰,不同的数据库。这就需要我们不断扎实自己的基础,灵活运用自己的所学知识。 光看不够,要多练习,熟能生巧。 纸上谈兵是不够的,共勉,有问题的话欢迎留言交流。如果文章有不足之处,还请各位兄弟指点,谢谢!
|