カテゴリ:13.実際にやってみる > 13.3.3 Linux(Other)

(1)インストールなど
①Kali linux ダウンロード
https://www.kali.org/downloads/

②VMへインストール
・VM workstation plyaerをダウンロード
・あとでOSをインストールする
インストールする際、Linuxでバージョンは「Debian」系である。version は不明
・HD 30G、メモリ1Gで設定
・VMwareツールをインストール
★CTL+ALTで仮想と実環境の切り替え
デフォルトのパスワードはtoor

・KaliにVMwaretoolを入れたい場合、openvmtoolsを入れるという方法もある。
apt-get update
apt-get install open-vm-tools-desktop

③起動後
イメージを更新するには
apt-get update
apt-get dist-upgrade

(2)初期設定
①キーボード
キーボードが違う気がする。viエディタなどでも、配列が違うと不便。
Setting> Region & Language から設定する。 Settingが表示されていない場合もあり、これは右上だったりする。
http://gate.hatenablog.jp/entry/2018/02/06/kali-keyboard
キーボードは日本語109 (OADG 109A) にしよう

②SSH接続
デフォルトだと、SSHサービスが起動していない場合がある。
systemctl start ssh
こうすれば、外部からSSH接続できるはずだ。(実際にできた)

(3)AWSのKali Linuxの場合
AWSでKaliLinuxを使う。
amazonマーケットプレースで選ぶことができる。無料枠の対象もあり、価格はかなり安い。

★注意点 ログインユーザはec2-user ではなくkali

VNCを接続するために、TCP5901を空ける
VNCのソフトはすでに入っているので、起動する。
https://dev.classmethod.jp/articles/kali-linux-vnc/
vncpasswd
パスワードは8文字がリミットのようだ。
また、このとき、view-only はNoにした。
vncserver :1
クライアントPCからはViewerをインストールして接続する。(英語版しかないのかな)
https://www.realvnc.com/en/connect/download/viewer/windows/
インスタンスのIP:5901でアクセスできる。
画面が小さいし、反応が遅い、キーボードが英語なので、少しやっかい。
→UltraVNCの方がいいかも
https://forest.watch.impress.co.jp/library/software/ultravnc/download_11198.html
※インストールするときは、Viewerだけでいいのではないかと思っている。

(1)John(John The Ripper)によるLinuxのパスワード解析

①インストール
#apt-get install john

②以下にあるようにShadowファイルそのものではできない
https://orebibou.com/2014/06/etcpasswd%E3%81%AE%E3%82%AF%E3%83%A9%E3%83%83%E3%82%AF%E3%83%84%E3%83%BC%E3%83%AB%E3%80%8Ejohn-the-ripper%E3%80%8F%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/

③解析の実行
#john --users=user johnpasswd
4桁のパスワードであったが、PCのスペックもあるのであろうか、
結構時間がかかる。 →うまくいかなかった。途中で断念

(2)hydraによるPW解析
皆さんにとってわかりやすいPW解析ツールはhydra(ヒュドラ)であろう。
以下がわかりやすい。
https://ozuma.hatenablog.jp/entry/20130601/1370094859

Kali Linuxには最初から入っている。CentOSに入れるのはちょっと大変。
Ubuntsの方が入りやすそう。KaliLinuxはUbuntsベースなので。
http://kumonchu.com/oss/hydra-crunch-ubuntu/
続きを読む

clamAVというのがあり、これでウイルスチェックを行う。
https://www.infocircus.jp/2019/10/05/centos-7-virusscan-clamav/

#インストール
amazon-linux-extras install -y epel
yum install -y clamav clamav-data clamav-devel clamav-filesystem clamav-update clamd

#AVの定義ファイルの更新
freshclam

#スキャンの実行。以下のように、ディレクトリとして / を指定する
clamscan --infected --recursive /

#すべてを実行すると時間がかかるし、パーミッションエラーも多発するので、フォルダを絞って実行するのもいいだろう。
clamscan --infected --recursive /home
または、--exclude-dir で除外するフォルダを指定することも可能。

以下が結果の例
----------- SCAN SUMMARY -----------
Known viruses: 8945582
Engine version: 0.102.4
Scanned directories: 10939
Scanned files: 61495
Infected files: 0
Data scanned: 1446.60 MB
Data read: 2928.30 MB (ratio 0.49:1)
Time: 309.100 sec (5 m 9 s)

Infected files(感染したファイル)がゼロであることを確認しよう。
ファイルを削除することも大

また、cronによって定期的に実行することも選択肢。

HTTPヘッダインジェクションをLinux(AWS)で試してみる。

#http インストール
yum -y install httpd

