Невижу смысла плодить много тредов на каждый вопрос, поэтому складываю в кучу.
1) Как в постгресе писать/селектить нуллбайты?
Код:
postgres=# show server_encoding;
server_encoding
-----------------
UTF8
(1 row)
postgres=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)
postgres=# select version();
version
-----------------------------------------------------------------------------------
PostgreSQL 9.4.5 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 5.2.0, 64-bit
(1 row)
Код:
postgres=# select chr(0);
ERROR: null character not permitted
postgres=# select E'\000';
ERROR: invalid byte sequence for encoding "UTF8": 0x00
postgres=# select E'\x00';
ERROR: invalid byte sequence for encoding "UTF8": 0x00
тоже самое если конвертить к bytea. Тоже самое воспроизводится на 8.4, с самыми разными енкодингами.
Зачем?
Код:
copy (select '\x7fELF...') to '/tmp/test.so';
create function pewpew(cstring) returns int as '/tmp/test.so', 'pewpew' language c strict;
Но из-за того что нельзя селектить нуллбайты, записать so-шку не получится(не получается).
Да, можно дефолтные постгресовые либы грузить и будет мне command execution, вопрос скорее академический, чем практический.
2) Как добавить хендлер для http параметров в sqlmap?
Допустим, есть jsonrpc или xml, или параметр в каком-либо другом виде должен быть предоставлен серверу.
Для json допустим понятно:
Код:
./sqlmap.py -u http://host/?q={"id":"*","name":"Vasya"}
Но интересует есть ли возможность прогнать конечный вектор через свою функцию, а результат уже передавать дальше. В ридми такого не видел, не верится что никто такого не запилил.
Код:
commit 65b2b0ad879742c6d4f56059794dc0da86bcb7f7 refs/heads/master
Author: Miroslav Stampar <miroslav.stampar@gmail.com>
Date: Mon Nov 21 16:41:02 2011 +0000
adding switch --eval
3) Откуда ядро знает делался setuid процесса или нет
PAM хранит в памяти процесса хеш пароля (не затирает его). После авторизации ssh аттачится к pts и этот процесс уже с uid = тому под кем я авторизовался, но приаттачиться к нему и дампить его память нет пермишенов. Мне вот непонятно почему так?
Как это выглядит:
http://paste.lolwut.me/index.php?p=44c38f9c&type=raw
Или ещё короче:
Код:
desktop# cat test.c
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
int main(void) {
setresuid(1000, 1000, 1000);
return execl("/bin/sh", "sh-", NULL);
}
desktop# cc test.c -o test
desktop# ./test
[n0body@desktop tmp]$ grep Uid /proc/$$/status
Uid: 1000 1000 1000 1000
[n0body@desktop tmp]$ echo $$
12681
----------------- в другом терминале -----------------
» strace -f -p 12681
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
P.S. yama/ptrace_scope = 0, дело именно в том что ядро, каким-то хером запоминает что процесс setuid'ился.
P.S.S. привет SynQ
4) Актуальный post-exploitation тулчейн
4.1 Кейлогер для tty/pts
Ничего адекватного не нагуглилось, ещё года 2 назад наговнокодил свой велосипед:
https://bitbucket.org/nobody_/terminal-mirror/src но до финальной версии ему ещё далеко.
4.2 Бекконект с плюшками
Пока использую
tshd, но кто вникал как он работает, наверняка такой же недовольный как и я. Нужно выбросить в помойку и сделать своё, со всеми надлежащими плюшками типа кроссплатформенности, шифрования, поддержки нормальной передачи файлов, форвардинг портов, etc.
Кому интересно этим заняться, велком в пм.