본문 바로가기

Web Hacking/Webhacking.kr

(25)
[Webhacking.kr] old-19 write up 일단 풀긴했는데 의도와는 다른 풀이인 것 같다.. 문제에 들어가면 바로 저 화면은 아닌데 입력폼 하나가 존재한다. guest를 치면 hello guest라는 문자열이 리턴된다. admin을 쳐봤다. 다음과 같은 문자열이 나온다. 게싱이 필요한 문제 같다.. 먼저 코드를 확인했지만 별다른 단서가 없어서 쿠키를 봤다. 일반 문제와 다르게 userid라는 쿠키값이 존재한다. 처음에 추측한 걸로는 userid값이 내가 guest를 입력한다면 guest에 대한 암호화 값이라고 생각했다. 일단 base64는 길이가 너무 길기 때문에 아닌 것 같았다. 그러던 와중, admin 문자열을 필터링하고 있다고 생각해서 admi%00n을 넣어서 admi까지만 인식하게 했다. 그랬는데 풀림 ㄷㄷ 풀린 이유를 생각해보면 user..
[Webhacking.kr] old-44 write up 문제는 입력폼 하나만 주어진다. 코드를 보자, 코드는 간단하게 구성되어 있다. 주석으로 ls 명령어를 실행시키라는 힌트가 주어진다. if문을 살펴보면, 입력폼에 입력한 값에서 5바이트를 가져와 system 인자에 넘긴다. system 함수 인자로는 echo 'hello! {$id}'가 들어가 있기 때문에 command injection을 위해 싱글쿼터 탈출이 필요하고 ls 실행을 위해 메타 문자 세미콜론을 써야한다. 즉, 싱글쿼터와 메타문자 3바이트를 쓰면 나머지는 2바이트 밖에 사용이 불가능하다. system("echo 'hello! ';ls''") ls 결과 flag_29cbb...과 index.php가 나왔다. 여기서 약간의 게싱이 필요했다. flag_29cbb...는 flag형식이 아니기 때문에 ..
[Webhacking.kr] old-51 write up 👆 위는 문제 화면이다. 뭔가 sqli의 냄새가나는데, 코드를 보자. 코드를 보니 sqli가 확실해졌다. 문제는 쿼리문이 참일 경우 해결이 된다. 필터링 부분을 보자. 필터링 부분을 보면 addslashes로 인해 싱글쿼터 탈출이 불가능하며, pw에 md5 해시함수가 걸려 있어서 pw에서도 싱글쿼터 탈출이 불가능하다.. 아무리 생각해봐도 답이 안나와서 살짝 힌트를 보니 md5 함수에 취약점이 존재한다. md5 함수의 두 번째 인자에 true or false값을 줄 수 있다. 기본값은 false이다. 먼저 false일 경우에는 32바이트의 16진수 문자열로 해시화되어 리턴되지만, true일 경우에는 16바이트의 2진수 바이너리 값이 리턴된다. 이 말은 2진수 바이너리가 or이나 싱글쿼터를 나타낼 경우 쿼리..
[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가 나온다. 제대..
[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 함수 이용 ..
[Webhacking.kr] old-8 write up 문제 접속하면 hi guest가 나온다. 코드를 보면 접속 사용자의 user_agent값을 가져와서 from가 있는지 확인한다. 그 후 서버 DB의 id의 개수를 가져오며 70개 이상일 경우 DB 데이터를 지운다. db의 agent가 접속자의 user_agent와 같은 id를 조회하고 id값이 있으면 echo해주고 admin일 경우 문제가 해결된다. 반대로 조회된 id가 없을 경우 insert 구문으로 DB에 agent, ip, 'guest'를 삽입한다. 먼저 패킷을 잡아 user_agent값을 admin으로 변조해봤다. 👆 위와같이 insert 문이 제대로 삽입 후 done!이라는 문자열이 나온다. 변조할수 있는 부분은 user_agent 부분이므로 이걸 이용해 해결해야하는 것 같다. user_age..