본문 바로가기

Web Hacking

(91)
[Dreamhack] Apache htaccess write up 위는 바로 문제 서버 접속 화면이다. 서버 분석 Choose a file을 누르면 파일을 선택할 수 있고 위와같이 파일이 올라간다. submit을 누르면, 에러를 반환한다. 아마도 php파일이라서 그런거 같다. 이걸 우회하는게 문제인듯. 다른 파일을 올려보자. 파이썬 파일을 올리니 제대로 올라간걸 볼 수 있다. 이제 코드를 분석해보자.. index.php Online File Box Choose a file... No file uploaded index.php파일이다. 별다른 코드는 없고 자바스크립트 쪽을 보면 파일이 선택 되었을 때, 표시된 부분을 바꾸는 것 같으므로 넘어간다. upload.php
[Webhacking.kr] old-45 write up sqli문제로 55점 짜리다 ㄷㄷ.. 풀어보자 코드 분석 먼저 문제는 쿼리문 결과로 반환된 id값이 admin일 경우 해결된다. 쿼리문은 다음과 같다. select id from chall45 where id='($_GET['id'])' and pw=md5('$_GET['pw']') 쿼리문을 보면 pw는 md5 해시화되어 전송되기 때문에 pw에서 건들건 없어보인다. 필터링을 보자. id, pw 모두 addslashes함수를 적용시키고 있다. 그러나 convert_encoding을 통해 utf-8로 인코딩 중이기 때문에 싱글쿼터는 멀티바이트 삽입으로 충분히 우회가 된다. 먼저 싱글쿼터 탈출이 제대로 되는지 확인해보자. 멀티 바이트 삽입 후 뒤 강제로 쿼리문을 1로 만들었더니 hi guest가 나온다. 제대..
[Dreamhack] Command Injection Advanced write up 다음은 문제 코드이다. Online Curl Request URL GET요청의 url변수에 전달된 값을 가져오고 있다. strpos 함수를 통해 http가 포함된 문자열만 허용하고 있으며 받은 문자열을 shell_exec의 인자로 넘기고 있다. 문제 서버에 접속해보자. 해당 입력폼에 전달 시 GET 요청이 전송되는 것 같다. 이 문제에서는 escapeshellcmd 함수로 전달 받은 문자열을 필터링하고 있기 때문에 쉘 메타문자를 사용할 수 는 없다. 따라서 curl 명령어의 옵션만을 이용할 수 있다. 문제로 제공된 폴더를 보면 flag.c가 존재함을 알 수 있다. Dockerfile을 보면 flag.c 파일은 컴파일 되어 flag파일만 남고 사라짐을 알 수 있으며 파일 경로는 서버의 루트 경로 바로 밑에..
[Webhacking.kr] old-43 write up 웹쉘을 올리고 cat /flag하면 flag를 얻을 수 있어 보인다. 웹쉘을 선택 후 제출을 해봤다. "wrong type"이라는 문자열이 나오며 실패했다. 서버측에서 확장자를 필터링하는 거 같아 확장자를 우회하려 했지만 실팼다. 구글링하다가 Content-Type을 수정하라는 글을 봤다. 버프 슈트로 패킷을 잡아봤다. Content-Type이 text/php로 되어 있어서 이미지로 수정 했더니 잘 올라갔다. 파일에 접근하니 잘 실행된걸 볼 수 있따.
[Webhacking.kr] old-49 write up sqli 문제, 바로 코드로 ㄱㄱ lv에 싱글쿼터가 없어서 탈출 안해도 된다. or을 이용해서 앞 조건 거짓 만든 뒤 뒤 조건을 id='admin'으로 만들면 끝 0||id=0b110000101100100011011010110100101101110
[Webhacking.kr] old-46 write up 문제이다! 친절히 SQLI 문제라고 알려주고 있다. 코드를 구경해보자. 먼저 문제가 해결되는 조건부터 살펴본다. db에 쿼리문을 날려 조회된 id값이 admin일 경우 해결된다. 쿼리문은 다음과 같다. select id, cash, from chall46 where lv=$_GET[lv] 싱글쿼터도 없기 때문에 싱글쿼터 탈출은 생각안해도 된다. 필터링 역시 str_replace함수로 대체만 해주기 때문에 두 번 써주면 모두 우회가 된다. 내가 생각하는 페이로드는 다음과 같다. 앞 조건 lv=? 거짓을 만든 후 or id='admin'을 해서 참을 만들어준다. 그러나 addslashes로 싱글쿼터를 필터링하고 있기 때문에 싱글쿼터는 못 쓴다. 대신 char함수나 16진수, 2진수, concat 함수 이용 ..
[Dreamhack] sql injection bypass WAF Advanced write up import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.config['MYSQL_PASSWORD'] = os.environ.get('MYSQL_PASSWORD', 'pass') app.config['MYSQL_DB'] = os.environ.get('MYSQL_DB', 'users') mysql = MySQL(app) template =''' SE..
[Dreamhack] sql injection bypass WAF write up SQL Injection을 막는 WAF를 간단하게 설정해 놓고 admin의 pw를 구하는 간단한 문제이다. 바로 문제와 코드를 보자! 먼저 문제이다. 이전 문제와 같이 입력 폼이 존재하며 내 쿼리문을 볼 수 있다. 코드는, import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.config['MYSQL_PASSWORD'] = os.environ.g..