| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- hole punching
- MICROSOFT365
- stdout flag
- 스냅드래곤PC
- TcpClient
- puts함수
- Los
- 우분투 C#
- 스냅드래곤노트북
- dotnet publish
- Red Dragon
- lord of sql injection
- c# localport
- Blue Dragon
- 홀펀칭
- libhostpolicy.so
- fclose leak
- OSI
- puts분석
- copilot
- c# 로컬포트
- stdout
- copilot+pc
- fclose
- TCP
- puts
- get local
- DotNet
- sputn
- xsputn
- Today
- Total
Osori Development Studio
sfw8 write up 본문
일단 소스코드는 다음과 같다. javascript 함수로 정규표현식을 사용해서 admin, img, iframe, onload, onerror, write,concat,join,char 등을 대소문자 구분없이 검증하고 있다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SFW8</title>
</head>
<body>
<form name ="whoUR" action="check.php" method="post" onsubmit="return myfunction()">
<h1>Hi admin! Alert 'admin'😕;</h1>
<h2>input field is below</h2>
<input type="text" name="id" placeholder="write" value="">
<input type="submit" value= "submit">
</form>
<script>
const warningTitleCSS = 'color:red; font-size:60px; font-weight: bold; -webkit-text-stroke: 1px black;';
const warningDescCSS = 'font-size: 18px;';
console.log('%cNo NO. Stop!', warningTitleCSS);
console.log("%cDon\'t use this.", warningDescCSS);
console.log('%cjust use blank, please😂.', warningDescCSS);
function myfunction(){
var inputa = document.whoUR.id.value;
var regExp = /admin|\+|img|iframe|onload|onerror|write|concat|join|char/gi;
if(inputa.match(regExp)){
alert("😟");
return false;
}
return true;
}
</script>
</body>
</html>
그래서 내가 생각한 풀이 방법은 이렇다. javascript는 페이지를 로딩할 때 같이 로드되는 client side 언어이다. 그런데 개발자들은 항상 조심해야 한다. javascript는 끌 수 있기때문에 server side에서도 검증을 같이 해주어야 하고 에러로그를 남겨야 한다. 그런데 이 문제의 경우에는 그런 것이 없었다.
그래서 먼저 자바스크립트를 끄고 페이지를 로딩한다.

페이지 로딩이 끝난 후에는 다시 켜준다. 그리고 <script>alert('admin')</script> 입력해준다.

너무 날빌인것 같기도 하지만 엄연한 공격 방법이라고 생각했다.
그리고 그냥 두번째 방법도 어려워 보이지 않아서, 해보았다. char이 안들어간 함수를 이용하는데 decode만 가능하면 되는거 아닌가? 싶었고, 가장쉬운 인코딩 함수는 base64 인코딩/디코딩이 있겠다.
최근에 웹페이지를 만들면서 해킹 시도 탐지기능을 추가하고 있는데, 해킹시도에서 어떤 공격을 어떻게 했는지 알기 위해서는 sql injection의 완전 방지가 가능한 prepared statement 가 아닌
쿼터 문자도 mysql db에 들어갈 필요가 있었고, base64 인코딩에서는 쿼터문자가 쓰이지 않는다는 것을 이용해서 이용한 방법이다.
<script>alert(atob("YWRtaW4="))</script>

잘 된다.
'전공쪽 > 동아리 관련' 카테고리의 다른 글
| webhacking.kr (0) | 2021.01.27 |
|---|---|
| sfctf winter write up (0) | 2021.01.26 |
| sfw5 write up (0) | 2021.01.10 |
| xss challenges (0) | 2021.01.07 |
| sfw6 up (0) | 2021.01.07 |