Squirrel Community 1 http://chalf.hkcert21.pwnable.hk:28062/chat/user?id=323079825'sql injection이 터진다. http://chalf.hkcert21.pwnable.hk:28062/chat/user?id=3230%20or%201where 뒤를 true로 만들면 플래그를 얻을 수 있다. FLAG : hkcert21{squirrels-or-1-or-2-or-3-and-you}babyxss 그냥 xss하면 된다. FLAG : hkcert21{zOMG_MY_KEYBOARD_IS_BROKEN_CANNOT_TURN_OFF_CAPSLOCK111111111}babyuxss bot url만 준다. javascript scheme 쓰면 된다...
보호되어 있는 글입니다.
bookmarker payload trading_api payload payload : ||(select%20flag%20from%20flag)|| nodenb race condition create note with random=1 and immediately post /deleteme then access /notes/flag diamondsafe public static function prepare($query, $args){ if (is_null($query)){ return; } if (strpos($query, '%') === false){ error('%s not included in query!'); return; } // get args $args = func_get_args(); ar..
ASCII art as a service jpg파일이 있는 url을 넘겨주면 ascii art로 변환해서 보여주는 사이트다. 코드를 확인해보면 setTimeout(()=>{ try{ const output = childProcess.execFileSync("timeout",["2","jp2a",...url]) fs.writeFileSync(outputFileName,output.toString()) fs.writeFileSync(reqFileName,[reqToken,req.session.id,outputFileName].join('|')) } catch(e){ fs.writeFileSync(reqFileName,[reqToken,req.session.id,"Something bad happened!"]..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
주말에 ctf를 하는데 문제를 풀면서 굉장히 이상한 걸 발견했다. /* cakectf my-nyamber */ async function queryNekoByName(neko_name, callback) { let filter = /(\'|\\|\s)/g; let result = []; if (typeof neko_name === 'string') { /* Process single query */ if (filter.exec(neko_name) === null) { try { let row = await querySqlStatement( `SELECT * FROM neko WHERE name='${neko_name}'` ); if (row) result.push(row); } catch { } } } ..
아무리 라업을 찾아봐도 아무도 안올려주길래 직접 풀어봤다. 맨 처음 문제를 풀 땐 cookie를 읽는 거로 뭘 할 수 있을지 몰라서 못 풀었는데 공식 문서를 찾아보니 mathjax v2 에서는 cookie에 config 값들을 저장할 수 있다고 한다. cookie에 저장된 config에는 mjx라는 prefix가 붙게 되는데 mjx.menu 설정을 보면 output format을 지정해주는 옵션이 있다. cookie에 다음 값이 있으면 mathjax는 해당 버전의 output/svg/config.js를 불러오고 불러온 javascript를 토대로 output을 생성한다. mjx.menu=renderer:svg 또한 cookie값을 기준으로 script를 불러올 때 굉장히 신기한 동작을 확인할 수 있었는데..