#perl-CGI インストール
yum -y install perl-CGI

#httpd.confの以下を変更
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
ls -la /etc/httpd/conf/httpd.conf*

# vi /etc/httpd/conf/httpd.conf
# 以下を修正
#   Options Indexes FollowSymLinks
#  ==>  
#   #Options Indexes FollowSymLinks
#   Options Indexes ExecCGI FollowSymLinks
#
#   #AddHandler cgi-script .cgi
#  ==>  
#   #AddHandler cgi-script .cgi
#   AddHandler cgi-script .cgi

#流し込む場合
sed -i 's/Options Indexes FollowSymLinks/Options Indexes ExecCGI FollowSymLinks/' /etc/httpd/conf/httpd.conf
sed -i '/#AddHandler cgi-script .cgi/ s/#//' /etc/httpd/conf/httpd.conf

#Apache 起動関連
systemctl start httpd
systemctl enable httpd

cd /var/www/html/

#index.cgiを作成
cat <<'EOF' > index.cgi  #EOFを'でクォートしないと、$が変数として展開されてしまう。
#!/bin/perl
use CGI;
use CGI::Cookie;

my $cgi = new CGI;
my $url =$cgi->param('url');

if ($ENV{'QUERY_STRING'} ne '') {
  if ($url ne '') {
    print "Location: $url\n\n";
  }
  print $cgi->header;
}
else{

print $cgi->header;

my %cookies = fetch CGI::Cookie;
if (exists $cookies{'SID'}) {
    $value = $cookies{'SID'}->value;
    if ($value eq 12345){
        print "success";
    }
}else{
    print "hello";
}
}
EOF

#index.cgiに実行権限を付与
chmod +x index.cgi

■ではやってみる
①ページを表示する
http://203.0.113.25/index.cgi
→helloと表示される

②urlの引数を入れて、リダイレクトさせる。
ソースプログラムを見るとわかるが、URLに記載されたurlのパラメータ(値)を「Location: $url\n\n";」というHTTPレスポンスヘッダに入れているので、?url=で記載したURLにページが遷移する
http://203.0.113.25/index.cgi?url=https://www.yahoo.co.jp/

③CookieにSIDをセットする。
HTTPレスポンスヘッダでは、「Location: $url\n\n";」になっていて、以下のように%0D%0Aで改行コードを入れると、HTTPレスポンスヘッダに「Set-Cookie:SID=12345」が入れられる。なので、(セッションを受け取っているだけだとダメで、次にアクセスしたときにCGIスクリプトが反応するので、もしかするともう一度アクセスする必要があるだろうが、)CGIプログラムでSIDを見てsuccessと表示することができる。
http://203.0.113.25/index.cgi?url=http://203.0.113.25/index.cgi%0D%0ASet-Cookie:SID=12345

