본문 바로가기
반응형

워게임/LOS20

[los - SQL injection] dragon ( 20단계 ) [los - SQL injection] dragon ( 20단계 ) [ 풀이과정 ] dragon에서는 소스를 보면 알수 있듯이 이미 문제 시작부터 id 뒷쪽에 주석이 붙어있다. pw만을 가지고 문제를 풀어야하는데 그러기 위해서는 앞에 있는 주석을 무력화 시켜야한다.. 어떻게 하면 저 주석을 무력화 시킬수 있을까 생각하다가 저 주석이 한줄짜리 주석이라는걸 생각해서 pw에 싱글쿼터로 닫아준후에 %0a를 이용해서 LF 문자를 이용해 줄바꿈을 하고 그 이후에 && 1=2라는 거짓 식을 추가해줬더니 Hello guest라고 출력 되있던 부분이 없어진걸 확인했다.. 이 결과로 보아서 해당 SQL injection은 먹혔다고 판단을 했고 바로 %0a 문자를 이용해서 admin을 조회하는 쿼리를 작성했다. select.. 2017. 9. 24.
[los - SQL injection] xavis ( 19단계 ) [los - SQL injection] xavis ( 19단계 ) - ascii -> ord() 사용 - 유니코드를 사용 [ 풀이과정 ] xavis 문제는 pw가 아스키코드 문자에서 하나도 나오지 않아서 시간이 많이 걸렸던 문제이다... 이때까지 아스키코드로만 잘 풀다가 나오지 않아서 고생 좀 했다..pw가 영문과 숫자가 아니라는게 되니 이것저것 생각하면서 찾아보다가 아스키코드 확장 문자를 찾게 되었다. 아래 있는게 아스키코드 확장표이고 128~255까지 사람이 읽지 못하는 문자이다.. select id from prob_xavis where id='admin' and pw='' or id='admin' and length(pw)=40 #'을 이용해서 pw의 길이가 40인걸 알아냈다..그리고나서 전에 만.. 2017. 9. 24.
[los - SQL injection] nightmare ( 18단계 ) [los - SQL injection] nightmare ( 18단계 ) - pw=(' ')=0 - 주석문자 대체: #, - -> ;%00 ! mysql에서 '1234'=1234 같은걸로 처리한다. [ 풀이과정 ] nightmare는 if($result['id']) 조건이 만족되면 문제가 풀리게 된다.여기서는 pw에 들어가는 입력값이 prob _ . ( ) # - 문자가 preg_match() 함수로 인해서 필터링이 된다.그리고 pw의 길이는 6을 넘으면 안되는 제약 또한 있다...그렇다면 6개의 문자만을 이용해서 이 문제를 풀어내야한다. SQL에서는 pw=('')=0과 같은 쿼리를 허용해준다.이 특성을 잘 이용해보면 문제가 풀리는 방법이 보인다. 주석 문자가 막힌 부분은 ;%00으로 해결을 할수가 있다.. 2017. 9. 24.
[los - SQL injection] succubus ( 17단계 ) [los - SQL injection] succubus ( 17단계 ) [ 풀이과정 ] succubus는 id와 pw 모두 싱글쿼터가 preg_match() 함수로 필터링이 되어있어 싱글쿼터를 우회할 방법은 없다..하지만 SQL 쿼리를 보면 id와 pw 둘다 입력이 가능한데 이러한 점을 이용해서 앞쪽 입력에 '\' 문자를 이용해서id의 뒷쪽 싱글쿼터를 문자로 만들어주면 id='\' and pw='' 부분이 문자가 된다.그리고 pw에 ' or 1=1 #'과 같은 참의 식을 하나 만들어주면 $result['id']안에 조회된 id 값이 들어가므로 succubus 문제가 풀리게 된다. 이번 문제는 SQL의 기본적인 특징과 센스가 있어야 했던 문제였던 것 같다... 17단계 클리어~~~~~ 2017. 9. 24.
[los - SQL injection] zombie_assasin ( 16단계 ) [los - SQL injection] zombie_assasin ( 16단계 ) [ 풀이과정 ] ereg함수의 취약점을 이용했는데 해당 함수는 NULL(%00) 문자를 만나게 되면 더이상 뒤에 문자를 점검하지 않는 특성이 있다. 해당 id값에 %00(NULL)문자를 먼저 넣어주면 이후는 필터링을 하지 않기 때문에싱글쿼터의 사용이 가능해진다.. 그래서 php는 ereg() 함수 대신에 preg_match() 함수를 사용하고 해당 함수는 아직까지는 취약점이 나오지 않은걸로 알고 있다.. 그걸 이용해서 select id from prob_zombie_assassin where id='%00' or 1=1 #' and pw='' 와 같이 쿼리를 작성하게 되면 문제가 풀린다.여기서는 ereg 함수의 취약점을 알.. 2017. 9. 24.
[los - SQL injection] assasin ( 15단계 ) [los - SQL injection] assasin ( 15단계 ) [ 풀이과정 ] like가 이미 써져있기때문에 like의 특성인 '%'를 이용해서 앞에서부터 차례대로 admin의 pw를 찾으면 된다.8%라고 입력했을때 Hello guest가 나오므로 우선순위상 admin 위에 있는것 같다.하나씩 차례대로 찾아보다 보니 832%에서 admin을 찾을수 있었다. SQL 쿼리에서 like의 특성만 잘 알고있다면 쉽게 해결할 수 있는 문제이다. 15단계 클리어~~~ 2017. 9. 24.
[los - SQL injection] giant ( 14단계 ) [los - SQL injection] giant ( 14단계 ) [ 풀이과정 ] - whitespace: 공백, 엔터, 탭 giant에서 제대로 된 whitespace 필터링이 되어있는데 공백, 엔터, 탭을 모두 필터링 해버리는걸 whitespace라고 한다.이 문제에서는 길이가 1이 넘어가면 안되기 때문에 한문자만 가지고 이 문제를 풀어야한다. whitespace를 우회하는 문자로는 %0d, %09, (), /**/, %0a, %0b, %0c, ...이 있는데여기서는 %0b라는 수직탭 문자를 이용해서 문제를 풀었다...수직탭은 일반 탭처럼 수평이 아닌 수직으로 동작한다.. 하지만 실행을 해보면 줄바꿈과 같이 한줄이 바뀌는걸 확인 할 수 있다.. %0b가 필터링 되있는 경우도 있을테니 어떤 문자가 사용.. 2017. 9. 24.
[los - SQL injection] bugbear ( 13단계 ) [los - SQL injection] bugbear ( 13단계 ) bugbear 문제 필터링 - no는 substr, ', ascii, =, or, and, ' ', like, 0x 필터링 - pw는 싱글쿼터 [ 풀이과정 ] bugbear는 if(($result['pw'] && ($result['pw'] == $_GET['pw'])) 조건을 만족하면 풀리게 된다.그러므로 여기서도 pw를 찾아서 직접 넣어줘야 해당 문제가 풀린다.. select id from prob_bugbear where id='guest' and pw='' and no=1 || unhex(hex(char(49,61,49)))식을 이용해서 참/거짓을 확인하는데 여기서는 unhex(), hex(), char()를 사용해서 1=1이라는.. 2017. 9. 24.