postgres 9.3 ã§json
postgres 9.3ã«ã¯jsonããã£ãã£ãã«ãµãã¼ãããã¦ãããjsonå ã®å¤ãã¢ã¯ã»ã¹ãããã¤ã³ããã¯ã¹ã§ããã
psql (9.3.0)
Type "help" for help.# JSONå!
yoyodb=> CREATE TABLE publishers(id INT, info JSON);
CREATE TABLE# JSONåãã¤ã³ããã¯ã¹!!
yoyodb=> CREATE INDEX ON publishers( ( info->>'name' ) ) ;
CREATE INDEXyoyodb=> insert into publishers (id,info) values (1, '{"name":"foo"}');
INSERT 0 1
yoyodb=> insert into publishers (id,info) values (2, '{"name":"bar"}');
INSERT 0 1
yoyodb=> insert into publishers (id,info) values (3, '{"name":"baz"}');
INSERT 0 1
yoyodb=> select * from publishers
yoyodb-> ;
id | info
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1 | {"name":"foo"}
2 | {"name":"bar"}
3 | {"name":"baz"}
(3 rows)
# col->'key'ã§JSONå
ã®ãã£ã¼ã«ããã¢ã¯ã»ã¹
yoyodb=> select info->'name' from publishers ;
?column?
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
"foo"
"bar"
"baz"
(3 rows)
yoyodb=> select info from publishers where info->>'name'='bar';
info
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
{"name":"bar"}
(1 row)
yoyodb=> select info->'name' from publishers where info->>'name'='bar';
?column?
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
"bar"
(1 row)
debianã§ã®ã¤ã³ã¹ãã¼ã«
http://www.postgresql.org/download/linux/ubuntu/
echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' | sudo tee
/etc/apt/sources.list.d/postgres.list
https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.3
DBã¨ã¦ã¼ã¶ã®è¨å®
ã³ãã³ãã§ãããã
ãããã¯
createuser --no-adduser --no-createdb --pwprompt --encrypted yoyota
createdb --owner=ams --encoding=UNICODE yoyodb
su postgres
psql
CREATE ROLE yoyota WITH LOGIN NOSUPERUSER NOCREATEROLE ENCRYPTED PASSWORD 'xxxx';
CREATE DATABASE yoyodb WITH OWNER yoyota;
ã¯ã©ã¤ã¢ã³ã権é
/etc/postgresql/9.3/main/pg_hba.conf
ã«ãã®ãããªã©ã¤ã³ã追å
local all all md5
ããã¯è¶ ç»æçã§ãããã¹ãã¼ãã¬ã¹ãªJSONã¨SQLããã¾ãèåããã¦ãããPostgresãåªç§ãªRDBããno-sqlã¾ã§ã«ãã¼ããä¸è½DBã«ãã¦ãã¾ãæ©è½ãªã®ãããããªããããããã®éçºã¯psqlã«ãã¾ãã
htmlã§ãããjpegã§ããããã¡ã¤ã«
ãã®URLãéãã¦ã½ã¼ã¹ãè¦ã¦ãããããï¼
http://lcamtuf.coredump.cx/squirrel/
HTMLã½ã¼ã¹ã®ã³ã¡ã³ãã®ä¸ã«JPEGãã¼ã¿ãåãè¾¼ã¾ãã¦ããã
ããã¦ãç»åãªã³ã¯ã¯åãURLâ¦
ã½ã¼ã¹ãããè¦ã¦ã¿ãã¨HTMLã¿ã°ã®åã«çããã¤ããªã·ã¼ã±ã³ã¹ããããå¤åJPEGã®ãããã¼ã®ã³ã¡ã³ãéå§ã¾ã§ã®é¨åã ãããã ã¨ããã¨ããã®HTMLã»JPEGå ¼ç¨ãã¡ã¤ã«ã¯JPEGã®ã³ã¡ã³ãã®ãªãã«HTMLãå ¥ã£ã¦ãã¦ããã®ã³ã¡ã³ãã®ä¸ã«JPEGã®ãã¼ã¿ãå ¥ã£ã¦ããäºã¤ã®ãã©ã¼ããããæ··ã£ãå ¥ãååãã¡ã¤ã«ã£ã¦ãã¨ã«ãªããå¯æãããã¯ã ã
VIããã«
VIã®ã¢ã¼ãåãæ¿ãã足ã§ãã£ã¦ç·¨éã®é«éåãå¯è½ã«ããããã«ãèªä½ãããã¤ããã:
https://github.com/alevchuk/vim-clutch
ããã«ãè¸ãã¨ãiããå
¥åããç·¨éã¢ã¼ãã«ãä¸ããã¨ãESCAPEãã§ã³ãã³ãã¼ã¢ã¼ãã«ãç´ æ´ããããã¯ã ã
emacsç¨ã®ãControlããã«ããåºãã使ãããã
被害å¦æ³çã®åäººï¼ Pythonã§ssh
paramikoã¨ããpythonã®sshã©ã¤ãã©ãªã§é éãã·ã³ã®æä½ãèªååã§ããã
hello paramiko
import paramiko
transport=paramiko.Transport( ( 'takao3' , 22 ) )
transport.connect(username='tengu', password='xxxx')
c=transport.open_session()
c.exec_command('ls hoge > /dev/null')
if c.recv_exit_status()==0:
print c.makefile('rb', -1).readlines()
else:
print c.makefile_stderr('rb', -1).readlines()
æ¥ç¶
pkeyã使ãããã«ãã¹ãã ããpasswordã使ããªãããããªãã¨ãããããã¨ããã§ãTCPã½ã±ãã以å¤ã®Transportã£ã¦ä½ãããã ããâ¦
transport=paramiko.Transport( ( 'takao3', 22 ) )
transport.connect(username='tengu', password='xxxx')
ã»ãã·ã§ã³ã»ãã£ã³ãã«
é éã³ãã³ãã¨ã¯Channelã¨å¼ã°ãããã¼ã¿ã¹ããªã¼ã ã§ãã¼ã¿ãããåãããããã£ã³ãã«ãéãã¦ãã¼ã¿ãæ¸ãè¾¼ãã ããè¿çãèªã¿åºããããããã»ã¹ã®çµäºãå¾
ã£ããexit statusãå¾ããã§ãããsubprocessã®Popenã¿ãããªæè¦ã ã
http://www.lag.net/paramiko/docs/ (help(paramiko.Channel)) ãåç
§ã
# ãã£ã³ãã«(ã»ãã·ã§ã³)ã¯ã³ãã³ãæ¯ã«éã
c=transport.open_session()
c.exec_command('ls hoge > /dev/null')# ã³ãã³ããçµäºããã¾ã§ãããã¯ãããwait(2)ã«ç¸å½ããã
if c.recv_exit_status()==0:
# åºåãå°ãã®ã§ãããã¡ãããåºåãèªãã
# åºåãå¤ãã¨èªãã å¾ã«recv_exit_status()ããªãã¨ãããªãã ããã
print c.makefile('rb', -1).readlines()
else:
print c.makefile_stderr('rb', -1).readlines()
ãµã¤ãã®ããã¥ã¡ã³ãã¼ã·ã§ã³(http://www.lag.net/paramiko/docs/)ããã£ãããã¦ãã¦ããã管çãããã©ã¤ãã©ãªã¨ããå°è±¡ãå¾ããããã¡ãªã¿ã«paramikoã¨ããåã¯ã被害å¦æ³çã®å人ãã¨ããæå³ã®ã¨ã¹ãã©ã³ãèªã®é èªã ããã ã
Flameãä¸çæé«æ°´æºã®æè¡ã«ãããµã¤ãã¼å µå¨ã§ãããã¨ã証æããæ©è½ãªã¹ã
f-secureãFlameã®åããææãã¦ããï¼
http://www.f-secure.com/weblog/archives/00002383.html
ã¦ã¼ã¶ç£è¦
keyloggerã¨screengrabberããã¤
ãã«ããã¹ãç£è¦
ãªãã£ã¹ãPDFãAutodeskãã¡ã¤ã«ãªã©ã®ããã¥ã¡ã³ãããã£ã¹ã¯ã»ãããã¯ã¼ã¯ä¸ã§çºè¦ãããã¹ããæ½åºããããsqliteãã¼ã¿ãã¼ã¹ã«ä¿åã
çè´æ©è½
ãã¤ã¯ããã©ã³ããªã³ã«ãã¦ä¼è©±ããªã¼ãã£ãªãã¡ã¤ã«ã¨ãã¦ä¿åã
å°åæ å ±
ãã£ã¹ã¯ã»ãããã¯ã¼ã¯ä¸ã§ç»åãã¡ã¤ã«ãæ¢ãããããGPSæ å ±ãæ½åºã åçãã¨ãããå ´æãä¿åã
éé¢ããããã·ã³ãããâ¦
ãã®ããã«éããããæ å ±ã¯æå·åãããSQLiteãã¼ã¿ãã¼ã¹ã¨ãã¦USBã¹ãã£ãã¯ã«ä¿åãã ãããã¯ã¼ã¯ã®ããç°å¢ã«è¾¿ãçãããéãè¿ãããããã«ãªã£ã¦ããããããã¯ã¼ã¯ã¨æ¥ç¶ããã¦ããªããã¤ã»ãã¥ãªãã£ã¼ç°å¢ãããæ å ±ãçã¿åºããããã«ãªã£ã¦ããã
...
証ææ¸æ¤è¨¼ãæã¡ç ´ã
- Microsoft Updateãååããproxyã«ãããããã¯ã¼ã¯å ã®ä»ã®ãã·ã³ãææã
- Microsoft Terminal Server license certificatesãæªç¨ãããã¨ã«ããå½ã®ã¢ãããã¼ããæé
- ç¬èªã®ã»ãã¥ãªãã£ã¼ç 究ã«ããMD5ããã·ã¥ã®è¡çªãä½ãåºãæ¹æ³ãçºè¦ãããã«ããæ°åã¦ã¤ã³ãã¼ãºããé¨ãå½certificateãä½ãã ãã
ä¸è¨ã®å·¥ä½ã¯ã¹ã¼ãã¼ã³ã³ãã¥ã¼ã¿ã使ãããªããã¨ãåæã¨ãªãããã®ãããªé«åº¦ãªå½å®¶ã¬ãã«ã®ã¹ãã¤æ´»åã2010å¹´ããè¡ããã¦ãããã¨ã«ãªãã2010ããµã¤ãã¼æ¦äºå å¹´ã¨ãããã¨ã«ãªãã
Stuxnetã¨Flameã®é¢ä¿
Kasperskyã®ç 究è ãSuxnetã¨Flameã®é¢é£æ§ãçºè¦ãã
http://www.securelist.com/en/blog/208193568/Back_to_Stuxnet_the_missing_link
é·ã ã¨è¨¼æ ã¨è§£èª¬ãç¶ããæå¾ã®è¦ç´ãè¦ãã¨ãããããã¨ãããï¼
- Flameã¯stuxnet以åã«ãã©ãããã©ã¼ã ã¨ãã¦åå¨ãã¦ãã
- åæ(2009å¹´ç)ã®stuxnetã¯Flameã®ãã©ã°ã¤ã³ã¢ã¼ããã¯ãã£ã«ããã¢ã¸ã¥ã¼ã«ã使ç¨ãã¦ãã
- ãã®ã¢ã¸ã¥ã¼ã«ã¯ãã®æç¹ã§ç¥ããã¦ããªãã£ãzero-day exploitã«ããç¹æ¨©ã¨ã¹ã«ã¬ã¼ã·ã§ã³ãå¯è½ã«ãã
- 2009年以éãstuxnetã¨Flameã¯å¥ã ã«é²åãã¦ãã£ã
ã¤ã¾ããååé¢ä¿ã«ããäºã¤ã®ãã¼ã ããµã¤ãã¼å µå¨ãéçºãã¦ããã¨ãããã¨ã«ãªãã
nginxã§åºå(HTMLæç)ãã©ã³ãã ã«å ¥ãæ¿ãã
ãã®ãããªHTMLã§åºåã表示ããã¨ãããï¼
ãã®ç»åãªã³ã¯ã®é¨åããã¼ã¸ãã¼ããã度ã«æ¬¡ã®HTMLæçã®ä¸ã¤ã«å ¥ãæ¿ãããã
<div class="ad"><a href="..."><img src="..." /></a></div>
<a href="/redirect?dest=FOO"><img src="/img/FOO.png"></a>
<a href="/redirect?dest=BAR"><img src="/img/BAR.png"></a>
<a href="/redirect?dest=BAZ"><img src="/img/BAZ.png"></a>
é«éåã®ããã«ãã£ãã·ã¥ãã¦ãããHTMLããä¸é¨ãæ¸ãæããããã«åã³çæããã®ã¯å¹çãæªããHTMLã®ä¸é¨ãåãã£ã¦ç¨æãããå¹¾ã¤ãã®HTMLæçã®ä¸ã¤ã«ãããããã¨ããç°¡åãªæä½ãªã®ã§ãã¹ã¯ãªããè¨èªã«ããããã¯ã¨ã³ãã§ãªããé«éãªCã³ã¼ãã«ãããããã幸ãã«nginxã¯ãããå¯è½ã«ãã¦ãããã
ssiã¨http_random_index_moduleãçµã¿åãããã°ãnginxå
ã§ãã¼ã¸ã®ä¸é¨ãã©ã³ãã ã«å
¥ãæ¿ãããã¨ãã§ããã
nginxãhttp_random_index_moduleãçµã¿è¾¼ãã§æ§ç¯ãã
./configure --with-http_random_index_modulessiã¯ãã£ãã©ã«ãã§æå¹ã«ãªã£ã¦ããã®ã§ãããã§æå®ããå¿ è¦ã¯ãªãã
random_index_moduleã®è¨å®
random_ads.conf
location /ad/banner/ { # ãã®URLã®ãªã¹ãã³ã¹ãã©ã³ãã ã«å ¥ãæ¿ããã
random_index on;
alias /var/www/hoge/ad/html/banner/; # ããã«è¡¨ç¤ºããHTMLæçãã¡ã¤ã«ãç½®ãã¦ããã
}
HTMLæç管ç
/var/www/hoge/ad/html/banner/ã«HTMLæçãç½®ãè¨å®ã«ãªã£ã¦ããããããã«ãã®ããã«HTMLæçãã¡ã¤ã«ãå
¥ãã¦ããããã¡ã¤ã«ã®å
容ã¯ä¸ã®HTMLæé¢ã ã
/ad/banner/ãã㯠foo.html, bar.html, baz.html ã®ãã¡ã®ä¸ã¤ã®å 容ãè¿ãããã
html/banner/foo.html
html/banner/bar.html
html/banner/baz.html
ãã®ä¾ã§ã¯HTMLæçããåç
§ãããç»åã¯ãã®ããã«ç½®ãã¦ãããnginxè¨å®ã«ããã«ç¸å½ããaliasæãå
¥ãã¦ããã
img/banner/foo.jpg
img/banner/bar.jpg
img/banner/baz.jpg
nginxè¨å®
- HTMLæçãçµè¾¼ãURLã®ãã±ã¼ã·ã§ã³ã§ssiãæå¹ã«ãã
location / {
...
ssi on;
...
HTMLã«SSIæãå ¥ãã
<div class="ad"><!--# include virtual="/ad/banner/" --></div>
random index URLã®ä½åã確èª
ä½åº¦ããªã¯ã¨ã¹ãããã¨ã©ã³ãã ã«å ¥ãæ¿ããã¯ãã
$ curl http://localhost:8000/ad/banner/
<a href="/redirect?dest=foo"><img src="/ad/img/banner/foo.jpg" /></a>
$ curl http://localhost:8000/ad/banner/
<a href="/redirect?dest=bar"><img src="/ad/img/banner/bar.jpg" /></a>
$ curl http://localhost:8000/ad/banner/
<a href="/redirect?dest=foo"><img src="/ad/img/banner/foo.jpg" /></a>
ãã¼ã¸ã¬ãã«ã§ã®ç¢ºèª
åºåHTMLæçãã©ã³ãã ã«å ¥ãæ¿ãã£ã¦ãããã¨ã確èªã
$ curl -s http://localhost:8000/ | grep banner
<a href="/redirect?dest=foo"><img src="/ad/img/banner/foo.jpg" /></a>
$ curl -s http://localhost:8000/ | grep banner
<a href="/redirect?dest=foo"><img src="/ad/img/banner/foo.jpg" /></a>
$ curl -s http://localhost:8000/ | grep banner
<a href="/redirect?dest=bar"><img src="/ad/img/banner/bar.jpg" /></a>
çµè«
nginx+ssi+http_random_index_moduleã§é«éãå¹ççããã¦å®å®ããåºåããã¼ã·ã§ã³ãã§ããããã«ãªã£ãã
èæ¯
å®ãé«éã«å¤å¤§ãªãã©ãã£ãã¯ãå¦çããã¦ã§ãã¢ããªã®ç§è¨£ã¯ã¨ã«ããã¹ã¯ãªããè¨èªã«ããããã¯ã¨ã³ãããã©ãã£ãã¯ã«ç´æ¥ããããªããã¨ã ã¨æããä¸è¬çã«ã¯memcacheãªã©ã§ãã®åé¡ã解決ãã¦ããããã ãããã®æ¹æ³ã¯ç¨ãã¦ããªããåç¬ãµã¼ãã®è¨å®ã ã¨ãã¡ã¤ã«ã·ã¹ãã ãååãã£ãã·ã¥ã®å½¹å²ãã¯ããããã¨ãã£ãã·ã¥ã«ããã¦ã¯ãªã¯ã¨ã¹ããåãããã¼ã¸ããªãã¨ããã¯ã¨ã³ãã«ã¯ã©ã¤ã¢ã³ããè¡ããã¨ã«ãªããè³æºã®ä¹ããç°å¢ã§ã¯ãããåé¡ããããã(ããã«ã¤ãã¦ã¯å¾ã«è©³ããæ¸ããã) ããã§ããã¯ã¨ã³ãã®ã¦ã§ãã¢ããªã¯ã¢ãã«ã®æ´æ°æ¯ã«éçãªããã¥ã¡ã³ãããã¡ã¤ã«ã·ã¹ãã ã«æ¸ãè¾¼ãããã«ãã¦ããããããnginxãã¯ã©ã¤ã¢ã³ãã«éããã¤ã¾ããã¦ã§ãã¢ããªã¯ãªã¯ã¨ã¹ãã«å¿ãããµã¼ãã§ã¯ãªããã¤ãã³ãã«åå¿ãã¦éçãªãµã¤ããæ´æ°ããdaemonã¨ãã¦æ©è½ãã¦ãããã¢ããªã±ã¼ã·ã§ã³ã¨ãã¦ã®ã¦ã§ããµã¼ãã¹ã§ã¯ç¡çã ããæ¯è¼çå®å®ããã³ã³ãã³ã¹ãå¤ãã®äººã«è¦ããåºçç³»ãµã¤ããªããã®ææ³ã使ããã
ãã®ããã«éçãªãã¡ã¤ã«ã¨ãã¦ç®¡çããããµã¤ãã§åºåãã¼ãã¼ã·ã§ã³ãå°å ¥ãããã¨ããéã«ãã®ssi+http_random_index_moduleæ¹ãã¿ã¤ããããã£ããnginxã ãã§ãã¼ã¸ãéãè¿ããããã«ããã®ã«ãåºåã®å ¥ãæ¿ãã®ããã«python/djangoã®ãããªéãããã»ã¹ããã®éç¨ã«ããããããããªãã£ãã幸ãåããããªåé¡ã«ç´é¢ãã人ãããããããhttp_random_index_moduleãnginxã®æ¨æºã¢ã¸ã¥ã¼ã«ã¨ãã¦åå¨ãã¦ããã