write-up(web)
[Lord of SQLInjection] nightmare write-up
문제의 소스 코드입니다. 문제를 푸는 아이디어 자체는 간단하지만 입력이 6문자로 제한되어 있습니다. 또한 주석에 사용되는 #, - 문자가 필터링되고 있습니다. 그러므로 필터링을 우회하면서 참인 조건을 넣어주어야 합니다. 주석으로 #,- 문자 대신 ;%00를 사용할 수 있습니다. 세미콜론으로 문장을 종료시키고 널 문자로 공백을 띄워서 뒷 문장을 무력화시키는 원리인 듯 합니다. 논리 연산에 대해 or(||) 연산에 집착하다가 문득 xor(^) 연산이 떠올랐습니다. mysql은 boolean 타입 중 true는 1, false는 0으로 처리합니다. xor연산은 같으면 1, 다르면 0을 반환합니다. 여기까지 알면 이제 문제를 풀 수 있습니다. 먼저 ('를 닫아주기 위해 ')문자를 넣어줍니다. 이제 pw는 fal..
[Lord of SQLInjection] zombie_assassin write-up
문제의 소스 코드입니다. where 절의 조건을 참으로 만드는 게 문제의 목표입니다. 사용자에게 입력을 받아 addslahses 함수를 적용한 뒤 strrev 함수로 문자열을 뒤집습니다. addslashes 함수는 ', ", \, nul byte에 \ 문자를 추가해 일반 문자로 만들어줍니다. 그래서 where 절의 조건 부분인 id='' and pw'' 를 조작해 id=' and pw' 가 되도록 만들어줘야 합니다. 또한 strrev 함수에 의해 ', ", \, nul byte(\0)는 각각 '\, "\, \\, 0\로 나오게 됩니다. 먼저 id에 nul(%00)을 넣어줘서 뒤의 '를 일반 문자로 바꿔주면 0\' and pw' 까지 id에 들어가게 됩니다. 이후 무조건 참이 되는 조건을 뒤에 넣어주면 됩..
[Lord of SQLInjection] succubus write-up
문제의 소스 코드입니다. 싱글쿼터(')를 입력할 수 없으면서 where 절의 조건을 true로 만들어줘야 합니다. 기본적으로 싱글쿼터는 특별한 문자입니다. 싱글쿼터 사이의 문자는 모두 문자열로 인식하게 해줍니다. 싱글쿼터의 기능을 빠져나가고 그냥 문자로 사용하기 위해 백슬래시(\)를 사용합니다. 그래서 id에 백슬래시를 넣어주게 되면 id에는 '\' and pw=' 라는 문자열이 들어가게 됩니다. 이후 무조건 참이 되는 조건을 or로 연결해주면 됩니다. url에 "id=\&pw= or 1=1%23"을 입력하면 문제가 풀립니다.
[Lord of SQLInjection] assassin write-up
문제의 소스 코드입니다. admin의 pw 일부를 알아내서 전송하면 문제가 풀립니다. like를 사용하므로 와일드카드(%, _)를 사용할 수 있습니다. 삽질을 많이 했지만 정확하게 admin의 pw 값을 찾는 방법을 알아내지 못해서 결국 무작위 대입(부루트 포싱)을 하기로 했습니다. guest의 pw(90d2fe10)를 살펴보니 대소문자 구분 없이 '숫자+알파벳'의 구조임을 알 수 있습니다. 또한 숫자 하나로는 결과가 안나오므로 0~1000까지의 숫자를 문자열로 바꿔서 대입해줍니다. 실행되는 코드는 아래와 같습니다. pw='%{0~1000}%' 실행 결과 중간에 902가 들어감을 알 수 있습니다. 이를 url로 전달해줍니다. pw=%25902%25 (%문자를 퍼센트 인코딩하면 %25 입니다)
[Lord of SQLInjection] giant write-up
문제의 소스 코드 입니다. from과 prob_giant 사이에 공백 문자를 넣어주면 됩니다. 구글링해서 공백 문자를 우회하는 친구들을 찾아줍니다. 위 사진은 아래 사이트에서 가져왔습니다. https://devdori.tistory.com/39 [SQL Injection] 공백 우회방법 (WHITE SPACE) SQL Injection 공격시 공백 문자 필터링 우회 방법 줄바꿈 (Line Feed) [ \n ]: %0a 탭 (Tab) [ \t ]: %09 수직탭 (vertical tab) [ \v ] : %0b 폼피드 (form feed) [ \f ] : %0c 캐리지 리턴 (Carriage Return) [.. devdori.tistory.com 해당 값을 순차적으로 넣다보면 문제가 풀립니다.