본문 바로가기
728x90

It28

Lord of SQL Injection 10단계 (skeleton) 이번에 처지할 몬스터는 skeleton! 코드를 보면 쿼리문 뒤에 and 1=0이라는 거짓(False) 값이 되게 만드는 쿼리문이 추가되었다. 그리고 id=admin을 입력하고 뒤에 and는 주석처리를 하면 문제가 풀리는 것 같길래 지난 문제들과 같이 ?pw=' or id='admin'%23을 입력했더니 엥 진짜 풀렸다.. 비슷한 문제들을 풀다 보니 문제가 쉽게 쉽게 풀리는데 이게 어색하다.... 너무 쉽게 풀려서 당황스럽지만 뿌듯하니까 다음 몬스터 잡으러 가자~! 2023. 3. 13.
Lord of SQL Injection 9단계 (vampire) 이번에 처치할 몬스터는 vampire! 코드를 빠르게 봐보자 이번 코드에서 중요한것은 strtolower과 str_replace 이다. 먼저 strtolower은 문자열을 소문자로 바꿔주는 역할을 한다. 이렇게 되면 우리가 지난 문제에 했던 Admin처럼 대문자를 섞어 우회하는 방법은 사용 할 수 없게 된다. (제작자가 밀당 고수다.) 그리고 str_replace는 총 3개의 인수를 받는데 (변경 대상 문자,변경하려는 문자,바꾸고자 하는 문자열) 이렇게 구성된다. 문제를 예를 들면 우리가 입력한 id값을 에서 admin을 찾아 공백(" ")으로 바꿔주는것 이다. (글자색을 참고하여 보면 이해가 쉬울것 같다.) 그렇게 되면 우리가 아무리 id값에 admin을 입력해도 공백으로 치환되어 입력되지 않는다. 이.. 2023. 3. 13.
Lord of SQL Injection 8단계 (troll) 이번에 처치할 몬스터는 troll! 갱생이 불가능한 제 왼손과는 다르게 이번 문제는 정말 쉽습니다. 이번 문제는 preg_match를 이용하여 admin을 필터링하고 id만 admin으로 입력하기만 하면 된다. preg_match 정규식에 i를 안 썼다면 대소문자 구분 없이 막아주지 못하기 때문에 'Admin'이라고 쓰면 통과를 시켜준다. 굿굿! 다음 몬스터 잡으러 가자~! 2023. 3. 9.
Lord of SQL Injection 7단계 (orge) 이번에 처치할 몬스터는 orge! 진짜 점심만 먹으면 너무 졸리다... 코드를 봐보자 이문제를 보면 orc단계에서 했던 Blind SQL Injection형식의 문제인 것이 눈에 보였다. 대신 이번에는 or과 and가 필터링되어있다의 차이? or과 and 필터링은 쉽게 우회할 수 있으므로 이번 문제도 순조롭게 풀 수 있을 거 같다. 아 또한 이번에 알아낼 비밀번호는 admin의 비밀번호이다. 당연히 참인 결과를 넣었을 때 Hello guest가 출력되는 것을 알 수 있다. 이제 비밀번호의 길이를 알아보면 ' || length(pw)=1%23부터 차근차근 넣어보면 길이가 8인걸 알아냈으니 이제 각 자리를 알아볼 차례다. substr() 함수를 이용하여 하다 보면! 굿굿! 다음 몬스터 잡으러 가자~! 2023. 3. 9.
Lord of SQL Injection 6단계 (darkelf) 이번에 처치할 몬스터는 darkelf! 코드를 봐보장~ 이제는 이전 문제들과 차이점이 빠르게 보인다. 이번 문제에서는 or과 and가 필터링되어 있는 것을 알 수 있다. 이번 필터링 우회는 엄청 간단한데 우리가 평소 C를 다룰 때 논리연사자로 자주 사용했던 &&(and), ||(or)이 우회방법이다. 우리가 해야 할 것은 or 대신 ||을 사용하면 되므로 ?pw=' || id='admin'을 입력하면 쉽게 풀 수 있다. 처음에는 문제를 보면 어떻게 해야 할지 막막했는데 이제는 혼자 힘으로 푸는 경험도 생기니까 점점 푸는 맛도 있고 뿌듯하다 ㅎㅎ 2023. 3. 9.
Lord of SQL Injection 5단계 (wolfman) 이번에 처지할 몬스터는 wolfman! 점심 먹고 하려니 점점 눈이 감긴다... 암튼 이번 코드를 봐보자. 싱글쿼터('), 더블쿼터(") 필터링은 안되어 있고 이번에는 이전과는 다르게 공백(space)이 필터링되어 있는 것을 알 수 있다. 공백이 필터링 되어 생기는 문제는 or 이나 and를 쓸때 양쪽에 공백을 넣어야 하기 때문에 공백이 필터링될 시 우회가 필요하다. 공백에 대한 우회 방법은 1. 개행 문자 \n - 커서를 다음 줄로 이동시키는 개행문자 (url 인코딩 : %0a) 2. TAB \t - 커서를 탭 하나만큼 이동시키는 문자 (url 인코딩 : %09) 3. 캐럿 return \r - 커서를 줄의 맨 왼쪽으로 이동시키는 문자 (url 인코딩 : %0d) 4. 괄호 () - 띄어쓰기 대신 띄어.. 2023. 3. 8.
Lord of SQL Injection 4단계 (orc) 이번에 처지할 몬스터는 orc! 일단 코드를 봐보면 전 문제와 다른 게 싱글쿼터('), 더블쿼터(") 필터링이 사라지고 admin 아이디의 pw를 알아내는 문제 같다. 일단 pw 부분을 한번 ' or 1=1 #을 이용해 한번 참으로 만들어 보았다. 그 결과 Hello admin 알림이 나왔다. 이 상황으로 보아 옛날에 DVWA에서 풀었던 Blind SQL Injection 문제가 생각났다. Blind SQL Injection 이란 쿼리의 결과를 참, 거짓으로만 출력되는 페이지에서 시행하는 공격으로 참, 거짓만 출력되므로 이를 이용해 데이터베이스 내용을 추측해야 된다. 방금 확인했던 것처럼 참일 경우 Hello admin이 출력된다. 그러면 pw를 알아내기 위해서 일단 pw의 길이부터 알아내보자. 1부터 .. 2023. 3. 8.
Lord of SQL Injection 3단계 (goblin) 이번에 처지할 몬스터는 goblin! 코오드를~ 봐아볼까아~ 이번 문제는 싱글쿼터('), 더블쿼터(")가 필터링된 것을 알 수 있다. id=admin이 되어야 되는데 id값이 guest로 고정되어 있는 것을 알 수 있다. 처음에는 id값을 바꿔보려 시도를 했는데 아무리 해도 바꾸는 법을 찾지 못했다. 생각해 보니 id와 no 값이 and로 연결되어 있으니까 no값이 거짓(False)이 되면 id = guest도 거짓으로 출력될 것이다. no = 2를 넣었는데 Hello guest가 출력 안되는 거 보니 no값이 2는 아닌 것을 알 수 있고 그러면 뒤에 or id='admin'을 넣어 id='admin'부분을 참으로 만들어 주면 되는데 싱글쿼터(')가 필터링되어 있으므로 url인코딩을 이용하여 %27로 시.. 2023. 3. 8.
728x90