일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Remote File Inclusion
- SuNiNaTas
- Los
- sql injection
- 웹 해킹
- TeamH4C
- 정보보안
- 써니나타스
- 빡공팟 4기
- 해커팩토리
- Lord of SQL Injection
- DVWA
- 워게임
- H4CKINGGAME
- Insecure CAPTCHA
- DreamHack
- webhacking.kr
- wargame
- Weak Session IDs
- 정보보호
- Web Hacking
- DOM-Based XSS
- File Upload Vulnerability
- XSS
- bypass CAPTCHA
- Dremhack
- Hackerfactory
- 빡공팟 6기
- 드림핵
- Cross Site Scripting
- Today
- Total
도카이트
[Wargame] Suninatas 5번 Write-Up 본문
문제 화면
- Key Value 값을 Check 할 수 있는 입력폼이 존재한다.
- 소스코드를 확인해보도록 하자!
페이지 소스코드
// 일부 코드 생략, 핵심 부분만 작성
<script>
eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('g l=m o(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'a\',\'b\',\'c\',\'d\',\'e\',\'f\');p q(n){g h=\'\';g j=r;s(g i=t;i>0;){i-=4;g k=(n>>i)&u;v(!j||k!=0){j=w;h+=l[k]}}x(h==\'\'?\'0\':h)}',34,34,'||||||||||||||||var|result||start|digit|digitArray|new||Array|function|PASS|true|for|32|0xf|if|false|return'.split('|'),0,{}))
</script>
<b>Check Key Value</b>
</td>
</tr>
<tr>
<td colspan="2" align="center"></td>
</tr>
</table>
</form>
</body>
</html>
<script>
function init(){
document.frm.password.value = "";
document.frm.password.focus();
}
</script>
<!--Hint : 12342046413275659 -->
- 눈에 띄는 JavaScript 코드들이 있다…
- 진짜 온통 알 수 없이 혼잡한 코드들로 이루어져 있다..
- 이는 난독화된 JavaScript 이며, JavaScript Unpacker 도구를 이용하여 해석할 수 있다.
JavaScript Unpacking
- 다음 사이트를 이용하여 eval 함수로 둘러싸여있는 복잡한 JavaScript 코드를 해석하였다 !
- https://www.strictly-software.com/unpack-javascript
- 해당 코드 부분을 붙여넣기 후 Unpack 버튼을 클릭하여 Unpacking 을 진행한다!
- 드디어 이해 가능(?)한 반가운 모습의 JavaScript로 재출력되었다 !
Unpacked JavaScript
var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
function PASS(n) {
var result = '';
var start = true;
for (var i = 32; i > 0;) {
i -= 4;
var digit = (n >> i) & 0xf;
if (!start || digit != 0) {
start = false;
result += digitArray[digit]
}
}
return (result == '' ? '0': result)
}
- digitArray 를 정의하고 PASS 함수를 사용하여 result 값을 설정하는 듯 하다.
- PASS 함수 값의 인자로 Hint에 적혀있었던 값을 삽입하면 문제가 해결될 듯 싶다…?
PASS 함수를 통한 Key Value 획득
- PASS 함수의 인자값으로 Hint로 주어졌던 12342046413275659을 삽입하였다.
- ‘9c43c20c’ 라는 문자열을 확인할 수 있다!
- 서둘러 해당 문자열을 Key Value 입력 폼에 입력 후 Check를 시도해보자 !
Authkey 획득
- 성공적으로 Authkey 값을 획득할 수 있다 !!
'Wargame > Suninatas' 카테고리의 다른 글
[Wargame] Suninatas 7번 Write-Up (0) | 2022.05.31 |
---|---|
[Wargame] Suninatas 6번 Write-Up (0) | 2022.05.31 |
[Wargame] Suninatas 4번 Write-Up (0) | 2022.05.13 |
[Wargame] Suninatas 3번 Write-Up (0) | 2022.05.13 |
[Wargame] Suninatas 2번 Write-Up (0) | 2022.05.13 |