SMALL

Wargame 77

[CodeEngn] Basic RCE L04

[문제] [풀이] 프로그램을 실행시키면 정상이라는 문자열이 출력된다. 이외에는 특별한 것이 없으므로 ollydbg를 실행시켜보았다. ollydbg에서 프로그램을 실행해보니(F9) 디버깅 당함이라는 문자열이 출력되는 것을 보아 안티디버깅이 적용되어 있는 것을 알 수 있다. 이에 한 줄씩 코드를 실행(F8)해보며 어떠한 과정을 거칠 때 디버깅 당함이라는 문자열이 출력되는지 확인해보았다. 프로그램을 실행하다보니 GetCommandLineA 라는 함수를 지나니 안티디버깅이 적용됨을 확인할 수 있었다. 이에 해당 함수 내부를 보기 위해 SetIn 과정을 수행하였다. GetCommandLineA 함수 내부에서 코드를 실행해보니 CALL 04. 0040100F 호출 후 안티디버깅이 적용됨을 알 수 있었다. 이에 St..

Wargame/CodeEngn 2021.07.22

[CodeEngn] Basic RCE L03

[문제] [풀이] 문제 파일을 실행하니 해독할 수 없는 문자열이 나왔고, 구글링하니 독일어라고 한다..! key 를 입력하는 창이 실행되었고, 아무 문자나 입력해보았다. 문자열 검증에 실패할 경우 error가 출력되었다. 이에 ollydbg를 통해 디버깅을 해보았다. 어셈블리를 확인하니 입력한 문자열을 비교해서 password가 맞고 틀림을 나타내주는 것 같았다. 비교의 성공 여부를 나타내는 문자열 앞에 unicode로 2G83G35Hs2를 push 한 후에 varStrCmp 함수를 호출하는 것을 보아 해당 문자열과 입력값을 비교함을 알 수 있다. 따라서 key 값으로 2G83G35Hs2을 입력해보면, 성공 메시지를 획득할 수 있다. 그런데, 문제는 스트링 비교 함수를 묻고 있으므로 정답은 varStrC..

Wargame/CodeEngn 2021.07.22

[Webhacking.kr] old-15

[문제] [풀이] 문제에 접속하면 접근 권한이 없다는 말과 함께 사이트의 첫 페이지로 이동하게 되는데, 이는 alert 함수를 포함하고 있는 자바스크립트가 동작되고 있기 때문이다. 이것을 방지하기 위해서는 사이트 내부의 설정을 변경해야 한다. whale에서는 설정의 검색 창에서 자바를 검색하면 자바스크립트 차단 여부를 묻는 곳을 확인할 수 있고, 여기서 설정할 수 있다. 설정 후 소스코드를 확인할 수 있고, document.write 함수를 확인할 수 있다. href 태그를 보니 ?getFlag를 출력하는 코드가 작성되어 있었다. 이를 실행하고자 console 창으로 이동하였고, 명령을 실행한 결과 GET FLAG라는 문구를 확인할 수 있었다. 하이퍼링크를 클릭하면 문제 풀이에 성공하였다는 문구를 확인할..

[Webhacking.kr] old-14

[문제] [풀이] 구글 개발자 환경에서 소스코드를 확인할 수 있었다. 그 중 script 태그 사이의 ck 함수에서 문제 해결을 위한 힌트를 얻을 수 있다. function ck(){ var ul=document.URL; ul=ul.indexOf(".kr"); ul=ul*30; if(ul==pw.input_pwd.value) { location.href="?"+ul*pw.input_pwd.value; } else { alert("Wrong"); } } document.URL은 문서의 URL을 반환해주는 역할(window.location.href으로도 사용할 수 있음)을 하고, indexOf( ) 함수는 자바스크립트에서 특정 문자의 위치를 검색해주는 역할을 한다. ul 변수를 정리해보면, 현재 페이지의 u..

[webhacking.kr] old-06

