목록Wargame/LOS (23)
cgy12306
코드를 보면 GET으로 받아온 pw는 '(작은따옴표)가 필터링 되어 있다. mysql에서 like를 사용할 때 %를 사용할 수 있다. %는 문자열의 길이와 상관없이 모든 글자를 의미한다. 예를 들어 %A로 입력을 하면 맨 끝의 글자가 A가 있어야하는 조건이 되는것이다. %A%로 입력하게 되면, 해당 문자열에 A가 포함만 되어 있으면 된다는 조건이다. https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=% pw에 %를 집어넣었더니 Hello guest가 뜬다. 만약 guest와 admin의 비밀번호가 한 글자만이라도 겹치지 않는다면 %와 % 사이에 임의의 글자를 넣어주는 코드를 돌리면 Hello admin이 뜨지 않을까하고..
쿼리문 작성하는 부분을 보면 from과 prob_giant 사이에는 공백문자가 들어가야 한다. 하지만 GET으로 받아온 shit변수가 들어가게 된다. 또 shit변수는 공백과 개행문자, 탭문자를 필터링 해놨다. 그러면 우리는 VT(Vertical Tab), FF(From Feed)를 사용하면 된다. LF(Line Feed)는 개행이라 필터링이 된다. VT는 %0b, FF는 %0c이다. https://los.eagle-jump.org/giant_9e5c61fc7f0711c680a4bf2553ee60bb.php?shit=%0b https://los.eagle-jump.org/giant_9e5c61fc7f0711c680a4bf2553ee60bb.php?shit=%0c
pw에는 '(작은따옴표)가 필터링 되어 있고, no에는 substr, ascii, =, or, and, like, 0x, 공백이 필터링 되어 있다. 공백은 전에 했던 것 처럼 %09(tab)으로 우회가 가능하고 like는 in으로 우회가 가능하다. in을 사용할 때 값이 괄호()로 덮어줘야 하고 '(작은따옴표)나 "(큰따옴표)로 묶어줘야 한다. 우선 패스워드의 길이를 알아보자. https://los.eagle-jump.org/bugbear_431917ddc1dec75b4d65a23bd39689f8.php?pw=123&no=1%09||%09id%09in%09("admin")%26%26length(pw)%09
pw는 '(작은따옴표)가 필터링이 되어있고, no는 substr, ascii, = 이 필터링 되어있다. '(작은따옴표)는 "(큰따옴표)로 대체해서 사용 가능하다. pw는 '(작은따옴표)를 사용해서 sql injection을 사용해야 하지만 필터링 되어있어서 pw에는 아무런 값을 넣어주고 no는 mysql상에서 int를 사용한다. int는 '(작은따옴표)나 "(큰따옴표)를 사용하지 않는다. no에 아무런 값을 넣어주고 or 연산자로 앞에 있는 and 연산자로 무시하고 뒤에 =은 like로 우회해주면 된다. 그리고 '(작은따옴표) 대신 "(큰따옴표)를 사용한 후에 뒤를 #으로 주석처리 해주고, %20으로 공백을 넣어준다. https://los.eagle-jump.org/darkknight_f76e2eebfe..
소스코드를 보면 _ . ( ) 문자를 필터링하고, or and substr = 도 필터링을 한다. =는 like로 우회가 가능하다. 또 substr은 mid, left, rignt 함수로 우회가 가능하다. 우선 패스워드의 길이를 먼저 알아내 보자. https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php?pw=' %7c%7c id like 'admin' %26%26 length%28pw%29 like '8 위 처럼 입력을 하게 되면 Hello admin을 볼 수 있다. 비밀번호는 8글자이다. 우리는 참이면 Hello admin이 뜨는 것을 알 수 있으니 blind sql injection을 사용할 수 있다. import requests ..
pw로 인자를 받아오지만 select 쿼리문 뒤에 and 1=0이 있어서 pw가 정상적으로 들어가도 거짓으로 판단한다. 그러면 pw를 적어주고 뒤에 부분을 주석처리 하면 될듯하다. 주의할 점은 주석뒤에는 공백이 있어야 한다. --만 넣어주게 되면 '(작은따옴표)랑 바로 붙어서 --' 라는 문자가 완성 된다. 또한, URL 맨 뒤에 공백(스페이스바)을 넣어도 무시하기 때문에 %20으로 넣어주면 된다. https://los.eagle-jump.org/skeleton_8d9cbfe1efbd44cfbbdc63fa605e5f1b.php?pw=' or id='admin'--%20
str_replace는 문자열을 대체하는 함수이다. admin이라는 글자가 있으면 공백으로 대체하라는 코드이다. 그러면 admin 사이에 admin을 넣어주게 되면 admin은 공백처리 돼서 사라지고 다시 admin이 나타나게 될것이다. https://los.eagle-jump.org/vampire_0538b0259b6680c1ca4631a388177ed4.php?id=adadminmin 또한 str_ireplace는 대, 소문자를 구분하지만 str_replace는 대,소문자를 구분한다. 그래서 ADMIN이라는 글자를 넣어도 될것이다. https://los.eagle-jump.org/vampire_0538b0259b6680c1ca4631a388177ed4.php?id=ADMIN
'(작은따옴표), "(큰따옴표)가 필터링 되어 있다. ereg 함수는 해당하는 문자열이 있으면 참이나 거짓을 반환하는 함수이다. admin이 ereg 걸려있으면 exit()를 호출하게된다. eregi는 대, 소문자를 구분하지 않지만 ereg는 대, 소문자를 구분한다. 그래서 admin이 아닌 ADMIN으로 바꾸면 뚫릴것이다. https://los.eagle-jump.org/troll_6d1f080fa30a07dbaf7342285ba0e158.php?id=ADMIN