Web/LOS 25

LOS - green_dragon

‘ “ . 이 필터링 되어 있다. 특이한 게, 두 번에 걸쳐서 쿼리를 우회해야 하는 걸로 보인다. 우선id=\&pw=or 1=1 and length(pw)=1;-- -id=\&pw=or id=1=1 and pw=bin(ord(substr(pw,1,1)))=1;-- -이런 쿼리들을 넣어봤는데에러가 뜨지 않아서 코드를 짜서 브루트포싱 해봤다. 그런데 안되더라.. 아마 테이블에 admin 이라는 데이터 자체가 없어서 그런 것 같다. 그래서 union select 문을 사용해 admin 이라는 데이터 자체와 임의의 pw를 가져오도록 했다.id=\&pw= union select char(97,100,109,105,110),1;-- -첫 번째 쿼리는 뚫었다. 두 번째 쿼리를 보면 union select 로 넣었던 ..

Web/LOS 2024.10.19

LOS - evil_wizard

24번째 문제 evil_wizard 다. 이전 문제랑 비슷해 보인다. 일단 쿼리문을 써볼까?order=id=%27rubiya%27%20or%20id=%27admin%27%20and%20length(email)>1;이렇게 쓰면이렇게 나온다. 저기서 뒷 부분 length(email) 을 = 1 로 수정해서 거짓으로 만들면?order=id=%27rubiya%27%20or%20id=%27admin%27%20and%20length(email)=1;위 아래가 바뀌었다. 이를 이용해 코드를 짜서 구해보면import requestsurl = 'https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php'php = 'h3f5ptfm8b4nsjq..

Web/LOS 2024.10.18

LOS - hell_fire

23번째 문제 hell fire 다. 이번 문제는 쿼리에 order by 가 사용되었다.id=admin 이면 email 이 반환되고 우리는 이 email 을 blind injection 해서 구하면 될 것 같다. 그 전에 먼저 order by가 뭔지 알아보자 order by 는 한 마디로 정렬하는 문법이다.select 컬럼명 from 테이블명 where 조건 order by 컬럼명;이런 식으로 쿼리문을 짜면 order by 뒤에 있는 컬럼명을 기준으로 반환 값이 정렬된다. 예를 들어서이런 테이블이 있을 때select * from 테이블 where 1 order by uid;로 쿼리문을 짜면이렇게 uid를 기준으로 정렬된 것을 볼 수 있다.select * from 테이블 where 1 order by up..

Web/LOS 2024.10.18

LOS - dark-eyes

22번째 dark_eyes 다. col if case when sleep benchmark 가 필터링 되어 있다. 또한 에러 메세지가 출력되지 않기 때문에 에러가 뜨는지 안뜨는지에 따라 pw를 구해야 한다.이를 위해 UNION 문을 사용할 것이다. 우리가 UNION을 사용할 때 알아야 할 가장 기본적인 것은 앞과 뒤의 서브쿼리가 반환할 값의 개수가 같아야 한다는 것이다. 현재 쿼리는select id from prob_dark_eyes where id='admin' and pw=''으로 전체적으로 단일 값 ‘admin’ 만을 반환할 것이다. 여기서 만약 복수의 값을 반환하는 서브쿼리?pw='' or (select 1 select union 2);-- -를 만들어 넣으면이렇게 에러가 난다. 또한 UNION ..

Web/LOS 2024.10.18

LOS - iron_golem

21번째 문제 iron_golem 이다. 코드를 보면 sleep , benchmark 함수가 필터링 되어 있고, pw값을 정확히 구해야 한다. 이전 blind injection 문제들과 다른 점은, Hello admin 과 같은 출력 대신에 에러 페이지를 출력해준다는 점이다. 따라서 에러를 이용해 pw 값을 구해야 한다. error based injection 을 할 때 가장 흔히 쓰는 함수는extractvalue(문자, 쿼리)updatexml(null, 쿼리, null)이다. 위 함수들을 이용해 SQL의 if() 를 사용해서 거짓이면 에러가 뜨도록 쿼리를 짜보았다.—> if 함수의 사용 포맷은 if(조건, 참, 거짓) 이다.pw=' or id='admin' and if(length(pw)={},1,ex..