[문제] [풀이] view-source를 통해 소스코드를 확인해볼 수 있다. 소스코드를 대략적으로 분석해보면 id와 pw를 20번 base64 encoding 하여 1~8 사이의 숫자를 특정한 문자로 치환한 값을 다시 decding하여 그 값이 각각 admin과 nimda이면 문제가 해결되는 소스코드이다. 거꾸로 생각해보면 admin과 nimda를 base64 방식으로 20번 encoding한 값을 집어넣으면 자동적으로 decoding과 함께 치환됨을 알 수 있다. 이에 대한 코드를 파이썬으로 작성해보면 다음과 같다. import base64 iid= 'admin'.encode() pw = 'nimda'.encode() for j in range(20): pw = base64.b64encode(pw) i..

[리눅스] Bandit level 25 -> level 26 & level 26 -> level 27

[문제] [풀이] ls 명령으로 파일 목록을 확인해보면 bandit26.sshkey 파일을 확인할 수 있다. 이전과 동일한 방법으로 ssh 연결을 시도해볼 수 있다. 그런데 연결이 계속 끊어지고 있었다. bandit26 의 passwd 파일을 읽어보니 /usr/bin/showtext에 대한 경로가 나와있었다. 파일을 읽어보니 more 명령이 실행되면 ~/text.txt 파일이 열리는 것을 볼 수 있었다. more 명령어는 파일 내용이 길 때 끊어가면서 읽을 수 있는 명령이다. 그러기 위해서는 bandit26의 연결 내용이 조금씩 출력되게 해야하기 때문에 창의 크기를 줄여주면 해결할 수 있다. more 창이 나오게 되면 v로 vi 에디터를 켤 수 있다. 해당 명령을 입력해주면 명령에 대한 결과가 vi 창에..

Wargame/bandit 2021.07.20

[리눅스] Bandit level 23 -> 24

[문제] [풀이] 문제에서 주어진 /etc/cron.d 아래의 cronjob_bandit24 파일을 읽어보니 /usr/bin/cronjob_bandit24.sh 을 /dev/null로 리다이렉션하고 있었다. 해당 파일을 읽어 보니 쉘 스크립트가 존재했는데, /vat/spool/bandit24의 모든 스크립트를 실행한 후 60초 뒤에 삭제하도록 되어 있다. 따라서 쉘스크립트를 실행하면 bandit24에 대한 패스워드를 구할 수 없다. 또한, 이전과 달리 cat /tmp/~ 에 대한 내용이 없는데, 이에 대한 코드를 직접 작성해줘야 한다. /tmp 아래에 sik 이라는 디렉토리를 만들어 dump.sh 에 스크립트를 작성하였다. bandit24 의 패스워드를 sik 폴더 아래에 bandit_pass 라는 파일..

Wargame/bandit 2021.07.17

[리눅스] Bandit level 22 -> 23

[문제] [풀이] 문제에서 주어진 /etc/cron.d 파일로 이동해 bandit23 계정에 대한 cronjob을 확인하였다. 확인하니, /usr/bin/cronjob_bandit23.sh 파일을 /dev/null로 리다이렉션하고 있었다. 해당 파일을 읽어보니 쉘 스크립트 코드가 포함되어 있었고, 쉘스크립트는 컴파일 없이 바로 실행할 수 있다. 파일을 실행하니 /tmp/8169b67bd894ddbb4412f91573b38db3 파일에 password가 있다는 것을 알 수 있었다. /tmp/8169b67bd894ddbb4412f91573b38db3 파일을 읽어보면 패스워드가 출력된다! 그런데,, 이것은 bandit22 계정에 대한 패스워드를 구한 것이므로 echo I am user bandit23 | md..

Wargame/bandit 2021.07.17

[리눅스] Bandit level 21 -> 22

[문제] [풀이] 문제에서 주어진 /etc/cron.d 폴더로 이동하여 파일 목록을 확인하니, 몇몇 계정에 대한 cronjob 파일이 있었다. bandit22의 패스워드를 찾아야 하므로 bandit22에 대한 cronjob 파일을 읽어보면 다음과 같다. /usr/bin/cronjob_bandit22.sh 파일의 내용을 /dev/null로 리다이렉션하는 것을 볼 수 있었다. 해당 파일 내용을 읽어보면 /etc/bandit_pass/bandit22 에 대한 내용이 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv 속에 있다는 것을 파악할 수 있다. /etc/bandit_pass/bandit22 은 bandit22의 패스워드를 담고 있는 파일이므로 /tmp/t7O6lds9S0RqQh9aMcz..

Wargame/bandit 2021.07.17
LIST