본문 바로가기
728x90

워게임22

Lord of SQL Injection 25단계 (green dragon) 이번에 처치할 몬스터는 green dragon! 코드를 보면 이번엔 되게 특이한 문제다. 첫 번째 쿼리에서 id와 pw를 받고 id가 있으면 두 번째 쿼리가 작동되는 형식이다. 일단 싱글쿼터('), 더블쿼터(")가 필터링 되어 있고 첫 번째 쿼리를 보면 예전에 싱글쿼터 필터링을 우회했던 문제가 생각날 것이다. https://jh-hack.tistory.com/33?category=1091406 Lord of SQL Injection 16단계 (succubus) 이번에 처치할 몬스터는 succubus! 이번 코드를 보면 id와 pw인자를 받고 싱글쿼터(')는 둘 다 필터링되어 있다. 이걸 보고 딱 떠올린게 지난 문제에서 싱글쿼터(')가 필터링되어 있던 문제가 있어 우 jh-hack.tistory.com 그.. 2023. 4. 14.
Lord of SQL Injection 24단계 (evil wizard) 이번에 처치할 몬스터는 evil wizard! 코드를 보면 이전 문제랑 코드상으로 별 다를 게 없어 보인다. 주석으로도 "마 진짜 같나? 진심이가?"라고 쓰여있는 거 보면 뭔가 다르긴 다른가보다. 그래서 테이블을 출력해 봤는데 이전문제와 다르게 id와 score 어떤 걸 기준으로 정렬해도 같은 결과가 나온다. 이번 문제는 꽤 쉬웠는데 그냥 id나 score 중 하나 기준을 정하고 오름차순 내림차순으로 차이를 주면 된다. 다들 ASC와 DESC를 들어봤을 거다 ASC가 오름차순 DESC가 내림차순이다. ?order=if(조건문,'id ASC', 'id DESC')를 써서 참일 때는 id를 기준으로 오름차순 거짓일때는 내림차순으로 테이블을 출력하면 된다. 그럼 참일때는 위에 사진처럼 출력될 테니 admin*.. 2023. 4. 12.
Lord of SQL Injection 23단계 (hell_fire) 이번에 처치할 몬스터는 hell_fire! 코드를 봐보면 위에 처음 보이는 테이블이 나와있고 union은 막혀있다. 이 문제는 admin의 email값을 알아내는 문제 같다. 또한, order를 인자로 받고 있는데 여기서 order by란 데이터들을 출력할 때 어떻게 정렬할지 정하는 문법이다. 예를 들어 order by id를 하면 id를 기준으로 내림차순으로 정렬된다. order by score를 하면 score를 기준으로 내림차순으로 정렬된다. 이처럼 서로 다른 결과를 보여주는 테이블이 있으니 이를 이용하여 blind sql injection을 하면 될 것 같다. if문을 이용하여 if(조건문, 'id', 'score') 형식으로 참일 때는 id를 기준으로 거짓일 때는 score를 기준으로 정렬되게 .. 2023. 4. 11.
Lord of SQL Injection 22단계 (dark_eyes) 이번에 처치할 몬스터는 dark_eyes! 코드를 봐보면 이전 문제에서 사용했던 if문과 case, when 등 조건문들이 추가로 필터링되어 있다. if문이 필터링 되어 있으므로 저번 문제처럼 조건을 걸어 union문을 실행시키는 것은 불가능하게 되었다. 또한 에러메세시도 사라져 아무 메세지도 출력되지 않게 되어있다. 조건문 필터링우회법이 있을지 검색해봤는데 이 문제에서는 우리가 사용했던 union의 성질을 이용하면 된다. union은 select문 두 개의 합쳐진 결과를 출력하는데 위 사진이 정상적으로 실행되는 이유는 select 1 union select 1 은 둘 다 1을 출력하기 때문에 결과값 출력수가 1로 하나이기 때문이다. 이를 이용하여 select 1 union select length(pw.. 2023. 4. 10.
Lord of SQL Injection 21단계 (iron golem) 이번에 처치할 몬스터는 iron golem! 코드를 보면 필터링에 sleep, benchmark가 추가되었다. 처음에는 이걸 왜 필터링하였는지 몰라 검색해 봤더니 time base sql injection에 사용된다고 한다. (select * from table sleep(2) 이 쿼리문이 성공하면 2초 기다렸다가 결과가 반환된다. 실패하면 바로 반환되는 점을 이용한 blind sql injection이다.) 그다음 주의 깊게 볼 코드는 if(mysql_erroe($db) exit(mysql_error($db)); 이 부분이다. sql문에 에러가 생길 시 에러메시지를 출력하는 것인데 우리가 지난 문제들을 풀 때는 hello admin! 같이 참일 때 알림이 출력되었지만 이번 문제에서는 아무런 메시지도 출.. 2023. 4. 5.
Lord of SQL Injection 20단계 (dragon) 이번에 처치할 몬스터는 dragon! 코드를 보면 딱히 신경 쓸 필터링은 없고 id가 admin이면 문제가 풀리는 것 같다고 했는데 위에 쿼리문을 보니 id 파라미터 다음에 #으로 주석처리가 되어 있었다. 일단 없던 주석이 생겼으니까 주석을 어떻게 하냐가 관건인데 기억나실지 모르겠지만 18단계에서 주석에 대해 다뤄볼 때 --, # 이 두 가지는 한 줄만 주석으로 처리한다는 특징이 있었다. 그러므로 pw부분을 개행문자 \n을 이용하여 줄 바꿈을 해주면 주석으로 처리가 안되지 않을까? 바로 실행해 봤다. ?pw=%0a and 1=0 or id='admin'%23(\n url인코딩=%0a)으로 앞에 ud='guest' 부분을 거짓으로 만들고 admin을 참으로 넣었다. 굿굿 내가 생각한 대로 바로 문제가 풀린.. 2023. 3. 31.
Lord of SQL Injection 19단계 (xavis) 이번에 처치할 몬스터는 xavis! 이번 코드를 보면 처음에 보고 의심할 정도로 신경 쓸 만한 필터링이 없었다. 쿼리도 잘 들어가고 문제 유형을 보면 지금까지 풀었던 blind sql injection이랑 다를 게 없어 보여서 평소와 같이 pw의 길이를 알아보려고 당연하게 8을 입력해 봤는데 평소대로 하나하나 입력해서 길이를 찾을까 하다가 슬슬 손가락도 귀찮아져서 파이썬 코드를 써서 알아보기로 했다. 되게 길어질 줄 알았는데 12밖에 안되네..? 어차피 파이썬 코드 쓴 거 비밀번호도 빠르게 추가해서 알아보려 했는데 어라...? pw값들이 나오질 않고 있다. 파이썬 코드로 돌리는 건데 이렇게 느릴 리가 없는데... 처음엔 코드 문젠줄 알고 계속 보다가 도저히 답이 안 나와서 구글에 검색해 보니까 비밀번호가.. 2023. 3. 30.
Lord of SQL Injection 18단계 (nightmare) 이번에 처치할 몬스터는 nightmare! 이번 문제 코드를 보면 이번에는 지금까지 썼던 주석 #이 필터링 되어 있는것이 보인다. 또한 pw의 길이가 6까지 제한되어 있다. 흠흠... 일단 주석에 대해 알아보자. 주석은 4가지 방법이 있는데 1. -- - 뒤에 반드시 공백이 있어야 정상적으로 주석 처리가 된다. - 한 줄만 주석 처리한다. 2. # (url encoding - %23) - 뒤에 공백이 없어도 정상적으로 처리된다. - 한 줄만 주석 처리한다. 3. /* */ - /* */ 사이에 입력시 주석 처리 된다. 4. ;%00 - Null 문자인 %00과 ;이 결합된 주석 처리 문자이다. 이 문제에서 #,-,/ 가 필터링 되었으므로 우리가 사용할 수 있는 주석은 4번이다. 그럼 일단 pw부분을 참으.. 2023. 3. 29.
Lord of SQL Injection 17단계 (zombie assassin) 이번에 처치할 몬스터는 zomble assassin! 코드를 보면 저번 문제와 쿼리문 양식은 같은데 id와 pw를 받는 방법이 다른 것을 볼 수 있다. 두 개의 함수로 받고 있는데 strrev와 addslashes이다. addslashes 함수는 데이터베이스의 질의에서 처리할 필요가 있는 문자(싱글쿼터, 더블쿼터, 역슬래쉬, Null Byte) 앞에 백슬래시(\)를 붙여 문자열로 반환한다. 예를 들어 I'm Jhon 이라는 쿼리를 전송하면 싱글쿼터가 포함되어 있어 쿼리문에 오류가 발생할 수 있다. 이를 방지하기 위해 I\'m Jhon으로 쿼리문을 바꿔준다. (백슬래쉬 뒤에 특수문자는 문자로 취급한다는 것은 이전 문제에서 다뤘다.) strrev 함수는 받은 문자열의 순서를 반대로 바꿔준다. 예를 들어 ap.. 2023. 3. 28.
Lord of SQL Injection 16단계 (succubus) 이번에 처치할 몬스터는 succubus! 이번 코드를 보면 id와 pw인자를 받고 싱글쿼터(')는 둘 다 필터링되어 있다. 이걸 보고 딱 떠올린게 지난 문제에서 싱글쿼터(')가 필터링되어 있던 문제가 있어 우회법을 알아본 게 기억이 났다. 이번에 쓸 우회법은 지금처럼 인자 두개를 받는 특수한 경우에만 쓸 수 있다. 역슬래쉬(\) 뒤에 싱글쿼터(')가 있는 경우 싱글쿼터는 문자 취급을 받는다. 즉, ?id=\&pw=or id="admin"%23을 입력하면 id='\' and pw=' or id="admin"#'가 출력되는데 id='\' and pw=' or id="admin"#' 여기서 \'가 문자로 취급되기 때문에 빨간 부분이 id값으로 들어가게 되고 뒤에 id값을 넣어줘 참을 만들어 주면 문제가 풀릴것.. 2023. 3. 28.
728x90