跳到主要内容

第 5 天

· 阅读需 4 分钟
hsiehbro
hsiehbro
  1. 国内 fofa 通过定期爬取全球 IPv4 地址, 检测出漏洞
  2. Wappalyzer 识别服务指纹

端口扫描

Nmap

  • -sn, 只 ping 不扫描
  • -Pn, 跳过 ping 直接扫描
  • -sS, 发 TCP SYN 包扫描
  • -p, 扫描指定端口, Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
  • -sV, 嗅探服务和版本信息
  • -O, 检测操作系统
  • -iL <文件名>, 读取目标文件
  • -d, 显示扫描过程
  • --open, 只显示开放的端口

Exp: 扫描目标 ip 所有端口和服务指纹

docker run --rm uzyexe/nmap -Pn -p1-65535 --open -sV 124.221.131.194 -d

Zenmap

SQL 注入

测试修改 sql 语句能否改变原执行逻辑, 与正常输入返回结果不一致则存在 sql 注入漏洞

数字型注入

id=1 and 1=2
  • 测试正确的字段数量, 通过 select 后尝试多个字段判断支持接收几个字段参数
id=-1 union select 1,2 from mysql.user
  • 拼接 union 语句, 通过 information_schema 库的 columns 表查询 mysql 下所有数据库/表/字段, 查询字段数与上面尝试成功数量一致
id=-1 union select null,concat(table_schema,',',table_name,',',column_name) from information_schema.columns

  • 通过上面查询的字段获取用户名/密码

  • 复制网页源码创建 .html 文件在浏览器打开

  • 拷贝 md5 密文通过 https://www.cmd5.com/ 网站解密

字符串型注入

通过 '" 提前闭合字符串, 并注释掉原字符串后面内容

name='1' or 1=2 -- a' 

报错注入

函数传入构造的参数, 会将参数执行结果以报错形式打印出来

盲注

返回布尔结果

通过逐个比较判断数据的长度

length()

通过数据 ASCII 码值二分查找出对应的字母数字

ascii(substr(,,)) > 97

延时

通过条件分支匹配执行延时, 找出对应的字母数字或数据长度

HTTP 报文头部注入

源码中读取 HTTP 报文头字段并由 SQL 处理时, 可注入 报文头字段构造字符串型注入, 然后重放

二次注入

插入带有 ' 的脏数据, 脏数据被再次调用时生效

GetShell

满足三个条件:

  1. 知晓当前数据库的绝对路径
  2. 配置文件my.ini中 secure_file_pre 为空
  3. 当前用户有数据库所在目录的写权限
union select into "/var/lib/mysql/data/"

常用变量及函数

全局变量

@@basedir 当前数据库的绝对路径

绕过防注入

位宽注入

GBK 编码下, %df\ 会被解析成汉字, 依次绕过程序对 ' 的转义

id='1%df' or 1=2 -- a'

注释绕过

只有特定版本的 MySQL 会执行 /*! */ 中的内容

十六进制编码

Base64 多次编码

SQLMap