Мини заметки — выпуск 7
7 августа 2012
Темы седьмого выпуска: скрипт для загрузки картинок на Yfrog, получение паролей из адресного пространства процесса в UNIX, обфускация кода в Perl, регулярное выражение для валидации JSON и не только. Предыдущие выпуски: первый, второй, третий, четвертый, пятый и шестой.
1. Скрипт загрузки картинок на Yfrog
Честно говоря, поначалу я думал написать отдельный модуль и залить его на CPAN, но потом оказалось, что тут кода-то всего на тридцать строк:
use strict;
use warnings;
use LWP;
# yfrog-uplaod.pl v 0.1
# (c) Alexandr A Alexeev 2012 | http://eax.me/
my $file = $ARGV[0] or die "Usage: $0 <fname>\n";
my $host = int(rand(9)) + 1;
my $ua = LWP::UserAgent->new();
my $res = $ua->post(
"http://iload$host.imageshack.us/upload_api.php",
[
key => '015EFMNVfe7f6f7e93cb4a7b0a41e19956ce59f8',
Filedata => [$file],
],
Content_Type => 'form-data',
);
if($res->is_success &&
$res->decoded_content =~ m!<image_link>(.*?)</image_link>!) {
print "[+] OK\n";
print "image_link:\t$1\n";
$res->decoded_content =~ m!<yfrog_link>(.*?)</yfrog_link>!;
print "yfrog_link:\t$1\n";
} else {
print "[-] Failed\n";
}
Короткую ссылку можно использовать в Twitter, длинную — на форумах и в блогах.
2. Как в X11 переключиться на другой монитор
Выводит список мониторов и доступных режимов:
Включаем вывод на монитор VGA:
Выключаем вывод на монитор LVDS:
Меняем разрешение для монитора VGA:
Чтобы картинка не растягивалась:
Также можно разделить картинку между несколькими мониторами:
Чтобы не увидеть сообщение об ошибке вроде такого:
… нужно подправить xorg.conf.
3. Что делать, если в Ubuntu у окон пропали заголовки?
В Xubuntu нужно сказать:
В других убунтах вместо xfwm используется metacity или compiz. Соответствующий менеджер окон нужно запустить с ключом --replace. Если же менеджера окон нет вообще (например, он был случайно удален), его нужно установить. Это удобно сделать, перейдя в консоль путем нажатия Ctr+Alt+F1. Вернуться в X11 можно с помощью сочетания Ctr+Alt+F7.
4. Отключение гостевого входа в Xubuntu
По умолчанию в Xubuntu разрешен гостевой вход в систему. Для отключения этой возможности нужно отредактировать файл /etc/lightdm/lightdm.conf следующим образом:
user-session=xubuntu
greeter-session=lightdm-gtk-greeter
allow-guest=false
Обратите особое внимание на последнюю строчку. После перезагрузки системы войти под гостем уже не удастся.
5. Как получить пароли из адресного пространства процесса
Получаем ID процесса:
Аттачимся к процессу с помощью отладчика GDB:
(gdb) generate-core-file
(gdb) detach
(gdb) q
Пароль скорее всего хранится в памяти где-то рядом с именем пользователя:
В выводе получим несколько десятков строк, напоминающих пароль — осталось попробовать их все по очереди.
В Ubuntu для выполнения такого приема нужно иметь права суперпользователя, а вот в CentOS достаточно просто быть владельцем процесса. Во FreeBSD с настройками по умолчанию примем не сработает, ибо отключен procfs.
6. Обфускация кода на Perl
Можно вбить в адресной строки браузера http://perlobfuscator.com/ (см также разъяснения относительно так называемого «сжатия») или же воспользоваться модулем Acme::EyeDrops:
См также заметку Как написать неплохой обфускатор.
7. Debian — пишем простенький init.d скрипт
Создаем файл /etc/init.d/common следующего содержания:
### BEGIN INIT INFO
# Provides: common
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Short description
# Description: Description...
### END INIT INFO
case "$1" in
start)
ifconfig eth0 down
ifconfig eth0 hw ether 00:11:22:33:44:55
ifconfig eth0 up
;;
stop)
;;
*)
echo "Usage: /etc/init.d/common {start|stop}"
exit 1
;;
esac
exit 0
Как видите, этот скрипт меняет MAC-адрес сетевой карты во время загрузки системы (в комментариях подсказывают, что пример неудачный). Меняем права доступа и добавляем скрипт на автозапуск:
sudo update-rc.d common defaults
Удаляем скрипт из автозапуска:
См также wiki-страничку How to LSBize an Init Script на debian.org, и еще скрипт для автозапуска веб-сервера starman, что не так давно проскакивал в рассылке Moscow.PM.
8. Если вы не помните приоритеты операторов в Perl
… то оцените следующий прием по достоинству:
Вывод:
Как видите, вместо того, чтобы учить приоритеты операторов можно просто запомнить приведенную выше команду.
9. Как изменить яркость экрана в Debian/Ubuntu
Очень просто:
Подробности, как обычно, в манах.
10. Регулярное выражение для валидации JSON
А это регулярное выражение я решил тупо скопипастить со StackOverflow:
qr/
(?(DEFINE)
(?<number> -?(?= [1-9]|0(?!\d) ) \d+ (\.\d+)?([eE] [+-]? \d+)?)
(?<boolean> true | false | null )
(?<string> " ([^"\\\\]* | \\\\ ["\\\\bfnrt\/] | \\\\ u [0-9a-f]{4} )* " )
(?<array> \[ (?: (?&json) (?: , (?&json) )* )? \s* \] )
(?<pair> \s* (?&string) \s* : (?&json) )
(?<object> \{ (?: (?&pair) (?: , (?&pair) )* )? \s* \} )
(?<json> \s* (?: (?&number) | (?&boolean) | (?&string) | (?&array) | (?&object) ) \s* )
)
\A (?&json) \Z
/six
}
В модуле Regexp::Constant, если что, такого нет.
Дополнение: Мини заметки — выпуск 8
Метки: Всячина.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.