SMALL

Wargame 77

[CodeEngn] Basic RCE L09

[문제] [풀이] 문제를 실행하면 error 메시지 출력 후 종료된다. 이에 IDA를 통해 UPX 패킹이 되어 있는 것을 확인할 수 있었고, unpacking을 진행한 뒤 ollydbg로 실행하였다. 6A0068002040006812204000 [핵심] StolenByte란? : 훔친 바이트란 의미, 프로그램의 한부분의 코드를 훔쳐내어 다른 부분으로 옮겨진 코드 - 주로 옮겨지는 코드는 엔트리 포인트위의 몇개의 코드임 - 옮겨진 코드들은 OEP 주소로 점프하기 전에 위치에서 PUSH 됨. -> 주로 OEP 주소의 코드를 따로 분리해서 OEP로 점프 직전에 PUSH로 넘겨주 - 패커가 이동시킨 코드의 윗부분 (보통 OEP 로부터 몇 개의 명령어) - 프로그램을 패킹 시 확인 가능. - 숨겨진 코드를 다시 ..

Wargame/CodeEngn 2021.08.11

[Webhacking.kr] Old 26

[문제] [풀이] view-source 소스코드 중에서 핵심적인 부분은 php 코드 부분이다. 소스코드를 분석해보면 다음과 같다. if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); } -> get 방식으로 id를 입력 받아 admin이면 no! 출력 후 종료 $_GET['id'] = urldecode($_GET['id']); -> id를 urldecode하여 id에 저장 if($_GET['id'] == "admin"){ solve(26);} -> id가 admin이면 26 단계 solve 즉, admin를 입력해야 26단계를 해결할 수 있는데, admin을 필터링 하고 있다. get 방식으로 입력 값을 줘야 하니, urlencoding을 생각해볼 수..

[CodeEngn] Basic RCE L08

[문제] [풀이] 1. UPX 언패킹 후 디버깅 IDEA로 디버깅을 시도하니 upx 패킹이 되어있었다. 문제에서 구해야 하는 것이 OEP이므로 패킹만 풀어주면 쉽게 구할 수 있다. 이에 cmd에서 upx를 풀어주고 IDEA나 Ollydbg로 디버깅하였다. 언패킹 후 아이다에서 start함수를 열어주면 OEP를 한 번에 구할 수 있다. 2. 패킹 상태로 문제 풀이 패킹이 된 파일을 Ollydbg로 열면 PUSHAD와 POPAD를 찾아볼 수 있는데, POPAD부분에서 JMP분기문을 발견할 수 있다. 이는 패킹 후 실제 코드가 들어있는 부분이므로 분기문 속을 Stepin하면 OEP를 발견할 수 있다.

Wargame/CodeEngn 2021.08.04

[CodeEngn] Basic RCE L07

[문제] [풀이] 문제 파일을 다운하여 임의의 문자열을 넣고 실행해보면 error 메시지가 출력된다. GetDlgItemText 함수와 GetVolumeInformation함수, strcat함수가 눈에 띈다. GetDlgItemText 함수는 입력 값을 가져온다. 00401097 6A 00 push 0 ; RootPathName = NULL -> RootPathName = NULL이면 C:\를 말한다! GetVolumeInformation함수는 드라이버의 정보를 가져온다. 가져온 정보는 위의 버퍼에 저장된다! 004010A8 E8 94000000 call ; \lstrcatA -> strcat 함수: 문자열 붙여주는 함수, 인자 값으로 4562-ABEX와 07.0040225C 값을 가져와서 붙여준다. -..

Wargame/CodeEngn 2021.07.30

[CodeEngn] Basic RCE L05

[문제] [풀이] 파일을 다운하여 임의의 문자열을 넣을면 오류 메시지가 출력된다. IDA를 열어 start 함수를 보면 UPX로 패킹되어 있는 것을 알 수 있다. 이에 윈도우 cmd 창에서 upx 언패킹을 하여 ollydbg로 분석해보았다. ollydbg로 [Searchfor] - [All referenced text strings]를 확인하면 프로그램 속의 문자열만 추출하여 보여준다. 여기서 Enter a Serial! 아래에 Registered User와 GFX-754-IER-954가 위치하였고, 이 다음 성공 메시지를 출력하고 있었다. 해당 값들이 실제 정답인지 확인하고자 코드를 확인하였다. 코드를 보면 Registered User 아래에 조건 분기문으로 00440F8C로 분기하는 것을 볼 수 있는..

Wargame/CodeEngn 2021.07.29

[Webhacking.kr] Old 17

[문제] [풀이] 문제의 소스코드를 확인하니 unlock에서 계산된 값을 login.pw.value와 비교하여 get 방식으로 ?unlock/10을 보내고 있었다. 태그를 보면 login의 pw가 우리가 입력하는 입력 창임을 알 수 있다. 따라서 Console 창에서 unlock 변수에 들어갈 값을 계산해보면 7809297.1이 된다. 즉, 이 값을 입력 창에 입력해주면 되는 것이다! https://webhacking.kr/challenge/js-4/?780929.71 url 또한 unlock/10의 값이 파라미터로 연결된 것을 볼 수 있다.

[Webhacking.kr] Old 16

[문제] [풀이] Challenge 16 * 문제의 스크립트를 확인해보니 if(cd==??) 문 중에서 if(cd==124) location.href=String.fromCharCode(cd)+".php"; // do it! 부분만 다른 부분과 달랐다. 주석으로 do it이 있는 것으로 보아 해당 부분이 문제 풀이의 힌트가 될 것 같다. String.fromCharCode() 함수에 대해서 찾아보았는데, 와 같이 hex 값을 유니코드로 바꿔준다고 한다. 해당 값을 Console 창에서 실행해보면, |.php 파일을 나타내면서 flag를 출력한다. url 주소창을 보면 https://webhacking.kr/challenge/js-3/%7C.php 로 변경되어 있음을 확인할 수 있고, 7C가 | 로 변경되..

LIST