④HTTPヘッダをみてみよう。GoogleChromの場合、F12で開発者ツール、「Network」タブで、もう一度ページをリロードし、そのページをみるとHeaderが見える。
たとえば、ソースプログラムで以下のようにHTTPヘッダに文字を足してみて、HTTPヘッダをみてみると、わかりやすだろう。「Hello___」の文字が付与されているはずである。
else{
print "Hello___";
print $cgi->header

■1.設定概要
基本的には最近のWebサーバはPUTメソッドがデフォルトでは禁止されている。HTTPのPUTメソッドによるファイルのアップロードを実現するには、Apacheの場合はWebDavが必要。
以下も参照設定
https://httpd.apache.org/docs/2.4/ja/mod/mod_dav.html

※DavLockDBの設定がないとCentOS7ベースのOSは以下のエラーが出る
A lock database was not specified with the DAVLockDB directive. One must be specified to use the locking functionality.  [500, #401]
apacheがインストールされているとして、設定は以下

①httpd.confの最後に以下を追加
vim conf/httpd.conf

DavLockDB "/var/tmp/DavLock"

<Directory "/var/www/html/dav">
        Require all granted
        Dav On
</Directory>

②Davディレクトリ追加
mkdir -p /var/www/html/dav
chmod 777 /var/www/html/dav

③apacheを再起動
systemctl restart httpd

■2.PCからの操作
①アップロード (上書きも可能)
curl -T a.txt --url http://10.1.1.115/dav/a.txt -X PUT

②ファイル取得
curl -O http://10.1.1.115/dav/a.txt

以下だと、ファイルを取得せずに中身を表示
curl --url http://10.1.1.115/dav/a.txt -X GET

③ファイルDELETE(削除)
curl --url http://10.1.1.115/dav/a.txt -X DELETE

■3.WebDavの設定 流し込み
#コンフィグバックアップ
cd /etc/httpd/conf/
sudo cp httpd.conf httpd.conf.org

#PUTメソッド利用のため、mod_davモジュールが有効になっていることを確認(AmazonLinux2ではデフォルト有効)
less /etc/httpd/conf.modules.d/00-dav.conf | grep mod_dav

#以下の3行がコメントアウトされずに記載されていることを確認
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_lock_module modules/mod_dav_lock.so

#PUTメソッド利用のため、davモジュールがインストールされていることも確認
grep -r dav /etc/httpd/modules

#恐らく、以下が表示されるはず
#Binary file /etc/httpd/modules/libphp5.so matches
#Binary file /etc/httpd/modules/mod_dav.so matches
#Binary file /etc/httpd/modules/mod_dav_fs.so matches
#Binary file /etc/httpd/modules/mod_dav_lock.so matches
#Binary file /etc/httpd/modules/mod_status.so matches
#Binary file /etc/httpd/modules/mod_headers.so matches

#httpd.confファイルの末尾に追加
sed -i /etc/httpd/conf/httpd.conf -e '$ a DavLockDB "/var/tmp/DavLock"\n\n<Directory "/var/www/html/dav">\n\tRequire all granted\n\tDav On\n</Directory>'

#Davディレクトリ追加
mkdir -p /var/www/html/dav
chmod 777 /var/www/html/dav

#apacheを再起動
systemctl restart httpd

OpenVasのインストール

ネットにもいろいろ書かれてあるが、実際にやってみるとエラーばかりで大変であった。
以下で実施した。
①AWSのパターン
②CentOSのパターン

■Openvasの使い方
以下に解説があるが、画面がやや違う
https://knowledge.sakura.ad.jp/342/

Scans>Tasksを開き、左上にある四角に★のところから、New Taskを実行
IPアドレスだったり、認証情報を設定する

リストが出てくるので ▶で実行する。
続きを読む

Linuxの場合、nmapをインストールする。
ポートスキャンは簡単。nmapで、IPアドレスを指定するだけ。
ただ、オプションがいくつかある。以下が詳しい。
https://www.checksite.jp/nmap-command-option/

(1)install
yum -y install nmap
※サービスの起動は不要でした。

(2)ホストスキャン
ホスト(コンピュータ)を探す。
# nmap -n -sn 192.168.1.0/24

※オプション
-n:名前解決をしない
-sn:ポートスキャンをしない

(3)ポートスキャン
指定したIPアドレスで動いているサービス(つまりポート)を探す。
①IPアドレスを指定して、単純なポートスキャン
# nmap 172.31.37.179
・・・
PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http

※オプションに何もつけないと、TCPスキャンになる

②オプションをつけてみよう。
オプション一覧は、以下
https://svn.nmap.org/nmap/docs/nmap.usage.txt

代表的なオプションとして、以下がある。
-sS:ステルススキャン
-sU:UDPスキャン
-reason:理由を表示
-A:詳細なバージョン  ←結構有意義 # nmap 192.168.1.11 -A
-O OSが何かを調査
-p ポートを指定する。指定しないと、たしか代表1000ポートだったと思う。
-sU UDPのポートスキャン ←時間がかかる
-sV:ソフトのバージョン
# nmap -sV 172.16.1.5
・・・
PORT    STATE SERVICE VERSION
21/tcp  open  ftp     vsftpd 3.0.2
22/tcp  open  ssh     OpenSSH 7.4 (protocol 2.0)
80/tcp  open  http    Apache httpd 2.4.41 (() PHP/5.4.16)

(例)OSのバージョンなどを調査
# nmap -O 192.168.1.1

(4)参考
TCPでLinstenしているサービスを探す。
ssはnetstatの後継コマンドと考えればいいだろう。

ss -antup | grep tcp

また、pstree -a でも、起動しているプロセスが分かるので、参考になると思う。

■事前準備
Webサーバの起動やFWの調整
service httpd start
SELinuxははずした。※元ファイルは.orgなどをつけて保存しておきましょう。
・iptables -L でhttp(80)が開いているかをみよう。デフォルトではOFFになっていると思う
・system-config-firewall で、80を空ける

これにより、外部(ホストOS)から仮想OSのWebサイトを見ることができる。

また、8080ポートが開いていないので
# vi /etc/sysconfig/iptables を開いて以下を追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

# service iptables restart でサービス再起動
続きを読む

世の中にはパスワード解析ツールなるものがあります。
マシンスペックと時間が必要ですが、パスワードの解析ができますので、パスワードは長くしておく必要がある。
また、簡単なパスワード、たとえば123456とか、zxcvbn(←キーボードの一番下)は、すぐに解けてしまうので、特に気を付ける必要がある。
続きを読む

■メモリフォレンジック volatility
①インストール
https://zoomadmin.com/HowToInstall/UbuntuPackage/volatility

(1)CTFの問題を使って、フォレンジックをやってみよう
問題は以下
---------
Memory Analysis(Forensics 100)
Memory Analysis
Find the website that the fake svchost is accessing.
You can get the flag if you access the website!!

memoryanalysis.zip
The challenge files are huge, please download it first.
Hint1: http://www.volatilityfoundation.org/
Hint2: Check the hosts file
---------
 メモリダンプそのものは、容量が大きいが以下にある。
 https://github.com/SECCON/SECCON2016_online_CTF/blob/master/Forensic/100_MemoryAnalysis/files/fileurl.txt
 ダウンロ―ドして、記載されたPW「fjliejflsjiejlsiejee33cnc」で開ける

(2)解き方はこちら
http://ecoha0630.hatenablog.com/entry/2016/12/11/200127
https://qiita.com/yuu26/items/c257cc09a4535367c021

①imageinfoオプションで、メモリダンプの情報を見る 
# volatility -f ./forensic_100.raw imageinfo

Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)

→WinXPのものらしい。
★場合によっては、ここで表示されたProfileを指定する。
# volatility -f ./forensic_100.raw --profile=WinXPSP3x86 pstree
※必須という表記もあるが、以下のようになくてもうまくいった。よくわからん。それと、複数のプロファイルが表示されたら、新しい方がいいかも

②pstreeを見てみる
# volatility -f ./forensic_100.raw pstree

...... 0x8229f7e8:IEXPLORE.EXE                       1080    380     19    397 2016-12-06 05:27:21 UTC+0000

IEなどのプロセスが見える。

③接続状況を見る connectionsまたはnetscan
# volatility -f ./forensic_100.raw connections
Volatility Foundation Volatility Framework 2.6
Offset(V)  Local Address             Remote Address            Pid
---------- ------------------------- ------------------------- ---
0x8213bbe8 192.168.88.131:1034       153.127.200.178:80        1080

接続したサーバがわかる。pid1080とあるが、先ほどのpestreeではIEが動いていた。

または、netscanコマンド。このあたりは、OS(WindowsXPなのか7なのかなど)によってコマンドが違うので、OSに合わせたコマンドを打つ

④ヒントとして「Hint2: Check the hosts file」とあったので、hostsファイルが見たい →filescanで hostsでGrepする

# volatility -f ./forensic_100.raw filescan | grep hosts
0x000000000217b748      1      0 R--rw- \Device\HarddiskVolume1\WINDOWS\system32\drivers\etc\hosts
→どうやらhostsファイルがあるようだ。

⑤そのhostsファイルのIDを指定して、ファイルを出力する。-Qでファイルを指定し、名前をわかるようにしたほうがいいので、--name -D と指定する。※このあたりは上記のサイトの通り。

# volatility -f ./forensic_100.raw dumpfiles -Q 0x000000000217b748 --name -D ./

⑥lsで見ると、以下のファイルが作成されている。
file.None.0x819a3008.hosts.dat 

⑦このhostsファイルを開くと、以下とある。
153.127.200.178    crattack.tistory.com root@user-virtual-machine:/home/user#

・・・その他のオプション
◎OSのユーザを見るには、以下で見えるはず
python vol.py hashdump -f ./xxxx --profile=xxx

⑧hivelist :レジストリ情報

#volatility -f ./forensic_100.raw hivelist
・・・・
0xe230d5e0 0x0ffa15e0 \Device\HarddiskVolume1\Documents and Settings\Administrator\NTUSER.DAT
・・・

ここで、上記のNTUSER.DATを出力してみる。

#volatility -f ./forensic_100.raw hivedump -o 0xe230d5e0
※オプションが -sなのか-yなのか、バージョンによって異なるような気もする。

⑨yarascanを使った文字列の検索
# volatility -f ./forensic_100.raw yarascan -Y "https:"
ここで、"http"などとしてもいいだろう。ただ、量が多い。pidがわかるのであれば、指定したい。

# volatility -f ./forensic_100.raw yarascan -Y "http" --pid=1080

# volatility -f ./forensic_100.raw connscan
・connscan:既に接続が終わっているもの

・cmdscan、consolesでコマンド履歴を表示
たとえば、
#volatility.exe -f ./MemoryDump_Lab1.raw --profile=Win7SP1x64 consoles


・一覧および操作方法は以下
https://github.com/volatilityfoundation/volatility/wiki/Command-Reference

・ログインパスワードを解析する
パスワードを解析するには、SYSTEMの中のシステムKEYと、実際にパスワードが格納されているSAMの両方が必要になる。
https://gomiba.co.in/blog/archives/342
ここにあるように、hivelist でSYSTEMとSAMのVirtual Addressを取得する。
# volatility -f ../Memorydump2.bin --profile=Win7SP0x86 hivelist
上記のコマンドリファレンスにあるように、以下を参照。
すると、SYSTEMは -yで、SAMは -sで指定する。どっちがSYSTEMでどっちがSAMかをわかるようにしているのだろう。

To use hashdump, pass the virtual address of the SYSTEM hive as -y and the virtual address of the SAM hive as -s, like this:

$ python vol.py hashdump -f image.dd -y 0xe1035b60 -s 0xe165cb60
→ こんな感じかな
# volatility -f ../Memorydump2.bin --profile=Win7SP0x86 hashdump -y 0x8f61c008 -s 0x9ffc03a0

すると、PWファイルが表示される。このハッシュからPWを出す。
PWハッシュは2つあり、後半の方が実際に使われているNTハッシュ。
これを解く。どうやって解くんだろう
→https://crackstation.net/に投げてみたが、表示されなかった・・。

Apache Killerという、古いApacheのWebサーバを簡単にダウンさせる攻撃がある。
いか、試してみました。
(1)攻撃方法
https://ao-zai.blogspot.com/2011/09/apache-killercve-2011-3192_90.html
脆弱性があるのは、2.0.64以下の全ての2.0系と2.2.19以下の全ての2.2系。
ここに記載があるように、以下のシェルを実行する
https://pastebin.com/NCDv9eTh

(2)2.2.19の環境を作る
※以下のようにrpmで入れるのはつらかった。途中で挫折
curl -O https://archive.apache.org/dist/httpd/binaries/rpm/x86_64/httpd-2.2.2-1.x86_64.rpm  
rpm -ivh httpd-2.2.2-1.x86_64.rpm
続きを読む

sambaの設定
1.インストール
samba-swat
samba
samba-client
samba-common

2.swatの準備
1) /etc/xinetd.d/swat を書き変え
 disable =no
 only_from=127.0,0,1 192.168.1.10 ←swatを利用するマシンを追加
2) xinetdの再起動

3.SWATの設定
1)ブラウザでSambaサーバにアクセスhttp://192.168.1.20:901/
※FW設定などはlokkit(?)ではずす

2) IDパスワードを入力 ※rootでもはいれる
3) GLOBALS workgroupをWindowsのワークグループと同じに
4) SHARES COMMENTにて新しい名前、PATHにて共有するディレクトリを指定、ReadOnlyなど
の設定を適宜行う
5) VIEWで設定を確認する。SWATでやれば文法間違いが無いから安心
6) STATUSにてsmbdとnmbdを起動
7) ユーザの設定 PASSWORDページにて、ローカルマシン側の各項目に一般ユーザの
アカウントを設定する。※Linuxサーバに事前登録したもの。[Add New User]ボタンを押す

4.LinuxサーバとPCを再起動
Linuxのsmbdとnmbdの再起動でも利用できたかも
LinuxのユーザとSambaのユーザ関係は独立しているかもしれない。

swatを使わないなら以下が参考になるかも
http://www.psg.jp/samba_server.html

LinuxブートローダにはLILO(LinuxLoader)とGRUBがあり、いまはGRUBが多いだろう。
GRUB(GRand Unified Boot loader)の設定は、/boot/grub/grub.confに記載されており、そこに記載されているOSを起動することができる。

