본문 바로가기

보안공부

(87)
wargame.kr strcmp 풀이 strcmp 문제를 풀어봅시당 Start를 누르고 문제에 들어가면 다음과 같이 form과 소스코드를 확인할 수 있는 view-source가 있습니다. view-source를 눌러 코드를 보니 POST로 받은 password가 사전 정의된 password와 같으면 플래그를 출력하지만, 이외의 경우에는 Wrong password..를 띄우고 끝납니다. 근데... 마지막 값 비교가 ==로 매우 수상합니다. ==를 활용하여 NULL과 0을 느슨한 비교할 경우에는 다음 표와 같이 True가 반환되게 됩니다. 따라서 우리는 password 값을 읽을 수 없도록 해주면 되는데, 이를 위해서 name의 password 부분을 password[]로 변경하고 보내줍니다. 그러면 다음과 같이 플래그가 출력되게 됩니다. Re..
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~
Lord of SQLInjection Troll 풀이 코드를 한번 훑어보았다. admin으로 로그인되면 되지만 admin이 필터링되어 입력할 수 없다. 하지만 여기서 preg_match 정규식에 /i가 없는것이 눈에 띄었다. PHP상에서 대소문자 구별을 안하고, SQL은 원래 대소문자 구별을 안하니 대문자가 포함되어 있으면 문제를 풀 수 있다는 가정을 할 수 있다. 따라서 a 한글자만 대문자로 바꿔 입력해보았더니 풀렸다.
Lord of SQLInjection Orge 풀이 문제의 목표 자체는 Darkelf 문제와 같으나, 이번에는 비밀번호가 admin의 비밀번호와 같아야 한다. 비밀번호를 받아오는 로직(글자수 체크 -> 한자리 한자리 비교하여 비밀번호 추출)이 같으므로 뭔가 Orc 문제에서 사용했던 코드를 재활용할 수 있을것 같다는 생각이 들었다. 그래서 주소와 OR, 그리고 AND만을 변경하였다. OR -> || AND -> && 이렇게 코드를 동작했더니 예상대로 비밀번호를 추출하는데 성공했다. 이 비밀번호로 인증하니 풀렸다.
Lord of SQLInjection Darkelf 풀이 뭐 이젠 당연하다. admin으로 로그인하는것이다. pw에 SQL 구문을 삽입해야한다. 하지만 or과 and가 필터링되어 포함되어 있으면 HeHe가 뜨는 페이지로 이동하게 된다. 하지만 SQL은 or은 || 와 같고, and는 && 와 같이 동작할 수 있으므로 이를 활용하여 구문을 작성하면 ' || id='admin' -- '가 된다. 가볍게 Clear~