function Invoke-MS16-032 {
<#
.SYNOPSIS
PowerShell implementation of MS16-032. The exploit targets all vulnerable
operating systems that support PowerShell v2+. Credit for the discovery of
the bug and the logic to exploit it go to James Forshaw (@tiraniddo).
Targets:
* Win7-Win10 & 2k8-2k12 <== 32/64 bit!
* Tested on x32 Win7, x64 Win8, x64 2k12R2
Notes:
* In order for the race condition to succeed the machine must have 2+ CPU
cores. If testing in a VM just make sure to add a core if needed mkay.
* The exploit is pretty reliable, however ~1/6 times it will say it succeeded
but not spawn a shell. Not sure what the issue is but just re-run and profit!
* Want to know more about MS16-032 ==>
https://googleprojectzero.blogspot.co.uk/2016/03/exploitinfE&6W74f&6W72РD6&W7VBW&V3%ӣ66TFRE&6W74fF&VBРРР2'V76Rb7FvF6bVFvR66PРE7F'EFV&6R7FРE6fTwV&B7FРЧ
Т.е. при помощи циклов и условных операторов, чтобы было понятно как это работает, чтобы не было скрытых действий таких, как myArray.Max. или myArray.Min.
using System;
using System.Collections.Generic;
using System.Linq;
var array = new[] {3, 10, 16, 2, 8};
var result = FindMediumPoint(array);
Console.WriteLine(string.Join(" ", result));
static IEnumerable<int> FindMediumPoint(int[] sequence)
{
var min = sequence.Min(); // Минимум
var max = sequence.Max(); // Максимум
var diff = max - min; // Разброс между минимумом и максимумом
var avg = diff / 2; // Середина "Разброса"
var center = min + avg;
var actualCenterDiffs = sequence
.Select(number => number - center) // Находим отклонение числа
.GroupBy(Math.Abs) // Группируем те числа, у которых одинаковое абсолютное отклонение
.OrderBy(x => x.Key) // Сортируем в порядке увеличения отклонения
.First(); // Берём первое по порядку (минимальное)
return actualCenterDiffs
.Select(diff => diff + center); // Применяем отклонение к найденному центру;
}
var dictionary = new Ditionary<string, string>();
string[] keys = dictionary.Keys.ToArray(); // ToArray - это метод-расширение (extension method)
var dictionary = new Dictionary<string, string>();
var sb = new StringBuilder();
foreach(var kv in dictionary) { // В принципе, можно оптимизировать, если писать не в StringBuilder, а сразу в стрим, который ассоциируется с файлом.
sb.AppendLine($"{kv.Key}={kv.Value}");
}
var text = sb.ToString();
// Дальше пишем text в файл.
var dictionary = new Dictionary<string,string>();
var lines= File.ReadAllLines("pathToFile"); // читаем построчно
foreach(var line in lines) {
var tokens = line.Split("=");
var key = tokens[0].Trim();
var value = string.Join("", tokens.Skip(1)).Trim();
dictionary[key] = value;
}
// Используем dictionary как хотим
Говорят, что экземпляр производного класса, наследующийся от абстрактного (класса, интерфейса), принято приводить к базовому типу. Почти всегда.
var instance = new DerivedClass();
instance.Method1(); // Красиво, компактно, никаких проблем.
instance.Method2();
В коде выше, из за приведения к базовому абстрактному типу, мы вынуждены создавать 2 экземпляра класса.
DerivedClass instance= new DerivedClass(); // только 1 экземпляр
Interface1 instance1 = instance; // Но всё равно очень громоздко.
Interface2 instance2 = instance;
Не нужна "лишняя" операция приведения (апкаст).
private Dictionary<string, Item> Inventory = new () {
["Дробовик"] = new () { Damage = 36, Clip = 30, Stock = 60 },
["Автомат"] = new () { Damage = 30, Clip = 30, Stock = 60 },
["Базука"] = new () { Damage = 51, Clip = 1, Stock = 2 }
};
public Item SelectedItem {get; set;}
private void timer1_Tick(object sender, EventArgs e) {
SelectedItem = Inventory[combobox.Text];
}
label1.Text = SelectedItem?.Clip.ToString() ?? "";
Правильно ли я делаю?
Нет ли ошибок?
Как можно защититься от инъекции?
Например, в php экранировали вводимую пользователем форму например htmlspecialchars, надо ли на net core так же делать?
sealed override string ToString()
InputField input = ...;
int number = int.Parse(input.text); // если в input.text будет лежать не число, то будет FormatException
InputField input = ...;
if(int.TryParse(input.text, out var number) {
// используем number. В этом случае FormatException не выпадет, но тогда будет возникать ощущение, будто ничего не работает.
}
str = int.Parse(inf_ot.text);
str2= int.Parse(inf_do.text);
public void Random()
{
str += str2 = otv; // Не будет работать, либо будет работать не так, как вам нужно.
}
public RestClient(Uri baseUrl, JsonSerializer serializer, IWebProxy proxy = null)
{
BaseUrl = baseUrl;
Serializer = serializer;
DefaultQueryString = new List<KeyValuePair<string, string>>();
MaxRetryCount = 0;
Proxy = proxy;
HttpClient = new HttpClient(new HttpClientHandler
{
Proxy = proxy // Вот из-за этой строчки происходит падение.
});
}