GRUBの画面にて、e(edit)を押すと編集画面になり、パスワードを忘れたときのリカバリができるシングルユーザモードでのログインができる。

■パスワードリカバリの方法
GRUBの場合、GRUBの画面でeditを表す「e」を押して編集画面を表示します。
・最後に「single」を入力してbootを表す「b」を押してブートします。
・シングルユーザモードで起動するので、passwdコマンドで新しいパスワードを設定します。

(1)リポジトリによるバージョン管理
❶リポジトリの必要性
ファイルを更新(または古いバージョンを更新)したときなどに、管理が、わけがわからなくなるときがあります。
だから、システムで管理した方がいいですよね。共通システムで管理をするという意識を持つことと、システムが古いのを更新するとメッセージを出すなどしてサポートしてくれます。

もちろん、ローカルのシステムで管理してもいいですし(ローカルリポジトリ)、クラウド上で管理する場合もあります(リモートリポジトリ)。リモートリポジトリの一例がGithubです。プログラムのソースコードがもともとだと思いますが、いろいろな資料もあります。CTFの問題もおいてあります。
ちなみに、ローカルで管理する場合にもgitコマンドは使えます。

❷GitHub
メリットは多くの開発者とソースコードを共有してコミュニケーションが取れること

Gitでバージョン管理をすることが増えています。以下にわかりやすい説明あり。
https://qiita.com/kibinag0/items/ec6583e4e7608c4d2add
https://techacademy.jp/magazine/6235