Web/LOS 2024.10.18

LOS - dragon

19번째 문제 dragon 이다. 쿼리문 사이에 # 가 들어가 있어 id=’guest’ 이후에는 주석 처리 된다. 하지만 중요한 건 # 는 한 줄 주석이라는 것이다.(—, //, # 등) 따라서 줄바꿈을 하면 쿼리문이 작동할 것이다.pw=%0Aand id='admin';-- -위 쿼리문을 작동시키면줄바꿈이 정상적으로 되는 것을 알 수 있다. 결과값이 ‘admin’ 으로 나와야 하니 앞선 id=’guest’ 조건 부분을 거짓으로 만들어 id=’admin’ 을 실행시키면 될 것 같다.pw=%0Aand pw='12' or id='admin';-- -이 쿼리문을 넣으면 풀었다!

Web/LOS 2024.10.18

LOS - xavis

19번째 문제 xavis 다. regex, like 를 필터링하고, 정확한 pw 값을 찾아야 하는 blind injection 문제로 보인다.나머지 함수들은 필터링이 없어 편하게 페이로드를 짤 수 있을 것 같다. 그런데 injection 하다가 한 가지 이상한 점이 보였다.password 의 ascii 값 추출이 안된다. 혹시 멀티바이트인가 하고 각 자리의 bit length 를 구해보면 1,2,3 번째 글자가 16 비트인 것을 알 수 있다. 아마 ascii 가 아니라 유니코드일 것이다.# password 길이import requestsurl = 'https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php'php = 'h3f5ptfm8b..

Web/LOS 2024.10.18

LOS - nightmare

18번째 문제 nightmare 다. 코드를 보면#, - 의 주석 문자를 필터링 하고pw 부분의 파라미터 길이가 6 이하여야 한다. 문제를 풀면서 도저히 모르겠어서 구글링을 해봤는데, 알게 된 사실이 2가지 있다.문자를 + - 처럼 연산하거나 > = 처럼 비교할 경우 해당 문자는 0으로 자동 형변환된다.null 문자를 이용해 쿼리문을 조기 종료 시킬 수 있다.→ ex) pw=’123’\n and id=’admin’ 이면 pw=’123’ 까지만 쿼리가 실행된다.→ 문자열의 끝이 원래 ‘\0’ 이기 때문에 mysql 이 문자열의 끝으로 인식하기 때문이다. 따라서 쿼리문을 짜보면pw=')=0;%00풀었다!

Web/LOS 2024.10.18

LOS - zombie_assassin

17번째 문제 zombie_assasin 이다. strrev —> 문자열 뒤집는 함수예를 들어 strrev(’admin’) —> ‘nimda’ $_GET['id'] = strrev(addslashes($_GET['id']));$_GET['pw'] = strrev(addslashes($_GET['pw']));이 구문이 먼저 나왔기 때문에 null, \ , ‘ , “ 는 \null, \\ , \’ , \” 로 변환된다. (앞에 백슬래시가 붙음) 또한 strrev()는 인자로 들어간 문자열을 뒤집는 함수이다.예를 들어 strrev(’admin’) —> ‘nimda’이런 식이다. 따라서 쿼리문에?id='&pw='를 집어 넣으면 이런 식으로 \’ 가 ‘\ 로 순서가 뒤바뀌어서 나온다. null 문자를 넣어보면이러..

Web/LOS 2024.10.18

LOS - succubus

16번째 문제 succubus 다. 이번에는 id 와 pw 두 개의 파라미터가 있고, ‘ 를 필터링한다. ‘ 를 탈출시키는 게 관건인 것 같은데.. 방법을 찾다가 \ 의 기능을 알게 되었다. ‘ \’ 로 쿼리가 입력이 되면 뒤에 있는 ‘ 는 문자열로 인식이 되기 때문에 이를 이용해서id=\&pw=or 1=1;-- -를 입력하게 되면 최종적인 쿼리문은select id from prob_succubus where id='\' and pw='or 1=1;-- -'이렇게 되고 이 쿼리문이 작동되는 부분만 보면select id from prob_succubus where id=''' or 1=1;-- -이렇게 되는 거다. 풀었다!

Web/LOS 2024.10.18