목록전체 글 (370)
cgy12306
IDA로 바이너리를 분석해보자. off_202010이 있는 값을 qword_202060[29]에 넣는다. off_202010에는 printf 함수에 대한 정보를 갖고 있다. getchar로 입력받은 값이 문자 '1'이이 아니면 break로 반복문을 빠져 나오고, 문자 '2'이면 다시 반복문을 빠져나온다. setjmp 함수는 호출 당하기 전의 스택 상황을 환경 변수에 저장 했다가 longjmp 함수가 호출되면 환경 변수에 저장해놨던 값을 다시 불러온다. setjmp는 무조건 return 값을 0을 반환하기 때문에 !로 참을 만들어 줬다. 이후 sub_95A 함수를 호출한다. 인자로는 qword_202060을 넘긴다. sub_95A 함수의 내부이다. gets로 a1에 값을 받는다. a1의 문자열에 'n'이 ..
vuln 파일을 IDA로 열어봤다. read로 0x256 만큼 쓰고, 써진걸 puts로 출력해준다. buf의 위치는 rbp-100h 이다. 그러면 0x100만큼 덮어주고 rbp도 0x8만큼 덮어주면 ret에 접근할 수 있을 것이다. rop 기법을 사용할 것이다. puts의 offset을 구한다. offset은 0x809c0이다. puts는 인자를 한 개 받는다.64bit 함수 호출 규약에서는 처음 인자를 rdi에 넣기 때문에 pop rdi ; ret 가젯의 주소를 알아야 한다. ROPgadget을 이용해서 가젯의 주소를 알아내자 pr(pop ret)의 주소는 0x401223이다. pr 가젯을 실행한 후 puts로 puts의 got를 출력해준다. 이후 rbp와 pr의 주소까지 recv 해준다.(B*8 + ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
#, select, (, whitespace, limit, =, 0x 필터링 되어있다. 또한, 쿼리문에서 no가 ()로 막혀있다 id와 no를 거짓값으로 만들고 or로 뒤의 쿼리문을 참으로 만들면 된다. whitespace는 %0b(VT)로 우회하고, =은 like로 우회하면 되고, #은 --로 주석처리 해주면 된다. 여기서 주의해야 할 점은 주석뒤에 공백처리를 해줘야 한다는 점이다. 공백을 넣지 않으면 위의 소스코드에서 --)로 끝나기 때문에 정상적으로 주석처리가 되지 않는다. https://webhacking.kr/challenge/web-12/?no=0)%0bor%0bno%0blike%0b2%0b--%0b
LOG injection 문제이다. Log Injecion은 로그 파일에 원하는 코드를 삽입할 수 있는 공격이다. 페이지 소스를 보게 되면 admin page가 주석처리 되어 있다. 해당 페이지로 접속하게 되면 로그들을 볼 수 있다. 나의 IP도 확인이 가능하다. IP 주소 :admin 을 개행해서 넘기게 되면 풀리는 문제인것 같다. %0a로 개행을 해서 넘겨보자. %0a 그대로 넘어가는 듯하다.fiddler로 패킷을 까보자. %가 %25로 인코딩 돼서 넘어가고 있다. 우리는 개행을 해주는 코드로 바꿔줘야한다. 를 아래와 같이 변경 해 준다. hex를 직접 넣어준다. 32 32로 되어있는 부분을 0D와 0A로 바꿔주면 된다. 변경후 Run to Completion을 눌러서 패킷을 보내면 문제가 풀리게 된다.
? 부분의 문자가 계속 바뀌다가 마지막에 ?로 바뀐다. 웹 페이지 소스를 보면 시간을 따로 정해서 한 글자씩 보여주는 자바스크립트이다. setTimeout("answer("+i+")", 20);에서 20을 500으로 늘려서 다음 글자가 뜨는 딜레이 시간을 늘려준다. 모두 받아 적으면 FLAG{a7981201c48d0ece288afd01ca43c55b}라는 글자가 뜬다. 이 플래그를 Auth에 가서 입력을 하게 되면 클리어 된다. aview.innerHTML=x.responseText; 부분을 +=로 바꿔줘서 화면에 이어서 출력할 수 있게 된다. 또 if(x.responseText=="") aview.innerHTML="?"; 코드를 지워서 페이지에 플래그를 유지할 수 있게 해준다.
id를 입력하는 칸이 보이고, 제출 보튼이 보인다. id를 5글자를 최대로 입력할 수 있다. https://webhacking.kr/challenge/js-6/?id=123123 하지만 GET방식으로 인자를 넘겨주게 되면 6글자 이상을 넘겨줄 수 있다. admin을 입력하게 되면 아래와 같이 you are not admin이 출력이 된다. https://webhacking.kr/challenge/js-6/?id=admin admin 사이에 NULL문자를 넣어보자. NULL문자는 %00이다. https://webhacking.kr/challenge/js-6/?id=ad%00min