보안공부 (92) 썸네일형 리스트형 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을 볼 수 없었다. 그렇게 계속 진행했으나, .. wargame.kr strcmp 풀이 strcmp 문제를 풀어봅시당Start를 누르고 문제에 들어가면 다음과 같이 form과 소스코드를 확인할 수 있는 view-source가 있습니다.view-source를 눌러 코드를 보니 POST로 받은 password가 사전 정의된 password와 같으면 플래그를 출력하지만, 이외의 경우에는 Wrong password..를 띄우고 끝납니다.근데... 마지막 값 비교가 ==로 매우 수상합니다.==를 활용하여 NULL과 0을 느슨한 비교할 경우에는 다음 표와 같이 True가 반환되게 됩니다.따라서 우리는 password 값을 읽을 수 없도록 해주면 되는데, 이를 위해서 name의 password 부분을 password[]로 변경하고 보내줍니다.그러면 다음과 같이 플래그가 출력되게 됩니다.Reference.. Lord of SQLInjection Succubus 풀이 이젠 대충 감이 온다.single quote(')와 다른 데이터베이스로 넘어갈 수 없도록 기본적인 쿼리 보호만을 걸어둔 것을 알 수 있다. 또한, id값과 pw값을 한 쿼리 안에서 모두 해결하기 때문에 이번 문제는 더욱 쉬웠다.backslash(\)로 id 쿼리에 있는 single quote(')를 문자열로 인식하도록 만들어주면 해당 쿼리는 ' and pw='' 를 id에 해당하는 값으로 인식하게 됨을 알 수 있다. 이를 활용한다면 id 뒷 부분의 single quote(')를 문자열로 처리하도록 만들고, pw에 있는 single quote(')가 닫아주게 된다.따라서 pw 앞에 있는 ' 가 앞의 구문을 닫아주기 때문에 뒤에 있는 ' 만 %23(#)을 통해 주석 처리해주면 됨을 알 수 있다. 그럼 첫 번.. Webhacking.kr old-07 풀이 이번에는 webhacking.kr의 old-07 문제를 풀어보려고 한다. 문제에 들어가면 다음과 같이 Admin page라는 말과 함께 auth 버튼, 그리고 가장 중요한 소스 코드를 볼 수 있는 view-source 하이퍼링크가 있다. view-source를 눌러 코드를 둘러보자."); }echo("Admin page");if(preg_match("/2|-|\+|from|_|=|\\s|\*|\//i",$go)) exit("Access Denied!");$db = dbconnect();$rand=rand(1,5);if($rand==1){ $result=mysqli_query($db,"select lv from chall7 where lv=($go)") or die("nice try!");}if($ran.. 이전 1 2 3 4 5 ··· 12 다음