본문 바로가기

보안공부/Lord of SQLInjection 풀이

(16)
Lord of SQLInjection Golem 풀이 admin으로 로그인해야하는데 기존에 사용하던 substr, = 등의 연산자 또는 함수들을 필터링하는 코드들이 추가됐음을 확인할 수 있었다. 하지만 substr는 mid로, =는 like로, 비슷한 기능을 하는 대체제를 사용할 수 있었다.필터링되는 단어대체제substr()mid()=likeor||and&& Orc 문제에서 사용한 코드를 기반하여 위 테이블과 같이 치환하여 다음과 같은 코드를 완성할 수 있었다.더보기import requestsURL = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php"Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'}ConfirmKey = "Hello ad..
Lord of SQLInjection Darkknight 풀이 이번에는 대놓고 no를 통해 침투해달라고 코드에 나와있다. 이번에는 다음과 같이 치환하였다.필터링되는 단어치환 작은 따옴표(')0x로 시작하는 Hex값substrmidascii사용 안함=like 위 치환 테이블을 코드에 적용하였다.더보기import requestsimport binasciiURL = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php"Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'}ConfirmKey = "Hello admin"Dict = '0123456789qwertyuiopasdfghjklzxcvbnm'length = 0password = ""def sendR..
Lord of SQLInjection BUGBEAR 풀이 오랜만에 SQL Injection을 잡으니 푸는데 생각보다 시간이 오래 걸렸던 것 같다.역시... 컴퓨터는... 놓으면 바로 잊는... 망각의 기술... ㅠㅠㅠ 문제를 보면 아래와 같이 pw값과 no 값을 받는 것을 확인할 수 있다.이 때 보면 pw는 single quote(')를 막고 있기 때문에 힘들고, 비교적 필터링이 덜한 no를 공격하면 될 것으로 예상할 수 있다. 그럼 이제 쿼리를 만들기 위해 필터링된 문자와 대체할 수 있는 문자를 알아보면 다음과 같습니다.필터링되는 단어치환single quote(')double quote(")substrmidspace( )%09(tab space)likeinor||and&& 위 치환 테이블을 코드에 적용하면 다음과 같습니다.더보기import requestsim..
Lord of SQLInjection Giant 풀이 이번 문제는 띄어쓰기와 같은 역할을 수행하는 키를 넣으면 풀 수 있는 문제인 것으로 추정된다. 이번 문제는 최대 1글자만 넣을 수 있는 것 같다.따라서 위 정규식을 보고 다음과 같이 한 글자로 넣을 수 있는 키 중에 사용할 수 없는 키의 목록을 먼저 알아내야 한다.차단되는 키사유%0D\r%0A\n%09\t%20Space( )위와 같이 표를 만들게 되면 사용할 수 있는 키가 %0B임을 알 수 있고, 이를 적용하여 /?shit=%0b 를 URL 뒤에 붙여주게 되면 문제가 풀린다.
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 Succubus 풀이 이젠 대충 감이 온다.single quote(')와 다른 데이터베이스로 넘어갈 수 없도록 기본적인 쿼리 보호만을 걸어둔 것을 알 수 있다. 또한, id값과 pw값을 한 쿼리 안에서 모두 해결하기 때문에 이번 문제는 더욱 쉬웠다.backslash(\)로 id 쿼리에 있는 single quote(')를 문자열로 인식하도록 만들어주면 해당 쿼리는 ' and pw='' 를 id에 해당하는 값으로 인식하게 됨을 알 수 있다. 이를 활용한다면 id 뒷 부분의 single quote(')를 문자열로 처리하도록 만들고, pw에 있는 single quote(')가 닫아주게 된다.따라서 pw 앞에 있는 ' 가 앞의 구문을 닫아주기 때문에 뒤에 있는 ' 만 %23(#)을 통해 주석 처리해주면 됨을 알 수 있다. 그럼 첫 번..
Lord of SQLInjection Cobolt 풀이 이유는 모르겠는데 gremlin 문제와 같은 풀이로 풀렸다.
Lord of SQLInjection Gremlin 풀이 코드를 보자.. id와 pw값을 입력하면 그 값이 포함된 SQL 쿼리문을 작성하고 실행하는 모양이다. GET을 통해 값을 입력받는 방식인지라 주소창을 통해 쉽게 값을 전달할 수 있었다. 우리는 admin 계정으로 로그인을 해야하므로 id는 admin으로 설정한다. 하지만 비밀번호는 모르므로 비밀번호에 대한 쿼리문에 명령어를 주석처리 해야했다. 그래서 매우 대중적인(표준적인) SQL 인젝션 구문을 삽입해보았다. 하지만 다음과 같이 새로운 작은따옴표(')가 붙는것을 확인하였다. 위 상황은 $_GET["ID"]부분에 있는 중괄호 때문인데, 이는 다른 따옴표를 추가로 삽입함으로써 우회할 수 있었다. 이제 우리가 원했던대로 작은 따옴표(')가 앞의 SQL 구문에 간섭하지 않게 되면서 and pw=''라는 구문이 ..