❸用語
・リポジトリ
 ファイル等を保存する場所。ローカルリポジトリとリモートリポジトリがある。
・コミット
 修正内容をローカルリポジトリに反映させる。(反映を確定させる)
 (例)git commit 
・コミットメッセージ
 必ずつけるようにして、記録を残す
 (例)git commit -m "your message"
・ブランチ
 枝分かれして管理する。階層構造にしておくと、わかりやすいよね。
・コンフリクト(conflict)
 いわゆる衝突。お互いに修正されているので、マージができない。

❹作業環境
Gitを使った作業環境には以下の3つがある。
1)ローカルの作業場所 
 Linuxでいう、単に自分のホームフォルダと思えばいいだろう。ここで作業している分には、Gitやリポジトリとは全く関係が無い
2)ステージングエリア
 リポジトリにUPする前段階。git add でステージングエリアに追加する
3)リポジトリ
 一般的にはローカルを指すと思っていいだろう。commitで反映せる(と思う)

・確認方法
git statusによって、ファイルがどのステータスにあるかが確認できる。

(3)GitHubの初期設定からリポジトリ作成とファイルのUP
❶アカウントの作成
以下からユーザ名とメールアドレス、PWを入れてアカウントを作成する
https://github.com/
簡単な質問がされる。適当に(適切に)入れて完了しょう

❷基本動作
・commit:ファイルなどをリポジトリに保存
・push:ローカルリポジトリの内容を、リモートリポジトリに反映させる
・pull:pushの逆。リモートリポジトリの内容をローカルリポジトリに反映させる。

❸リポジトリを作成する
・Create Repositoryから新規に作る。
・Repository nameを入れて、PublicかPrivateかを選択。チェックボックスは適宜。Readmeは作っておいた方が分かりやすいと思う。
・これでリポジトリが完了する。URLは覚えておこう

(4)Linux側でのGitの基本操作
### 1. Linuxでgitのインストール
yum install git-all

### 2.フォルダを作り、Gitの初期設定
mkdir gitspace
cd gitspace
#git用に使うための初期設定
git init

### 3.初期設定
#ユーザ名とメールアドレスを設定する
git config --global user.name " username"
git config --global user.email " email@e.dom"

ただ、私はこれをやらずに進めた。やらなくてもできるが、名前などを設定しておかないと、rootとかになってしまって、誰が作ったのかわかりにくい。

#設定内容を確認する
git config -l
※これは、作成したgitのフォルダで実行する。

(❹)git管理をしない場合
.gitignore にgit管理を除外するファイルを指定する。ワイルドカードが使えるので、たとえば、*.logや/bin *.Classを指定するなどの方法がある。

(5)Linuxで:ファイルをgitに追加する
作成したgitフォルダにファイルをコピーしローカルリポジトリに追加するまでを実行する。
①ファイルを作成
・ファイルを作成し、gitフォルダに入れる。またはgitフォルダでファイルを作成する
②ステージングエリアに追加する。
git add file.txt
またはgit add . とすることで、配下のファイルをすべてステージングエリアに追加する。
③コミット
コミットしてステージングエリアからリポジトリ(今回はローカルリポジトリ)にUPする
git commit -m "add new file"
※git commit とだけ入れて、メッセージを追加しないと、メッセージを入れる画面になる。
④ログで確認
以下で今回の動作のログを確認できる。
git log
ログを見ると、誰が、いつcommitしたか、コミットメッセージとともに確認できる。

(6)ファイルを変更した場合
①作業ディレクトリでファイルを変更
②2つの選択肢
git add a.txt でステージングエリアにUPする。
git checkout -- a.txt で元にもどす。git checkout .でもいい。
③リポジトリに追加する。
先と同じくgit commit 
このとき、git commit -aだと、ステージングエリアにaddする作業が不要のような気がする。
そのとき、メッセージを毎回入力するので、変更履歴がわかる。これでバージョン管理ができる。
とはいえ、ちょっとした変更でも全部履歴をつけるのは逆に煩わしい場合がある。git commit --amendだと、直前のコミットの修正ができる。

④状態の確認 git status
今、コミットしたのかどういう状態か分からない場合がある。その場合、git statusで確認するといい。

