搜索
查看: 7044|回复: 0

【原创计划】SQL注入学习笔记

[复制链接]

714

主题

354

回帖

2669

积分

管理员

本论坛第一帅

积分
2669

热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2020-3-13 13:00:04 | 显示全部楼层 |阅读模式 来自 甘肃
作者:桑葚
介绍:练习时长两周半的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的话,它会自动帮我们尝试每个注入点)。
那么我们手工的话,就需要改变一下这个网址。http://zheshiygelizi.com/?page=1&id=1
话不多说。
用靶场环境(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--+
回显结果如下:
演示就到这里了。
我想说的是,当我们在实战的过程里,会遇到各种各样的问题。
比如多种符号的干扰,不同的数据库。这就需要我们不断扎实自己的基础,灵活运用自己的所学知识。
光看不够,要多练习,熟能生巧。
纸上谈兵是不够的,共勉,有问题的话欢迎留言交流。如果文章有不足之处,还请各位兄弟指点,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
有志者,事竟成,破釜沉舟,百二秦关终属楚. 苦心人,天不负, 卧薪尝胆 ,三千越甲可吞吴
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表