본문 바로가기

전체 글165

[CTF] CCE2022 reborn of php Write-Up | Web 2022년 사이버공격방어대회 (CCE) reborn of php Write Up 입니다.문제에 접속하면 다음과 같은 페이지가 출력됩니다.아무 페이지에 들어가서 URL을 확인해 보았습니다. b 인자와 a 인자가 있는 것을 확인할 수 있습니다.이 인자들의 역할은 lib/controller.lib.php 코드에서 확인할 수 있습니다.b가 board, a가 action인데, 이 두 개를 결합하여 path를 설정합니다.[그림 3.2]를 예로 들면, b = register, a = index이므로path는 register/index가 되고, 26번 라인으로 인해 최종적으로 register/index.php가 완성됩니다.만약 11라인으로 인해 필터링에 걸리거나, 해당 경로에 파일이 존재하지 않으면 path는 main.. 2026. 3. 10.
[CTF] CCE2022 BabyWeb Write-Up | Web 2022년 사이버공격방어대회 (CCE) BabyWeb Write Up 입니다.문제에 접속하면 텍스트박스와 제출 버튼이 보입니다.해당 서버는 다음과 같은 파일로 구성되어 있습니다.먼저 public/app.py 입니다. 이 코드의 핵심은 try문 안에 있습니다.48번째 라인을 return하는 것이 목적인 것으로 보입니다.또한, flag.service를 필터링하는것으로 보아, 해당 인자를 필터링을 우회하여 전달해야 하는 것으로 보입니다.Internal/app.py 소스코드 입니다. [그림 2.3]의 48번 함수 get()을 호출하면 실행되는 코드로 보입니다. 10번 라인에서, flag.service가 들어오면 FLAG를 return하도록 구성되어 있는 것을 확인할 수 있습니다.8번 라인에서 URL이 /flag.. 2026. 3. 10.
[CTF] Lord of SQLInjection 16번 zombie_assassin Write-Up 15번 문제와 비슷한 코드인데, 이번엔 ‘ 검열 대신 strrev(addslashes()) 함수가 있습니다.select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'이 문제도 id와 pw를 입력받으며, 이것들을 잘 이용해 인젝션하면 됩니다.‘를 입력하게 되면, addslashes() \’가 되고, strrev()로 인해 최종적으로 ‘\가 됩니다.addslashes() 작동 범위는 ‘ ” \ NULL 입니다.NULL을 넣어보니 0\로 된 것을 확인할 수 있습니다.그러면, \%00을 넣으면 0\’\가 되어 \’가 생기게 됩니다. 이는 일반 문자열 역할을 하게 됩니다.select id from prob_zombie_assass.. 2026. 3. 10.
[CTF] Lord of SQLInjection 15번 succubus Write-Up id, pw 둘 다 입력받으며, 싱글쿼터가 검열되고 있습니다.select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'이와 같은 쿼리에서 제한적으로 싱글 쿼터를 우회할 수 있는 방법이 하나 있습니다.싱글쿼터 ‘ 를 SQL에서 문자열 그 자체로 인식하기 위해서는 이스케이프 처리를 해야 합니다. 즉, \’ 이렇게 입력하면 SQL 문법이 아니라 문자열로 처리하게 됩니다.이를 이용하여 id 뒤쪽 ‘를 일반 문자열로 처리하여 무력화 시킬 수 있습니다.select id from prob_succubus where id='\' and pw=' or 1#'id에 \, pw에 or 1=1# (앞에 공백 포함)를 넣으면 \ 뒤에 있는 ‘가 문자열로 처.. 2026. 3. 10.
[CTF] Lord of SQLInjection 14번 giant Write-Up ???from이랑 테이블 명이 붙어 있습니다. 이 사이에 값을 입력하여 떼어내는 것인가 봅니다.공백과, 공백으로 쓸 만한 것들은 검열되고 있습니다. (\n -> %0a, \r -> %0d, \t -> %09)\v(%0b)나 \f(%0c)로 우회하면 됩니다.입력하여 떼어내면 문제가 정답처리 됩니다. 2026. 3. 10.
[CTF] Lord of SQLInjection 13번 bugbear Write-Up 검열 문자열이 많아졌습니다. 특히, 0x가 검열되어 hex로 문자열을 입력할 수 없습니다.select id from prob_bugbear where id='guest' and pw='' and no=1||id in(0b0110000101100100011011010110100101101110)hex가 안 되면 bin으로 입력하면 됩니다.admin의 bin값인 0b0110000101100100011011010110100101101110를 입력합니다. 공백은 tab 문자로 우회합니다.Hello admin이 뜬 것을 확인할 수 있습니다.select id from prob_bugbear where id='guest' and pw='' and no=1||id in(0b011000010110010001101.. 2026. 3. 10.
[CTF] Lord of SQLInjection 12번 darkknight Write-Up Blind SQL Injection 문제인 것으로 보이며, 여기는 첫 번째 쿼리에 no라는 조건이 붙습니다. 여기서 no는 숫자 데이터임을 알 수 있습니다. (쿼터 미사용)select id from prob_darkknight where id='guest' and pw='' and no=select pw from prob_darkknight where id='admin' and pw=''그리고 pw와 no에서 검열되는 문자열이 차이가 있습니다.pw에서는 싱글쿼터만 검열되며, no에서는 싱글쿼터, substr, ascii, = 가 차단되고 있습니다.pw에서 ‘ 가 차단되기 때문에, 숫자형 데이터인 no에서 인젝션을 수행하도록 하겠습니다.select id from prob_darkknight where id.. 2026. 3. 10.
[CTF] Lord of SQLInjection 11번 golem Write-Up Blind SQL Injection 문제입니다.특이사항으로는 or, and, substr, =가 검열당하고 있습니다.사실 MySQL에서는 or -> ||, and -> &&로 바꿔도 정상 동작하며, substr()과 mid()는 동일한 기능을 하는 함수입니다. 즉, substr() 대신에 mid() 쓰면 됩니다.문제는 = 기호입니다.값의 비교가 필요할 경우 > 문자열을 비교해야 할 경우, like()나 in 등으로 우회 가능합니다.select id from prob_golem where id='guest' and pw=''||id like('admin')#'이런 식입니다.우회가 된 것을 확인할 수 있습니다.select id from prob_golem where id='guest' and pw=''||i.. 2026. 3. 10.
[CTF] Lord of SQLInjection 10번 skeleton Write-Up los 10번 skeleton Write-Up 입니다.절대 이루어 질 수 없게 1=0을 붙여 놓았습니다.딱히 검열 당하는 중요 구문은 없어서, 쉽게 해결 가능 해 보입니다.select id from prob_skeleton where id='guest' and pw='' or id='admin'#' and 1=0다음과 같이 입력하면 앞의 조건은 무력화되고, admin을 선택하며, 뒤의 이상한 조건은 주석 처리가 됩니다.URL Encoding 후 데이터를 전달하면 문제가 정답처리 됩니다. 2026. 3. 10.
[CTF] Lord of SQLInjection 9번 vampire Write-Up los 9번 vampire Write-Up 입니다.이번엔 admin을 str_replace()을 이용해 공백으로 치환하고 있습니다.사실 이 문제는 SQL Injection이라기 보다는 php의 str_replace() 취약점을 이용한다고 보는 게 맞을 것 같습니다.관련 글 : https://blog.spareone.io/51 [PHP] str_replace() 문자열 치환 함수 사용법과 우회 방법str_replace() 함수는 특정 문자열을 치환하는 함수입니다. 사용 방법은 str_replace([변경 대상 문자열], [변경할 문자열], [해당 문자열]) 입니다. 해당 예제는 "안녕하세요"를 "안녕안하세요"로 바꾸는blog.spareone.io admin 말고 adadminmin 이렇게 입력하면 문자열이.. 2026. 3. 10.