(7)ファイルを削除、移動
作業ディレクトリで削除したりmvした場合、ステージングエリアやリポジトリでも変更が必要。git上で行う。
例えば、ファイルを削除した場合は以下。
git rm file1.txt

(8)過去の履歴のファイルに戻る
①ローカルで保存しファイル(addをする前)
git checkout .
②addをしてステージングエリアにある場合
git reset --hard
③Commitしてある場合
git checkout 戻るバージョンのハッシュ値 ※ハッシュ値は、git log で確認する。
git reset が本当のやり方かも

(9)リモートリポジトリへのUP
①リモートリポジトリの場所を指定する
git remote add origin https://github.com/t-xxx/sour-yyyy   ←リポジトリの場所
※originはoriginという名前
※一度設定した場所を変更する場合は、以下
git remote set-url origin https://github.com/t-xxxx/c-zzzzzz

②リモートリポジトリにプッシュする
git push origin master
※これで、originに対してmasterを送信する。
③GitHubのユーザ名とPWが聞かれるはず。

【エラーが出たら】
Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
上記のエラーは、Git上で誰かが更新したから今はできないというメッセージ。(恐らく自分の更新なんだけど・・・)
以下のコマンドで、最新版を受信(pull)してから再度pushしよう。
# git pull origin master

【エラーが出たら】
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

以下のコマンドを実行してみよう
git pull --allow-unrelated-histories origin master

または、先のpushに関して、それでもNGだったら、強制的に実施しよう。
git push -f origin master

④GitHub側で状態をみる
このとき、ブランチをmasterにしてみよう。ファイルがアップロードされていることが分かる。
とても便利だ。
⑤README.md
私はREADME.mdをGitHub上で直接編集した。

(10)GitHubの活用:リポジトリを取得する。
①GitHubから取得する場合はgitコマンド
git clone https://github.com/CTFd/CTFd.git

GitHub上のファイルを直接ダウンロードは恐らくできない。ディレクトリを丸ごとダウンロードだと思う。
→一方、直接リンクは以下でできる。rawボタンが表示されれば、そこをクリックするといい。
※rawがない場合もできる。ただ、パスは以下のように微修正が必要だったこともある。
https://raw.githubusercontent.com/t-xxxxx/c-yyyy/master/file名前

たとえば、こんな感じ
https://raw.githubusercontent.com/t-kasu/ctf_file/master/user_script.sh

やり方は色々あると思うが、他のサイトのファイルを、リポジトリとか関係なく取得したい場合は、ZIPファイルのダウンロードがいいと思う。「Code」のボタンから「Download ZIP」で取得できる。
そのURLを覚えておいて、Linuxからダウンロードも可能。curlを使うが、curl -O ファイル名だと、ちゃんと取れなかった。以下でお試しあれ。そして、unzipで解凍。
curl https://github.com/t-xxxxxx/xxxxxxx/archive/master.zip -L -o file.zip
unzip file.zip

②GitHub上でファイルの削除
ファイルを開いて、普通に消せる。Commitも実行する。

②Mercurialから取得する場合は、Mercurial(水銀)の元素記号Hgを使う。
hg clone https://~

(6)各種コマンド
・git diff :変更履歴を教えてくれる


(4)過去問
・過去問では、「セントラルリポジトリから分散リポジトリへのデータのコピーをチェックアウト、分散リポジトリによるセントラルリポジトリのデータの更新をチェックインと呼ぶ(H18AM問10)」

・H27秋SC午前Ⅱ
問22 ソフトウェア開発・保守の工程において,リポジトリを構築する理由として,最も適切なものはどれか。
ア 各工程で検出した不良を管理することが可能になり,ソフトウェアの品質分析が容易になる。
イ 各工程での作業手順を定義することが容易になり,開発・保守時の作業ミスを防止することができる。
ウ 各工程での作業予定と実績を関連付けて管理することが可能になり,作業の進捗管理が容易になる。
エ 各工程での成果物を一元管理することによって,開発保守守作業の効率が良くなり,用語の統一もできる。


→エ

ZIP暗号であるが、暗号方式には2つある。AES256も選べるが、多くの場合はデフォルトで簡易な暗号方式を使っている。ツールを使えば解読が簡単である。
今回はzip2john と hashcat を使った。
AWSで試してみる。

###1.環境構築
(1)AWSの以下をマーケットプレースで検索して構築
使ったのは以下のインスタンス。これは、GPUおよびそれに必要なモジュールcudaなどが準備されているので、セットアップが楽。
AWS Deep Learning AMI (Ubuntu 18.04)
インスタンスはp3.2xlargeが限界。それ以上にするには、拡張の申請が必要。
p3.2xlarge GPUs – Tesla V100を1、GPUメモリ16GB

