- rev-4(dreamhack reversing)
실행파일 chall4를 역어셈블러, ghidra를 사용하면 위와 같이 나온다.
여기서 main함수를 찾는다.
Input된 값(local_118)을 Fun_140001000에서 비교하여 Wrong, correct를 거르는 것을 확인.
Param_1(local_118) + local_18>>4 | ((Param_1(local_118)+local_18)&0xf<<4) != DAT_140003000[Param_1(local_118)]
DAT_140003000[~]의 값
24,27,13,C6,C6,13,16,E6,47,F5,26,96,47,F5,46,27,13,26,26,C6,56,F5,C3,C3, F5, E3, E3
또, Local_18=0이고 루프가 돌아갈 때 마다 1씩 증가된다는 것을 알 수 있다.
(입력값 + local_18 ) >> 4 | ((입력값 + local_18)&0xf<<4) == DAT_140003000[Param_1(local_118)]일때 local_18에 1씩 더해진다.
다음과 같이 나옴
이렇게 하는 이유는 저 코드가 0x42라면 0x24로 뒤집는 코드이기 때문
Flag : DH{Br1ll1ant_bit_dr1bble_<<_>>}
2.rev-6(dreamhack reversing)
rev-basic_6
실행하고 임의의 값 입력했을 때 Wrong 출력
파일코드를 살펴보기 위해 IDA
if ( (unsigned int)sub_140001000(v4) )
puts("Correct");
else
puts("Wrong");
return 0;
}
IF문에서 sub_140001000(
v4) 살펴보면 될 것 같음
키ai[i]==플래그[i]이면 correct
byte_140003000(플래그),byte_140003020(키)값
파이썬 ai[i]=flag[i]
값을 이용하여 파이썬 코드 작성
실행
Replac3_the_w0rld
3. handray (HackCTF reversing)
권한 변경 후 문제 확인
위와 같이 flag를 뛰어넘었다는 출력을 확인할 수 있었음
프로그램 흐름을 IDA로 살펴보니 아래와 같았음
처음 실행 후 jnz로 흐름이 갈라지는데, 이때 jnz 구문이 실행되면, 즉 zero가 아니면 jump하여 앞서 살펴본 flag를 뛰어넘었다는 문자열을 출력함
만약 zero라서 jump하지 않으면 다른 흐름으로 진행되는데, jle 구문으로 인해 결과가 작거나 같은 경우 jump하여 무언가의 연산 후 다시 비교문으로 돌아오고, 거짓일 경우 “flag is ~”를 출력하는 것으로 보아 연산을 통해 flag를 생성함을 짐작할 수 있음
즉, 처음 실행 시 jnz 구문이 거짓이 되어야 flag 값을 알아낼 수 있음, 이에 gdb를 이용해 jnz에 BP를 걸고 실행함
현재 레지스터의 상태를 info 명령어를 통해 살펴보니 IF flag만 1 값을 가진 것을 확인할 수 있음
이에 ZF도 값을 1로 변경하기 위해 우선 ZF의 값이 위치한 6번째의 값도 1로 변경한 16진수 값을 구함
계산을 통해 구한 0x00000242를 $eflags의 값으로 세팅하고 다시 $eflags 레지스터를 살펴봄
흐름을 바꾸기 위한 ZF가 1 값을 가진 것을 확인할 수 있었음
$eflags의 ZF를 1로 변경하니 아래와 같이 프로그램 흐름이 자동으로 변경됨
바뀐 흐름을 이어서 실행하니 flag 값이 출력됨
flag: HackCTF{ HotToHanDleC0ldT0H000ld!}
(참고: https://sanseolab.tistory.com/44)
4. home (HackCTF web)
IP를 변조하는 것 같다고 추측.
X-forwarded-For 이라는 IP를 붙이는 헤더를 변조하면 될 것 같다고 생각.
프록시 설정 후 Burp suite 켬
다음과 같이 위조
여기서 127.0.0.1로 바꾼 이유는 localhost IP가 127.0.0.1이기 때문
flag : HackCTF{U5u4lly_127.0.0.1_4ll0w5_y0u_t0_p4ss}
5. LOL (HackCTF web)
현재 local이아니며 해당 주소에 flag.php인 것을 보아 플래그와 관련됨
-> local로 flag.php들어가보는 것을 예상
일단 just play have fun enjoy the game에 들어가 봄
들어가서
검색을 해보면 lol 전적검색창인 op.gg에서 사용자 검색이 됨
(해당 검색어는 해당하는 닉네임의 사용자가 없어서 안뜨는 거)
user 검색 창의 소스코드를 확인
작동방식--> op.gg 페이지+입력한값
post타입인 것을 확인하고 서버와 관련된 공격을 짐작
일단 url을 조작해보자
url 조작했을 때
다른 사이트에 접근하면 no의 값을 띄움--> url을 조작하지 않고 공격을 시도
SSRF 취약점 이용
@을 이용하여 취약점 발생을 시킴_ @ 이전의 값들이 무시가 되고 그 이후의 값으로 page가 이동이 된다.)
value값을 조작(다른 도메인으로 우회해서 접속)
localhaost과127,0,0,1은 필터링되는 듯함
-->다른 사이트에 접근하거나 도메인을 우회하여 접속했을 때 오류를 띄우고(nono~) localhost나 127.0.0.1이 filtering 되는 듯하다.(nop)
즉 op.gg 값이 들어가고 127.0.0.1을 우회 해야 한다.
https://posix.tistory.com/100 (우회 참조)
6. Cookie (HackCTF web)
Cookie 값을 확인해보면 :
WlhsS2NGcERTVFpKYWtscFRFTktNR1ZZUW14SmFtOXBXak5XYkdNelVXbG1VVDA5
이를 디코딩 하면 :
ZXlKcFpDSTZJaklpTENKMGVYQmxJam9pWjNWbGMzUWlmUT09
딱히 의미있는 값이 나오지 않아서 다시 디코딩을 진행 :
eyJpZCI6IjIiLCJ0eXBlIjoiZ3Vlc3QifQ==
한번 더 디코딩 : {"id":"2","type":"guest"}
다음과 같은 값을 얻을 수 있었다. 이것을 관리자 권한으로 변경하기 위해 {"id":"1","type":"admin"}로 수정한 후, 다시 인코딩 3번
: e1wiaWRcIjpcIjFcIixcInR5cGVcIjpcImFkbWluXCJ9
: ZTF3aWFXUmNJanBjSWpGY0lpeGNJblI1Y0dWY0lqcGNJbUZrYldsdVhDSjk=
: WlhsS2NGcERTVFpKYWtWcFRFTktNR1ZZUW14SmFtOXBXVmRTZEdGWE5HbG1VVDA5
인코딩한 값을 쿠키로 재전송
하지만 flag값이 반환되지 않고 패스워드 값이 틀렸다는 문구만 출력.
이 부분을 수정.
PHP strcmp 함수 매뉴얼을 보면 strcmp(str1, str2) 를 비교했을 때, str1이 더 크면 양수를 반환하고, str2가 더 크면 음수를 반환, 두 값이 같으면 0을 반환한다. 그런데 strcmp 함수의 두번째 인자가 배열 형식이 되어, strcmp(String, Array[])를 만들면, NULL 을 반환하게 되고, NULL은 0으로 처리되어 결과적으로 True가 됨
PassAdmin을 배열형식으로 변경해주면 True가 되어 flag값을 반환한다.
7. RSA (HackCTF Cryptography)
HINT를 클릭하니 위키백과의 ‘RSA 암호’에 대한 결과를 확인할 수 있었음
문제 해결을 위해 파이썬의 Crypto.Util 패키지를 사용함
(https://pycryptodome.readthedocs.io/en/latest/src/util/util.html)
아래와 같이 문제 해결을 위해 패키지 설치 후 파이썬 코드를 작성함
우선 공개키를 위해 p, q를 이용해 N 값을 찾고, (p-1)(q-1)인 phi 값을 찾아냄
이후 공개키를 위해 mod phi에 대한 e의 곱셈의 역원을 구함 (어떤 수 x, y의 곱이 mod phi한 결과가 1이 되기 위해서는 두 수는 서로 역원이 되어야하기 때문임)
이후 구한 값을 통해 복호화 식으로 암호문을 해독, 바이트로 형 변환하여 flag를 찾게 됨
flag: HackCTF{R5A_1s_s0_fun!}
'4-7. 2021-2 심화 스터디 > CTF' 카테고리의 다른 글
[21.11.20]암호, 포렌식 CTF 풀이 (0) | 2021.11.20 |
---|---|
[2021.11.13] dreamhack, HackCTF 풀이 (0) | 2021.11.13 |
[2021.10.09] HackCTF 풀이 (0) | 2021.10.09 |
[2021.09.25] HackCTF풀이 (0) | 2021.10.08 |
[2021.09.18] Dreamhack rev-basic 외 풀이 (0) | 2021.09.18 |