防衛省CTF2025を復習した記録


# プログラミング　暗算でもできるけど

```c:PG-2.c
#include <stdio.h>
int main(){
	int i,j,k,l;
	k=(((10/2*4/10*4/2)+97)*10)-10;
	for(i=2;i<=k;++i){
		l=0;
		for(j=2;j<i;++j){
			if(i%j==0){
				l=1;
				break;
			}
		}
		if(l==0)printf("%d\r\n",i);
	}
	return 0;
}
```

```
$ gcc -o aaa PG-2.c
$ ./aaa | head -10
2
3
5
7
11
13
17
19
23
29
```

当日は、OSINT問題として解いてしまったので、プログラミングと向き合う

```c:PG-2_kai.c
#include <stdio.h>
int main(){
	int i,j,k,l,m,ans;
    m=0;
    k=100000000;
	for(i=2;i<=k;++i){
		l=0;
		for(j=2;j<i;++j){
			if(i%j==0){
				l=1;
				break;
			}
		}
    	if(l==0){
            m++;
    	    if(m==68){
                ans = i;
    	    }
    	    if(m==314){
    	    	ans = ans + i;
    	    	printf("%d\r\n",ans);
                break;
    	    }
    	}
	}
	return 0;
}
```

```
$ gcc -o aaa PG-2_kai.c
$ ./aaa 
2420
```

# プログラミング　formjacking

目grepすると、 `+'&exp-date='`　や　`+'&cvc=` などが見えるので、クレジットカード情報を送信してる場所は何となくわかるが。。。

難読化されている Javascript を

https://obf-io.deobfuscate.io/

で可読化する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/fac98f49-7ca4-4481-a6ea-52d616c5bd20.png)

```
https://pg3.2025winter-cybercontest.net/pg3?cardnumber=1&exp-date=1&cvc=1&Skimming=true
```
にアクセスするとフラグがとれたらしい。

こっち　↓はよくわからん

https://github.com/javascript-obfuscator/javascript-obfuscator


# ネットワーク　3 Way Handshake

攻撃されている 192.168.123.115 でフィルタし、 SYN+ACKっを返しているパケットを検索し、空いているポートを特定。

![3 Way Handshake1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/3955e4df-116a-41e8-8921-c8a911cd53ac.png)

特定したポートは、CyberCheffでソートした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/1f38ae8a-f4c1-44d4-9caa-75afe2585136.png)


# ネットワーク　さあ得点は？

```
Range: bytes=5-0,1-1,2-2,3-3,4-4,5-5,6-6,7-7,8-8,9-9,10-10
```
をぐぐると、apache_byte_range_server_dos.phpなどから CVE-2011-3192 とわかる。

あとは　CVE-2011-3192 mitre　と本家をググり、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/5d351216-8e91-44e0-98c1-bbbdde985da5.png)

Learn more at National Vulnerability Database (NVD)のリンクをクリックすれば CVSS2.0の数値がわかる。


# ネットワーク decode

WireSharkにまとめてドロップできることを知らなかった。

ただし、まとめてドロップしても、httpでエクスポートできるのは、猫だけだった。

TCPストリームを

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/58645112-1fe5-4e1e-8ef4-cdc13c7dc1cd.png)

ストリーム番号をずらしながら緻密に追跡すると、ストリーム番号=12でネコの写真とは思えないbase64に出会うので、答えと確信できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/024a52bd-ac18-4712-a765-d754ab25a5f5.png)


# Web 簡単には見せません

robots.txt のクロールを禁止設定
```
Disallow:/red/
Disallow:/gold/
Disallow:/blue/
```
から、フォルダ構成を認知し、アクセスしてたどり着くという流れ。


# Web　整列！


`ID` `Data` `flagSeq`の列があり、`flagSeq`順に並べると、`Data`にフラグが見えそうだが、`}`が無く、途中で切れている

`ID` カラムに存在している `Up` ボタンを押すと、`?sort=id+ASC` にリダイレクトされ、`ID`の昇順になる

```
?sort=id+ASC
```
を
```
?sort=flagSeq+ASC#
```
または
```
?sort=flagSeq+ASC--
```
にして、`flagSeq`順に並べ　LIMITをコメント化する

