본문 바로가기

sql

(19)
Lord of SQLInjection Succubus 풀이 이젠 대충 감이 온다. single quote(')와 다른 데이터베이스로 넘어갈 수 없도록 기본적인 쿼리 보호만을 걸어둔 것을 알 수 있다. 또한, id값과 pw값을 한 쿼리 안에서 모두 해결하기 때문에 이번 문제는 더욱 쉬웠다. backslash(\)로 id 쿼리에 있는 single quote(')를 문자열로 인식하도록 만들어주면 해당 쿼리는 ' and pw='' 를 id에 해당하는 값으로 인식하게 됨을 알 수 있다. 이를 활용한다면 id 뒷 부분의 single quote(')를 문자열로 처리하도록 만들고, pw에 있는 single quote(')가 닫아주게 된다. 따라서 pw 앞에 있는 ' 가 앞의 구문을 닫아주기 때문에 뒤에 있는 ' 만 %23(#)을 통해 주석 처리해주면 됨을 알 수 있다. 그럼 ..
Lord of SQLInjection Assasin 풀이 이번 문제를 처음 딱 봤을 때 "엥.. 필터링 되는게 왜 하나밖에 없지?"라는 생각을 하게 되었다. 적어도 가장 중요한 single quote(')가 막힌걸 보기 전까지는... 이제 사용할 수 있는 구문은 mysql 구문중 like와 %를 사용하는 구문 뿐이었다. 그렇게 문자열과 알파벳의 뒤에 %25(URL Decode : %)를 붙여 pw값으로 계속 전달하다보니 9에서 위와 같이 Hello guest가 나왔다. 이로 guest 계정의 비밀번호는 9로 시작된다는 것을 알 수 있게 되었다. 이렇게 계속 하면 Hello admin도 볼 수 있을 것 같았다. 하지만... admin 계정과 guest 계정 모두 9로 시작했던지라 그 어떤 값을 입력해도 Hello admin을 볼 수 없었다. 그렇게 계속 진행했으..
Lord of SQLInjection Giant 풀이 이번 문제는 띄어쓰기와 같은 역할을 수행하는 키를 넣으면 풀 수 있는 문제인 것으로 추정된다. 이번 문제는 최대 1글자만 넣을 수 있는 것 같다. 따라서 위 정규식을 보고 다음과 같이 한 글자로 넣을 수 있는 키 중에 사용할 수 없는 키의 목록을 먼저 알아내야 한다. 차단되는 키 사유 %0D \r %0A \n %09 \t %20 Space( ) 위와 같이 표를 만들게 되면 사용할 수 있는 키가 %0B임을 알 수 있고, 이를 적용하여 /?shit=%0b 를 URL 뒤에 붙여주게 되면 문제가 풀린다.
Lord of SQLInjection BUGBEAR 풀이 오랜만에 SQL Injection을 잡으니 푸는데 생각보다 시간이 오래 걸렸던 것 같다. 역시... 컴퓨터는... 놓으면 바로 잊는... 망각의 기술... ㅠㅠㅠ 문제를 보면 아래와 같이 pw값과 no 값을 받는 것을 확인할 수 있다. 이 때 보면 pw는 single quote(')를 막고 있기 때문에 힘들고, 비교적 필터링이 덜한 no를 공격하면 될 것으로 예상할 수 있다. 그럼 이제 쿼리를 만들기 위해 필터링된 문자와 대체할 수 있는 문자를 알아보면 다음과 같습니다. 필터링되는 단어 치환 single quote(') double quote(") substr mid space( ) %09(tab space) like in or || and && 위 치환 테이블을 코드에 적용하면 다음과 같습니다. 더보기..
Lord of SQLInjection Darkknight 풀이 이번에는 대놓고 no를 통해 침투해달라고 코드에 나와있다. 이번에는 다음과 같이 치환하였다. 필터링되는 단어 치환 작은 따옴표(') 0x로 시작하는 Hex값 substr mid ascii 사용 안함 = like 위 치환 테이블을 코드에 적용하였다. ...더보기 import requests import binascii URL = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php" Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'} ConfirmKey = "Hello admin" Dict = '0123456789qwertyuiopasdfghjklzxcvbnm' length = 0 p..
Lord of SQLInjection Golem 풀이 admin으로 로그인해야하는데 기존에 사용하던 substr, = 등의 연산자 또는 함수들을 필터링하는 코드들이 추가됐음을 확인할 수 있었다. 하지만 substr는 mid로, =는 like로, 비슷한 기능을 하는 대체제를 사용할 수 있었다. 필터링되는 단어 대체제 substr() mid() = like or || and && Orc 문제에서 사용한 코드를 기반하여 위 테이블과 같이 치환하여 다음과 같은 코드를 완성할 수 있었다. ...더보기 import requests URL = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php" Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'} Conf..
Lord of SQLInjection Skeleton 풀이 admin으로 로그인해야하는데 1=0이라는 조건때문에 무슨값을 입력해도 무조건 false라는 결과가 나오도록 되어있다. 하지만 pw값이 저 조건의 앞에 들어가니 만사 OK~ pw에 값을 넣지 않고 id를 admin으로 만들어주는 값(' or id='admin' -- ')을 삽입하여 풀어주면 풀린다.
Lord of SQLInjection Vampire 풀이 뭐 당연히 admin으로 로그인해야한다. 하지만 입력값을 모두 소문자로 바꾸고 admin을 없애는 코드가 있다. 하지만 저것쯤이야 adadminmin처럼 써주면 우회가 가능하다. Clear~