価格であるが、p3.2xlargeの場合、$3.06/時間 →1時間330円くらい

(2)インストールおよび設定
ログインユーザはec2-userではなく、ubuntuなので注意
#1.環境準備
apt update
apt upgrade
apt install zip
apt install gcc
nvidia-smi

#2.hashcatのインストール
git clone https://github.com/hashcat/hashcat.git
cd hashcat
make && sudo make install

/usr/local/bin/hashcat -I

#3.JTR:JohnTheRipperのインストール
git clone https://github.com/magnumripper/JohnTheRipper.git
cd JohnTheRipper/src
./configure
make -s clean && make -sj$(grep processor /proc/cpuinfo | wc -l)
sudo make install
sudo ln -s $(pwd)/../run/zip2john /usr/local/bin/


https://secu.tech.blog/2019/12/30/example-post/

以下、やってみた。
続きを読む

■Ubuntu
・インストールする
・なぜか、rootユーザではなく、一般ユーザの名前をつけた。rootはつけられない。
・sudo su でrootになる(つまり、インストール時に作成したユーザがrootである
・インストール後はソフトをUpdateしておこう
# apt update
# apt upgrade
・アプリをインストールするには、以下 nmapをインストールする場合
# apt-get install nmap

# apt-get install ghex

・GUIでghexなどを動かすにはsynaptic packege managerをインストールする。
これは、GUI画面でソフトを検索すれば出てくるはず。
https://linux.just4fun.biz/?%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2/%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF+ghex

手探りだが、チェックを入れて、適用とかしてみた。よくわかっていないが、Aのカバンのアイコンのところで、インストールができたような気がする。

・「かな」入力 →↑のバーに「ja」とかの欄があり、ここで切り替えができる。

・画面が小さい→VMwareToolsを入れる。※OS単位。VMwareに入れるのではない。
下の方に出てくるか、VMのメニューの「Players」>「管理」>「Vmware tools」
から実行する。接続しているDVDに入っているので、一度、VMの画面でDVDのOFF/ONをするといいだろう。そうすると、DVDが上がってくると思う。
https://kb.vmware.com/articleview?docid=1022525&lang=ja

DVD上(おそらく/medhia/user名/Vmware Tools/では実行ができないので、ファイルをローカルにコピーし、vmware-install.plを実行する。なんどか質問がされるが、すべてデフォルトなので、Enterでいいだろう。

■UbuntuにSSH
#apt install ssh
#systemctl start ssh ←サービスの起動
#ufw allow 22 ←22番を開ける

設定ファイルは
/etc/ssh/sshd_config

だが、特に設定しなくても利用できる。rootでもログインできるので、そこは変更してもいいかも。

・ログは/var/log/auth.log

■IPアドレスの変更
以下のファイルを変える。
/etc/network/interfaces

■Ubuntu
・流し込みでPW変更
echo "user1:user_pass" | sudo chpasswd

シェルでやる場合、こんなんでできるはず

for i in {1..3};do
  #パスワードだったり色々質問されるので
  sudo adduser -q --gecos "" --disabled-login user${i} 
  echo "user${i}:pass_user${i}" | sudo chpasswd
done

■ufw
CentOS7の場合、firewalldによるfirewall-cmdであるが,ubuntsの場合はufwが備わっているので、結構便利。
ただ、どちらも裏ではiptablesが動いている。
https://qiita.com/hana_shin/items/a630871dce209cff04f3
fierwalldよりずいぶんと使いやすいと思う。
・起動
systemctl start ufw
・停止
systemctl stop ufw
・状態確認
ufw status numbered
・ルールの追加
ufw allow ssh
・ポート22(ssh)を拒否する
ufw deny 22

■ユーザの追加
#ユーザ(user1)を作る
adduser user1

#ユーザを削除する場合は-rをつけよう。ホームディレクトリも消してくれる
userdel -r user1

■AWSでUbunts
Ubuntu Server 18.04 LTS を選択した。
ログイン時のユーザ名は ubuntu

# rootでログイン
sudo -i

■shellinabox コマンドラインをブラウザで実行するように
・ブラウザで接続し、そこからLinuxのコマンドを打てるようにする。
・セキュリティを保つための踏み台サーバとしても使えるだろう。
・ポート番号は4200であり、https://xxxxx:4200 でアクセスする。
・CentOSでもできるはずだが、うまくいかないのでubuntsで実施した。
→いや、できた。手順は以下
https://python3.hatenadiary.com/entry/Linux

# サービスの最新化
apt update
apt upgrade
# shellinaboxのインストール
apt-get install shellinabox
# サービスの起動
systemctl start shellinabox.service

↑このページのトップヘ