# Web　直してる最中なんです

/etc/WE-3にフラグがあるらしいので、パストラバーサル問題を疑う。

```
<!-- <button onClick="dlFIle('WE-3-01')">ダウンロード</button> -->

function dlFIle(file){
	var dataS = 'fName=' + file;
	var xhr = new XMLHttpRequest();
	xhr.open('POST','/secret/download.php');
	xhr.send(dataS);
	xhr.onload = function() {
		var strS = xhr.responseText;
	};
}
```

↑こんなのが見つかるので、

```
┌──(kali㉿kali)-[~]
└─$ curl -X POST --data-urlencode 'fName=../../../../../../etc/WE-3' https://we3-prod.2025winter-cybercontest.net/secret/download.php
flag{fGrantUB56skBTlmF14mostFP}
```

# Web　直接聞いてみたら？

![直接聞いてみたら1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/3c7d3bbc-0394-40af-a24b-d45b0c4aaee3.png)


![直接聞いてみたら2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/be46b69e-1953-4823-af5a-0bcbd9570508.png)

```
data=W3sibmFtZSI6Im5hbWUiLCJ2YWx1ZSI6Im9uIn1d
```
を送信したら
```
[["name","BLACK SMITH"]]
```
が返ってくる

`W3sibmFtZSI6Im5hbWUiLCJ2YWx1ZSI6Im9uIn1d`をデコードすると

```
[{"name":"name","value":"on"}]
```
[{"name":"`flag`","value":"on"}]をBase64して送信すれば、フラグがとれそう

![直接聞いてみたら5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/cb625533-2d4f-400e-8867-2e8fb57d8641.png)

# フォレンジック　露出禁止

```
192.168.100.103 - - [10/Jul/2024:15:36:05 +0900] "GET /mypage.php?sesid=MTcyMjMxMjQxNywzLHVzZXIzCg== HTTP/1.1" 200 281
```
base64でデコードすると`1722312417,3,user3`と当時のセッション有効期限ぽいのがあるので、

```
1738494799,6,user1
```
をbase64して送った

# フォレンジック　成功の証

FTPでブルートフォースしてる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/22c4caed-7e8c-474f-a1d2-7e60e6ff70fd.png)


# フォレンジック　犯人はこの中にいる！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/656232dc-a0b4-4ba6-8f5d-f6a6daea93cf.png)

グローバルアドレスっぽい 59.214.32.56 からポートスキャンが行われている

MACアドレスは、`00:0c:29:4d:c2:33`

フィルタすると、同じMACアドレスのローカルIPアドレスがある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/bcea64e6-10b7-429b-9d9f-5568f1a364f2.png)


# フォレンジック　InSecureApk

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/fb37fbb1-4d27-4038-bd70-3983b934893f.png)

MainActivityを追う

![InSecureApk1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/92cafc29-b7d9-4c6f-9516-146e85f30e96.png)

入力値は16文字が正解
"VUSTIq@H~]wGSBVH" = SecretGenerater.decode(入力値)

SecretGenerater.decode関数はどこ？


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/e453ea70-38ec-49bc-9346-66c38adb40a7.png)

native関数「checkNative」へたらいまわし

![InSecureApk3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/1468204e-a39f-4c2e-a11d-60147371c9e9.png)

を Ghidoraで解析

![InSecureApk4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/56672b8d-b16e-407c-b7b0-a3eca016e5b8.png)

checkNativeたしかに存在

![InSecureApk5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/348e043e-43ad-414c-a76c-783d2f970c4f.png)

入力値を0923200802022025とxorしてる

"VUSTIq@H~]wGSBVH" = "0923200802022025" ^ 入力値

![InSecureApk6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/752cea25-ff2b-460e-b9dd-365adab8e094.png)

# トリビア　排他的論理和

compare ^ pattern3　でフラグが見える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/f0fc7e47-e6a9-4f1c-99c8-d40166ec4f54.png)

フラグの中身は　IPアドレス　なので それっぽくなるか確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/c86bc173-bd45-448a-abc4-c6d0aebb537c.png)

なった。