write-up(web)/LOS
[Lord of SQLInjection] dragon write-up
문제의 소스 코드입니다. id='guest' 뒤에 주석처리가 되어있습니다. id가 admin이 되면 문제가 풀립니다. mysql에서 #문자는 한 줄 주석 처리 문자입니다. 따라서 개행을 시켜주면 주석의 영향을 받지 않습니다. url에서 개행에는 %0a가 사용됩니다. mysql에서 세미콜론을 만나기 전까진 한 문장이 종료되지 않으므로 이어서 작성할 수 있습니다. mysql_fetch_array 함수는 한 행만 가져오므로 앞에 있는 guest에 대한 조건은 false로 만들어 주어야 합니다. 즉 and pw='' or id='admin'을 추가로 넣어주면 됩니다. 먼저 '문자로 pw를 닫아준 후 %0a로 개행합니다. 이후 and pw=''으로 id='guest'라는 조건을 false로 만든 뒤 or id='..
[Lord of SQLInjection] xavis write-up
문제의 소스 코드입니다. admin의 pw를 구하면 문제가 풀립니다. 이것 저것 해보다 알게 된 것이 멀티바이트 문자열이구나~ 였습니다. _ 문자를 쓸 수 없으므로 char_length와 bit_length 함수를 사용할 수 없습니다. 그래서 하나씩 넣어보면서 bit 길이를 찾아봐야 합니다. 먼저 pw의 length를 구해주면 12가 나옵니다. 각 문자의 bit length를 구하면 3번째 문자까진 16비트이고 나머지는 1비트입니다. 여기서 "아~ pw는 2바이트 3문자와 널 문자 9개로 이루어져 있구나"를 알 수 있습니다. 이제 이진 탐색으로 문자 3개를 찾아주면 됩니다. 0~65535(2^16)사이 범위 중 ord 함수로 구해준 각 문자의 ascii값이 뭔지 구해줍니다. 구해준 값을 pw에 넣어주면 ..
[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"을 입력하면 문제가 풀립니다.