목록Wargame/LOS (23)
cgy12306
hell_fire와 evil_wizard 파일이 깨져서 자동으로 클리어됐다.
이번 소스 코드에는 조건문들이 필터링 되어 있고 mysql 에러가 일어났을 때 에러를 출력하지 않는다. 아래와 같이 쿼리문을 작성하게 되면 빈 화면이 뜨게 된다. https://los.eagle-jump.org/dark_eyes_a7f01583a2ab681dc71e5fd3a40c0bd4.php?pw=' or id='admin' and (select 1 union select 0 where length(pw)>0)%23%20 패스워드 길이가 0글자를 넘을 경우 select 1 union select 0이 실행이 된다. select 1 union select 0이 실행이 되면 해당 테이블에 admin이라는 값이 한 행 밖에 없어서 쿼리 오류가 발생한다. https://los.eagle-jump.org/dar..
sleep과 benchmark가 필터링 돼 있어서 time based sql injection은 힘들것 같다. 소스코드에 sql 에러가 발생하면 에러를 뿜고 exit한다. 참, 거짓에 대한 사항은 저번처럼 hello admin으로 하지 않고 에러를 기반으로 참, 거짓을 판단한다. 그러면 if문을 통해 참일 때는 화면이 그대로 출력되고 거짓일 때 에러를 뿜는 화면이 나올 것이다. select 1 union select 2를 입력하게 되면 아래와 같은 화면이 뜬다. 이 쿼리는 1과 2를 두 행에 걸쳐서 출력을 하게 되는데 두 행에 특정한 값이 있어야 뜬다. 하지만 해당 테이블에는 admin이라는 값 밖에 없어 저런 에러를 뿜는 듯하다. 이를 이용해서 패스워드 길이를 체크하는 문장을 작성해보자. if문의 사용..
pw에 아무 값이나 넣어보자. https://los.eagle-jump.org/dragon_7ead3fe768221c5d34bc42d518130972.php?pw=123 pw가 아무런 값이나 들어가 있어도 #으로 인해 뒤에 모든 문자가 주석처리 돼서 Hello guest가 출력이 된다. 우선 주석을 우회해야 한다. #은 한 줄만 주석처리를 하기 때문에 Line Feed(\n)인 %0a로 한 줄을 넘기고 그 다음에 값을 입력하면 된다. https://los.eagle-jump.org/dragon_7ead3fe768221c5d34bc42d518130972.php?pw=%27%20%0aand%20length(pw)%3C%2720 pw의 길이가 20글자 미만인 경우에는 아무런 값이 안뜨는 것을 보면 정상적으로 ..
Blind SQL Injection을 사용해야 하는 문제인것 같다. 패스워드 길이 먼저 알아보자. https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=%27%20or%20length(pw)=%2740 패스워드는 40글자이다. ASCII 코드로 변환했을 때는 NULL 값인 0이 전부 참으로 뜨게 된다. https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=%27%20or%20id=%27admin%27%20and%20ascii(substr(pw,1,1))=%270 이것도 ASCII가 아닐수도 있다는 힌트를 살짝 얻었다. 비밀번호가 ASCII가 아닌 유니코..
GET으로 받아온 pw가 6글자 이상이면 안된다. 또 #과 -이 preg_match로 막혀있기 때문에 주석처리도 안된다. 대범이 형이 힌트를 줬다. 다른 주석 사용법이 있다. ;%00으로 해주게 되면 모든 쿼리문을 작성하고 ;으로 닫고 뒤에 NULL값 처리를 해서 아무것도 없게 처리를 해준다. https://los.eagle-jump.org/nightmare_ce407ee88ba848c2bec8e42aaeaa6ad4.php?pw=');%00 잘 먹힌것 같지만 pw에는 거짓값이 들어가 있기 때문에 참값으로 만들어 줘야 한다. false는 0이기 때문에 =0,
GET으로 받아온 id와 pw를 preg_match로 '(작은따옴표)를 필터링하고 있다. preg_match는 \(역슬래쉬) 뒤에 오는 문자를 일반문자로 취급해서 우회할 수 있다고 한다. id=\&pw=123을 입력을 해주게 되면 최종 쿼리문에서 select id from prob_succubus where id='\' and pw='123' 이렇게 들어가게 된다. 이렇게 되면 \'로 인해 id값은 \'and pw\'이 들어가게 되버린다. 그러고 뒤에 123'이 남는다. 123을 or 1=1로 대체하면 무조건 참이 되기 때문에 문제가 풀릴 것 같다. https://los.eagle-jump.org/succubus_8ab2d195be2e0b10a3b5aa2873d0863f.php?id=\&pw= or 1=..
소스코드를 보니 GET으로 받은 id와 pw에 ereg 필터링이 걸려있다. 저번 스터디 회의 때 ereg의 취약점 중에서 %00으로 NULL 문자를 넣어주게 되면 뒤의 문자열은 검사를 안한다고 했었다. 그럼 id에 아무값이나 넣고 pw에는 %00으로 NULL 문자를 넣어주고, '(작은따옴표)로 pw를 닫아준 후 무조건 참으로 인지하게 되는 or '1'='1을 입력해주면 된다. https://los.eagle-jump.org/zombie_assassin_14dfa83153eb348c4aea012d453e9c8a.php?id=%00&pw=%00' or '1'='1