webhacking.kr(69)
-
old-51 풀이
POST 형식으로 id와 pw를 가져옵니다 id는 addslashes()로 이스케이핑을 해주고, pw는 md5()로 처리를 해줍니다 그런데, pw에서 md5 처리를 할 때, raw_output 부분이 true로 되어있습니다 이런 경우에는 md5 해시값이 16bytes의 바이너리 형태로 나오게 됩니다 바이너리 형태에 특수문자가 포함되는걸 이용해서, SQL Injection을 시도해 보면...? 될 것 같습니다 "select id from chall51 where id='{$input_id}' and pw='{$input_pw}'" result 변수에 들어가는 MySQL 쿼리를 가져왔습니다 pw='{$input_pw}' 부분을 참으로 만들어줘야 하는데, 바이너리 값에 'or'이 포함되도록 하는 값을 찾아 넣..
2024.02.28 -
old-07 풀이
go라는 변수에 val의 값을 GET 형태로 가져옵니다 그리고 go에 2, -, +, from, _, =, \s, *, \가 있는 경우, "Access Denied!"를 출력하면서 필터링을 해줍니다 그리고 rand 변수에 랜덤 값을 하나 뽑아서 넣어주고, rand의 값에 따라 조건문을 다르게 실행합니다 쿼리의 결과가 2인 경우에만 문제가 해결됩니다 SQL Injection 문제인 것으로 보입니다 쿼리의 결과를 2로 조작해야 하는데, 필터링 목록에 2가 있네요... 이걸 어떻게 우회하는지가 관건인 것 같습니다 if(preg_match("/2|-|\+|from|_|=|\\s|\*|\//i",$go)) exit("Access Denied!"); 좀 더 보기 편하도록, 필터링 부분만 다시 가져와봤습니다 숫자 2..
2024.02.26 -
g00gle1 풀이
문제를 열어보니 구글폼 하나가 보입니다 선택지가 두 개 있는데, 둘 다 긍정이라 그냥 아무거나 눌러서 제출하려 했습니다 그러나 경고 표시로 "정확히 0개의 옵션을 선택해야 합니다"라고 뜨네요 개발자 도구에 들어가서 코드를 살펴보겠습니다 코드 전체를 보기에는 양이 좀 많으므로, 우선 script 부분만 쭉 살펴보겠습니다 FB_PUBLIC_LOAD_DATA 안에 "Do you want flag?", "yes", "sure" 등 설문지에서 봤던 문자열이 등장합니다 어떤 값들이 있을까 쭉 살펴보고 있는데..... FLAG가 보입니다..? 우선 제출부터 바로 해줬습니다 아마 JS 조작으로 숨겨진 답을 만들어 놓으신 것 같은데... 문제 점수가 50점인걸 보면 다른 풀이 방법이 있기라도 한건지...?? 잘 모르겠습..
2024.02.26 -
old-35 풀이
폰 번호를 입력하는 폼이 하나 있습니다 코드부터 확인해 보겠습니다 SQL Injection 문제인 것 같네요 preg_match()로 *, /, =, select, -, #, ;, admin을 필터링하고 있습니다 그리고 id의 길이가 5 이상이면 안된다고 되어있네요 문제 해결 조건은 isAdmin의 ip와 제 PC의 IP가 동일해야 한다고 되어있습니다 "insert into chall35(id,ip,phone) values('{$_GET['id']}','{$_SERVER['REMOTE_ADDR']}',{$_GET['phone']})" 위 쿼리에서 id에는 길이 제한이 있으므로 phone에 값을 넣는 것이 좋아 보입니다 (메인 페이지에 있는 입력란이 phone이기도 하고요) 문제를 풀기 위해 필요한 데이터..
2024.02.19 -
old-41 풀이
파일 업로드 폼이 만들어져 있습니다 https://www.php.net/manual/en/function.error-reporting.php PHP: error_reporting - Manual I always code with E_ALL set.After a couple of pages of I made this function to make things a little bit quicker. Unset values passed by reference won't trigger a notice. www.php.net 코드 상단 부분에 error_reporting()이라는 함수가 있어서 구글링을 해봤습니다 ini_set()과 함께 쓰이며, 에러 처리를 할 때 에러 문구와 파일 경로를 출력해 주는 역할을 한..
2024.02.17 -
old-44 풀이
노란색으로 적힌 주석을 보면 ls 명령어를 실행하라고 되어있습니다 문제 코드를 보면 id를 POST로 받아오고, 5글자까지만 사용한다고 합니다 system() 함수 안에 들어있는 "echo 'hello! " 문자열을 출력하고, 그 뒤에 '|'ls를 추가해서 명령어가 실행되도록 해줬습니다 (이렇게 하면 글자 수도 딱 5글자) 나온 경로로 이동해 보겠습니다
2024.02.15