CTF
-
LOS - 5 (WOLFMAN) Write Up (공백 필터링 우회)CTF/Web 2020. 3. 13. 19:49
이번엔 공백기호가 필터링 되어 있다. %20도 안먹히고 +도 안먹힌다. 하지만 %0A는 먹혔다. linefeed %0A 라고 한다. 라인피드의 기능은 커서를 현재 행의 다음행으로 옮기는 것이다. 그래서 0a를 사용하면 스페이스의 역할을 해주게된다. https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=%27%0aor%0aid=%27admin 라고 쿼리문을 입력하면 성공
-
Los - 4 (orc) Write Up (Blind Sql injection 코딩 방법)CTF/Web 2020. 3. 12. 19:42
Los.4_orc 문제 분석 4번째부터 벌써 난감한 문제가 나왔다. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); get을 통해 가져온 pw와 sql 결과문에서 나온 pw가 같아야지만 문제가 최종적으로 풀리게 되어 있다. 즉 참, 거짓을 통해 직접적으로 푸는 방식이 아닌 참, 거짓을 통해서 비밀번호를 유추해서 비밀번호를 직접 적어야 하는 문제이다. 이런 문제 유형을 보통 blind sql injection 문제라고 한다. 해결방법은 보통 Python 코드를 작성하는 것이다. Blind sql 사전 지식 이 문제를 풀기 위해서는 기본적으로 length 함수를 사용할 줄 알아야 하며, substr을 사용할 줄 알아야 한다. Lengt..
-
LOS - 3 (goblin) Write UpCTF/Web 2020. 3. 11. 17:39
Los.3_goblin select id from prob_goblin where id='guest' and no= 우선 필터링 되는 부분을 보면 싱글쿼터와 더블쿼터와 역쿼터를 필터링 중인 것을 확인할 수가 있다. id가 'admin'이면 문제는 풀리게 되어 있다. where 절을 보면 guest의 no의 번호를 올바르게 입력하면 "Hello guest"가 나올 것으로 보인다. 한번 guest에 맞는 no을 찾아보자. 사실 찾을 필요는 없다. 그저 이 문구가 나오지 않게 하는 것이 중요하다. 우리는 이제 where id='guest' and no= 절이 거짓이 되도록 만든 후 or 연산을 시작 할 것이다. 우리는 사전에 필터링 문에서 쿼터들이 다 먹혀있는 것을 확인했다. 하지만 no 컬럼은 int형 컬럼..
-
LOS - 2 - (cobolt) Write Up (mysql 주석 사용)CTF/Web 2020. 3. 11. 04:52
Los.2_cobolt Created: Mar 10, 2020 3:21 AM Created By: eild Shin Last Edited By: eild Shin Last Edited Time: Mar 10, 2020 3:34 AM Stakeholders: eild Shin Status: web Type: Lord of SQLInjection select id from prob_cobolt where id='' and pw=md5('') pw를 md5 해쉬로 돌리고 있지만 그냥 주석처리 시켜버려서 무시시키면 된다. id만 admin으로 맞추어 주면 된다. `#은 url에서 사용하는 문구임으로 url인코딩을 사용해준다. id=admin'%23
-
TIM CTF - easyrev Write upCTF/Rev 2019. 9. 24. 14:45
TIM CTF가 최근에 막을 내렸다. 필자는 비교적 가벼운 난이도의 문제만 풀었지만 킹갓 대한민국의 다른 팀들이 본선에 진출하여 대거 루마니아행 비행기를 끊었따는 소식을 들었다. 모두들 화이팅! ----------------- 코드만 이해할 수 있다면 쉬운 easyrev 풀이를 포스팅해보도록 하자! undefined8 main(void) { int iVar1; size_t sVar2; int local_1c; printf("Enter password: "); scanf("%s",password); sVar2 = strlen(password); if (sVar2 < 0x41) { sVar2 = strlen(password); if (sVar2 < 8) { puts("Error: password too sh..
-
[Hack CTF - Pwnable] Basic_BOF #2 Write UpCTF/Pwn 2019. 8. 16. 15:37
사실 엄청나게 쉬운 문제인데 너무 돌아갔었다. 헛수고한 시간이 화가나서 라업을 적기로 했다. 기드라로 확인한 파일의 메인 함수이다. fget으로 입력을 받고 그와 상관없이 sup 함수를 실행하기 위해서 함수 포인터를 사용하였다. sup 함수는 간단한 문구 출력 함수이다. 그래서 이 함수 포인터 스택값을 조작하기 위해서 개고생을 했다. 쉘코드를 버퍼에 입력해서 버퍼 값 주소를 찾아서 넘겨주려 했는데 사실 더 간단한 법이 있었다. 출제자님께서 저처럼 고생하지 말라고 사실 친절하게 shell 함수를 만들어두셨었다. 하.. 이렇게 떠먹여주고 있엇다니; 그래서 당장 이 함수의 주소값을 알아봤다. shell 함수의 어셈블리어 코드의 시작 주소는 0x0804849b이다. 그래서 이 주소를 fget 다음에 오는 sub..
-
해커스쿨 FTZ - Clear 후기CTF/Pwn 2019. 8. 14. 00:33
FTZ 를 드디어 끝맞쳤다. 옛날같으면 시간이 얼만큼 흐르든지 간에 열심히 안보고 풀면서 씨름해나갔을텐데 요즘 할 일이 너무 많아진 관계로 그러한 방법을 사용하지 못해서 너무 아쉬웠다. 하지만 빠르게 막힐때마다 풀이를 보고 왜 그런지 이해해가며 적용시키며 풀어가는 것도 공부가 꽤나 되었다. 주로 리눅스 시스템에서 시스템의 맹점을 초반에 다루고 그다음에는 buffer over flow, format string 등을 다룬다. 이 세가지를 알고 푼다면 문제풀이가 가능할 것이고 이 세가지를 배우기 위해서 풀게된다면 나처럼 해답을 보면서 따라가며 배우는 식이 될것이다. 어느쪽이든지 유익한 듯하다. 이제 LOB 풀러 가야지...