1. 程式人生 > >CTF 【每日一題20160618】簡單xss示例

CTF 【每日一題20160618】簡單xss示例

繼續黑客遊戲 第五關 複雜的文字遊戲
這裡寫圖片描述
點一下have a try 下面一行後那個回車
這裡寫圖片描述
並有彈出訊息框
這裡寫圖片描述

分析:

這是要考XSS,右側還提示“會用錯誤控制檯麼?”,這個是提示用chrome的console(按F12呼叫)。
首先看一下原始碼,發現裡面有一段手寫指令碼(編碼風格一般較差的那種),似乎是網頁程式設計師留下的:
    他們說輸入的地方就是攻擊的開始                    </blockquote>
                    <div  class="main_form lvl5_form">
                        <p
>
<label for="try">嘗試一下 Have A Try</label> <span id="try_l"></span></p> <p class="key_p" id="try_p"> <input type="text" name="try" id="try" class="txtbox" required="true" title="script" value='<script>alert("something strange");<\/script>'
/>
<a href="javascript:void(0);" class="icon shortcut_icon" title="確定" onclick="do_try();"></a>
<script type="text/javascript">
function do_try() {
    var k_id = '#try';
    var p_id = k_id + '_p';
    var l_id = k_id + '_l';
    var t_id = k_id + '_tip'
; if ( '' == $(k_id).val() ) { notice_me( k_id, 'script' ); } else { var data = '&do=check&val=' + $(k_id).val(); ajax_post( 'index.php', data, function() { $( l_id ).html( get_loadinghtml('c') ); $( l_id ).show(); }, function( ret ) { $( l_id ).hide(); $('#ret').html( ret ); } ); } } function do_other( extra ) { //getpwd var k_id = '#try'; var l_id = k_id + '_l'; var t_id = k_id + '_tip'; var data = '&do=check&val=&extra=' + extra; ajax_post( 'index.php', data, function() { $( l_id ).html( get_loadinghtml('c') ); $( l_id ).show(); }, function( ret ) { $( l_id ).hide(); $('#ret').html( ret ); } ); }
</script>
有趣的地方是do_other()下寫了註釋//getpwd,能用他得到密碼?
用chrome的除錯功能,可以看到這個have try提交的按鈕處,呼叫了程式設計師手寫函式on_try()

這裡寫圖片描述

那呼叫一下能得到密碼的do_other()會怎樣呢?
把do_try(),改成do_other('getpwd'),提交後會彈出password

這裡寫圖片描述

將URsoGreat提交,通關。
可能有人不理解你為什麼知道要改成do_other('getpwd'),尤其是裡面的‘getpwd’,這需要你讀do_other()的定義,然後找靈感。