write-up(web)/webhacking.kr

    [Webhacking.kr] Challenge old-13 write-up

    [Webhacking.kr] Challenge old-13 write-up

    sql injection 문제입니다. 1을 입력하면 1이 뜨고 그 외에는 0을 출력해주므로 blind sql injection임을 알 수 있습니다. 필터링되지 않는 문자들을 직접 찾아서 활용해야 합니다. 비트 연산자 중 ^(XOR) 연산자를 필터링하지 않습니다. 먼저 데이터베이스를 구해줍니다. XOR 연산에서 원하는 값을 구하기 위해 간단한 함수를 구현했습니다. def calc(num): if num % 2 == 0: return num + 1 else: return num - 1 db 이름 길이를 찾아줍니다. db_length = 0 while True: db_length += 1 query = f'?no=(length(database())^{db_length})' print(db_length, end..

    [Webhacking.kr] Challenge old-40 write-up

    [Webhacking.kr] Challenge old-40 write-up

    문제 화면 입니다. 로그인하면 guest로 로그인 됩니다. blind sql injection임을 직감하고 값을 조작해봤습니다. 일단 addslash 함수가 적용되어 있는 듯 합니다. id,pw는 손 쓸 방법이 없고 no가 유일한 해결책입니다. no에선 'or', 'and', 'select', ' ', '+', '-' 문자 등을 사용할 수 없습니다. 이 외의 문자들을 활용해 아래와 같이 입력하자 admin password를 입력하는 창이 나왔습니다. 블라인드 인젝션이 확실함을 알게 되었으니 파이썬으로 자동화 코드를 짜줍시다. 다음은 제가 사용한 익스플로잇 코드입니다. import requests host = "https://webhacking.kr/challenge/web-29/" cookie = {'P..

    [Webhacking.kr] Challenge old-48 write-up

    [Webhacking.kr] Challenge old-48 write-up

    문제 화면 입니다. 파일과 댓글을 작성할 수 있습니다. 버프스위트로 확인해보면 파일 이름을 조작할 수 있습니다. 파일 이름을 조작해서 xss 코드를 작성할 수 있어서 xss문제인 줄 알았으나 결론적으론 읽어줄 봇이 없어서 xss문제가 아니였습니다. 이 문제에서 중요한 부분은 삭제할 때 입니다. 아파치는 리눅스를 기반으로 만들어져서 rm 명령어를 사용합니다. rm 명령어를 수행할 때 파일 이름을 사용하며 이 값은 사용자가 입력합니다. 사용자의 입력 값에 대한 검증 로직이 존재하지 않으므로 커맨드 인젝션이 가능하게 됩니다. 파일 이름을 아무렇게나 작성해준 뒤 ;ls 를 통해 커맨드 인젝션을 수행하면 플래그를 획득할 수 있습니다!

    [Webhacking.kr] Challenge old-37 write-up

    [Webhacking.kr] Challenge old-37 write-up

    문제 화면입니다. view-source 문제 소스 코드입니다. if 문 안을 실행시키려면 타이밍을 맞춰서 해당 시간의 문자열을 가진 파일을 업로드 해야 합니다. 이후 소켓을 통해 플래그를 쏴줍니다. 이를 받기 위해 포트포워딩을 해야 합니다. 버프스위트로 패킷을 잡아서 타이밍에 맞게 전달해주면 플래그가 나옵니다!

    [Webhacking.kr] NotSQL write-up

    [Webhacking.kr] NotSQL write-up

    문제에 접속한 뒤 네트워크 탭을 열고 링크들을 들어가보면 view.php 라는 친구가 무언가 처리를 해주고 있음을 알 수 있습니다. view.php로 가서 에러를 일으켜보면 GraphQL이라는 친구를 db로 사용하고 있음을 알 수 있습니다. 깃허브 치팅시트를 찾아보면 아래와 같은 코드가 있습니다. __schema{queryType{name},mutationType{name},types{kind,name,description,fields(includeDeprecated:true){name,description,args{name,description,type{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType..