• Aucun résultat trouvé

Buffer Overflow

N/A
N/A
Protected

Academic year: 2022

Partager "Buffer Overflow"

Copied!
36
0
0

Texte intégral

(1)

1/30

Buffer Overflow

Mehdi Bahbah Axel Yildiz Elie Vigouroux Baptiste Gouyet Guillaume Gaudin

UCA-ISIMA

November 2020

(2)

2/30

Table of Contents

Theories

Shellcode

Defense

Real cases

Demonstration

References

(3)

3/30

THEORIES

(4)

4/30

THEORIES - Stack

(5)

5/30

THEORIES - Heap

(6)

6/30

THEORIES - Buffer Overflow

(7)

7/30

THEORIES - No Op Slide

(8)

8/30

SHELLCODE

---.`````

---.```

---.``````````

---...--....```

---...---...```

...-..---...```

---.-...---....```

...---....``

...---....```

...---...```

...---...``` ````````` ````````````````````````````````````...`

...---....`` ` ...--....``````..-::::::::::::::::::::::::::::.

...`...---...``` ` ...----..```` `.-::::::::::::::::::::::::::.

...`````...---...``` ...----..```` `-:::::::::::::::::::::::::.

...``````...---....`` ...-...````` `-::::::::::::::::::::::::.

...````````...---...``` `` ...````` `...`

...`````````...---...``` .. `...````` ``````````````````````

``````````````````.``````````...---....``` ``` `...````` ``````````````````````

`````````````````````````````...---...``` ``````````````````````````````` ``````````````````...````` ```````````````````````

`````````````````````````````...---...``` `...`` ``````````````````...````` ```````````````````````

``````````````````````````````...---...```` `.---. ``````````````````...````` `---.

``````````````````````````````...---...``` `.---. ````````````````````...````` `.---.

``````````````````````````````...---...````..---..-. `````...````` `...`

```````````````````````````````...---...```` ````.---..` `` `````````````````````...````` .---.

`````````````````````````````````...---...``` ``.---.. `````````````````````...`````` `...`

``````````````````````````````````...---...`````.---.. `````````````````````...`````` `...`

```````````````````````````````````...---....``` `..---.. `````````````````````...`````` `---.

````````````````````````````````````...---...``` ``.---.. `````````````````````...`````` .---`

````````````````````````````````````...---...``` `...---.. `````````````````````...`````` .:::::::::::::::::.

`````````````````````````````````````...---...``` ``.---.. `````````````````````...`````` `-::::::::::::::::.

...-.``````````````````````````````...---...``` `..----.. `````````````````````...``````` `---.

---:+:-.-.````````````````````````````...---...```` `..--.. `````````````````````...`````` `-:::::::::::::::.

---:+/--:::.---.```````````````````...---...```` `.... ``````````````````````...`````` .:::::::::::::::.

---:+/--:::::/::---.````````````````````...---...```` `. ``````````````````````...`````` -::::::::::::::.

---:+/--:::::://-.```````````````````````...---...```` ` ``````````````````````...``````` `-:::::::::::::.

---:+/--:::::://::-.``````````````````````...---...```` ``````````````````````...````` .:::::::::::::.

---:+/--:::::://:://:...`````````````````...---...```` `` ` ``````````````````````...`````` `-::::::::::::.

---:+:--::::::///////+/....`````````````````...---...```` ``..````` .` ``````````````````````...`````` .::::::::::::.

---::---::::::///////:-....`````````````````...---...```` ``-.````` .` `...`````````...`````` `-:::::::::::.

---...---:::::///////-...```````````````...---...```` ``-.````` .` ://///:--...````````...`````` `:::::::::::.

...---::::::://///:...````````````...-.---...```` ``-.````` .` +oooo++///:....````````...`````` -::::::::::.

````.```...---::::::////:-...``.``````...---...```` ``-.````` .` +oooo+++//++-..````````...`````` `.:::::::::.

`````````...---::::://///-...`````...---...```` ``-.````` .` +oooo+++++++o+-.```````...`````` `-::::::::.

``````````...---:::::////:...````...---...```` `-.````` .` +oooo////+++oo:.```````...``````` `::::::::.

````````````...---:::::////:-...`````.`...---...```` `.````` .` +ooo/-::///+++/.``..```...`````` .:::::::.

`````````````...---:::::////-...````````...---...``` ````` .` /++/----::///+/-....```...`````` `-::::::.

```````````````...---::::////:-...`````````...---...``` ````` .` ...---::://+:.`....`...`````` `.:::::.

````````````````...---:::://///:...``````````...---...```` ```` .` `````..---::://:.``...`...````` .::::.

``````````````...---::::////:-...```````````...---...`````````````...---:::::////:-...```````````...---...```` ```` .```` .` `````...----:://...``````````...----::/...```` .:::..::.

````````...----::::::////-...````````...---...````````````...----::::::///:-...`...---...```` `` .`.` ``````....---:-...```````````...---:-...```` .:...

````````...---::::::://:-...---...```````````...---:::::::/::--::::---...---...```` ``.-`..``` `` ``.``...```` ```` ````````...---:-...````````````...---:...```` ````````````````````````````````````-::::::::::::::::::::::::::::::::

`````````...---:::::::://///://////::::--...---...```` ``.-`..` ``.``...`` `````````...--:-...````` `-:::::::::::::::::::::::::::::::

` ``````````...---:::::/::::::::::::::://///:--...---...```` `.-`..` ``.``...`` `````````...--:...````` `-::::::::::::::::::::::::::::::

````` ``````````...---::::::---::::::::://////::-...---...``````````````...---:---::::::::///////::--...---...```` `.-`..``-`..` ``.``...````.``...`` `````````...--:-...``````````````...----...---.-...`````` `.:::::::::::::::::::::::::::::.::::::::::::::::::::::::::::

``` ```````````...---...---:::::::////////::--...---...```` .`..` ``.``...`` `````````...---...---...`````` `.-:::::::::::::::::::::::::

``` ``````````...---...---::::::://///////:--...---...```` `.` ``.``...`` ```````...----...---...`````` `.---

```` ``````````...----...---:::::::////////:--...---...```` `` ``.``...`` ```````...----...---...`````` `````````````````````````

`````` ``````````...----...---::::::::////////:--...---...```` ``.``...`` ```````...---...---...````` ```````````````````````

``````` ```````````...---...---:::::::////////::--...---...```` ``.``...`` ```````...----...---...`````` ``...

````````` ```````````...--...````````...---::::::://///////:--...---...```` ``.``...`` ```````...---...---...`````` `-:::::::::::::::::::

`````````` ``````````...-...`````````````...---:::::::://///////:-...---...```` ``..`...`` ```````...---:-...---...````` `..`-:::::::::::::::`

``````````` ``````````...-....````````````````...---::::::://///////:-...---...```` ```...`` ```````...----:--.-....---...````` `./::::::::::::::`

```````````...``````````````````...---::::::://///////:-...---...````` ``..`` ``````...---:----..---...`````` .:::::::::::::::`

```````````...``````````````````````...---::::::://///////:--...---...```` ````` ``````...````.----::---...`````` `::::::::::::::`

`` ```````````...````````````````````````...---:::::://///////::-...-...---...```` `` ``` ````````````````````````````````````````````````````````````````````````````````````````````````````````````...``.---:---...`````` `.::---

``.-/:.` ````````````...``````````````````````````...---::::://///////:---...---...```` `.``...``...````````````````````````````````````````````````...```````....-::.``.--::---...`````` ``

``-:+//:--.` ```````````...````````````````````````````...---:::::://////+//:---...---...```` ```...``...````````````````````````````````````````````````--:---````...-//:-`.--:---...``````

``-:/::::::-.`` ```````````...``````````````````````````````...---::::://////+//:---...---...```` ``...``...````````````````````````````````````````````````---:::.```..-:/+/-``-:---...``````

`..---:::.`` ````````````...````````````````````````````````...---::::://///++//:---...---...```` ``...``...`...---::-..`...:/++/-.``-:---::::---...```````

`...---:-.` `````````````````...````````````````````````````````...---::::://////+//:---...---...````` ``.``...-::::::::::::::::::::::::::::::::::::::::::::-..--:::...-:/++/-.` .---:::::::::::---...``````` `````

``````..``...---.``````````````````````....``````````````````````````````````...---::::::////////::---...---...```` ```...```````````````````````````````````````````...--::...-/+++/-.`` .---::::::::::::::::---...`````` `````

```````````...---.````````````````````````..````````````````````````````````````...---::::://///////:---...---...````` ````...` ```...---:...:/+++/:.`` `---::::::::::::::::::---...``````` ```

`````````````...---.``````````````...---.`````````````````````````...`````````````````````````````````````...---::::::////////:---..-...---...````````````````````````````..`````````````````````````````````````...---::::::////////:---.-....---...``` ...`````...````````````````````````````````````````````....--:-.`.-//+++/:-.`````....--:-...-//+++/:-.` `.---::::::::::::::::::::---...```````.---::::::::::::::::::::::---...```````

``````````````...---`````````````````````````````..```````````````````````````````````````...---::::://///////:---...---...`````` `````````````...----.````````````````````````````....```````````````````````````````````````...---::::://///////:---.-...---...```` ``...`````````...````````````````````````````````````````````....--.`.-:/++++/:-.``````....----.`.:/++++/:-.`` `---::::::::::::::::::::::::---...`````````---:::::::::::::::::::::::::---...```````

`````````````...---.```````````````````````````...```````````````````````````````````````...---::::://///////:---...---...```````````````...---.``````````````````````````...`````````````````````````````````````...---::::::////////:---...---...``` `...``...``````````````````````````````````````````....-.`.-:/++++//:-..````````....--..-://++++/:-..`` `---::::::::::::::::::::::::::::---...```````.---::::::::::::::::::::::::::::::---...``````` `

`````````````...---.````````...````...```````````````````````````````````...---::::::////////:---...---...```````````````...---.`...---:::::----...``````````````````````````````````...---::::://///////::---...```` `...``````````````````````````````````````````...``-::/++++//:--.````...``````````````````````````````````````````...``.-://++++//:--.``` .---::::::::::::::::::::::::::::::::---...``````.-:::::::::::::::::::::::::::::::::::::---...``````

```````````...---...---::::----...````````````````````````````````...---::::://///////:---...```````````````...--...---::::---...```````````````````````````````...---::::://///////:---...``` ``````````````````````````````````````````````````````````````````````````...`.--://+++///::-.```````````````````````````````````````````..``.-:://+++///::-.```` `-::::::::::::::::::::::::::::::::::::::---...```````:::::::::::::::::::::::::::::::::::::::---...`````` ```````````````````````````

`````````````...---:::::---...`````````````````````````````...---::::://///////:---...`````````````````...```````...---:::::---...`````````````````````````````...---:::::::///////::---...``` ``````````````````````````````````````..```.-://++++///::-..`````````````````````````````````````````..```.-:://++++///::-..````` `::::::::::::::::::::::::::::::::::::::::---...```````:::::::::::::::::::::::::::::::::::::::::---...`````` .---`.::::::::::`

``````````````...`````````...---::::::----...````````````````````````````...---:::::::///////::---...``````````````````.```````````````...---::::::::----...```````````````````````````...---::::::///////::---...``` ```````````````````````````````````...```.-://+++++///::--..````...`````..```.-:://+++++///::--...```` `-:::::::::::::::::::::::::::::::::::::::::---...```````-:::::::::::///////////////:/:::::::::::::---...``````` `-:::::::::``-::::::::`

```````````````````````````````...---::::::::---...```````````````````````````...---::::::///////:---....```````````````````````````````````...---:::::::::--...```````````````````````````...---::::::://////:---...```` `...```...``..-:///+++++///:::-...```````````````````````````````````...```.-:://++++++////::--...````` -/:////////////////////////////:::::::::::---...```````-////////////////////////////////::::::::::---...``````` `-:::::::``-::::::`

`````````````````````````````````...---:::::::---...````````````````````````````...---::::::://////:---....```````````````````````````````````...---:::::::--...````````````````````````````...---:::::://///::---...``` `.````````````````````````````..```..-:///++++++////:::--...```````````````````````````````````..```.-:://++++++++////::---....`````` -/////////////////////////////////::::::::::---....```````-//////////////////////////////////:::::::::---...``````` `-:::::`.---`

`````````````````````````````````...---:::---...````````````````````````````...---:::::://////:---....``` ````````````````````````````.```.-:://+++++++++////:::----...`````` -////////////////////////////////////::::::::---....`````` .----`

``````````````````````````````````...---...``````````````````````````...---:::::://////:---....``` ..`````````````````````````.``.--://++++++++++/////::::----...`````` :////////////////////+////////////////:::::::---....`````` `----`

```````````````````````````````````...---...```````````````````````...---:::::://///:---...````````````````````````````````````````...---...````````````````````...---:::::://////:---....``` ` /+`-sshyys+:...``.-://+++++ooooo+++++/////////::::---...``````/+`.+/:-..````````````````.```.-://++++++++++++/////::::::---....````` `:+//+++++++++++++++++++++/////////////:::::::---....```````:++++++++++++++++++++++++//////////////:::::::----....`````` .---``-::`

```````````````````````````````````````...---...`````````````````...---::::://////:---...```````````````````````````````````````````...---...``````````````...---:::::://////:---...``` `s./+`-sshhhhhhh/hs.```````````.://+ooossssssssssssssyyyyyyyyyyyyyyyyyyyyyyyyyyyysssoo+++/ooooo++++++++++++++++++++++++++++////////::::::---...`````o./+`-sshhhhhhy-:-````````````.-://+++ooooooooooo++++++++++++++++++////:::----....```./++++++++++++++++++++++++++++++////////:::::::---...`````` .--``.-`

`````````````````````````````````````````...---...``````````...---:::::://///:---...``````````````````````````````````````````...---::---...`````...---:::::://///:---...``` ```````````````` /d./+`-sshhhhhhh/hh:. ````````.:/+oosssyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyysssooo+++++++++++++++++++///////:::::----...`````````````````````+m./+`-sshhhhhhh/hh-.``````.:+osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyssooo+++++++++++++///////:::::----...````` .-``-`

```````````````````````````````````````````...---...---:::::://////:---...``` ```````````````/dd./+`-sshhhhhhh/hh-.`. ::/osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyssoo++++++++++///////:::::----...```` -`

``.``` ```````````````````````````````````````````...---...---:::::://////:---..``` ymd./+`-sshhhhhhh/hh--`.-++yyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhysoo+++++++///////:::::---....```` `

``----.` ```````````````````````````````````````````````...---...---::::://////:---...`` ``````````-hmd./+`-sshhhhhhh/hh+osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyysoo+++++//////:::::---....```` `` ````

`....---..`` ``````````````````````````````````````````````````...````...---:---...---:::::///////:---...`` `-:---ydmd./+`-sshhhhhhhshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddddhhdhhyso++++//////:::::----...``` `````.```````..-```` `````..--.`

`...` `````````````````````````````````````````````````...``````````...---...---::::///////:---...``` `````````-hdmd./+`-sshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdddhhhdddddddddddhs+++++//////:::::----....``` `.``...--...-://++/-``...

``````...`` ````````````````````````````````````````````````..``````````````...---...---::::///////:---...`` ````````omdmd./+`-sshhdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdddddddddddddddddddddy+++++//////:::::---....``` `...``...--://+oooo+/-``:::::::::::::::::::::::::::::::

``````````...`` ``````````````````````````````````````````````..```````````````...---...---::::://////:---..``` ``````-mmdmd./o:shddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdddddddddddddddddddddmmmmmNNNmho+++++//////::::---....``` --...--::/++oossoo+/-.``...

`````````````...``````````````...`` ``````````````````````````````````````````````````````````````...---...---::::://////:---..```````````````````````````````````````````````````````````````...---...---:::::://///:---...``` `````ommdmd:sdddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhdddddddddddddddddddmmmmmNNNNNNNmmmmhhhyyyyso++///::::--...````` +mmmdmmdddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhhdhddddddddddddddddddddddmmmmNNNNNNNmmmmddddhhhhhhhhhhhhhys+/::::--...```..---:::://++oossssoo++/:..```..---::/++oossssoo+/-.``......

`````````````...``` ```````````````````````````````````````````````````````````````...---...---::::://///---...``` `-dNmmmdddddddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdddddddhhddddddddddhdddddddddddddddddddddddmmmmNNNNNNNNmmmmdddddddddhhhhhhhhhhhhhhhhhys+/::--..``````.--:::::::::::///+++ooossssooo+//:-.```...

`````````````````...````...``````````````````````````````````````````````````````````...---...---:::::::////---..``` /NmmmddddddddddddddddddddddddddddddhhhhhhhhhhhhhddhhddhddddddhhhhhhhhdddddddddddddddddddddddddddddddddmmmmNNNNNNNNmmmddddddddddddddddhhhhhhhhhhhhhhhhhhhhhs+:---:::://///////////+++oooooosoooo++//:--.`` `...

````````````````````...---.---...``````````````````````````````````````````````````````...---...---::::::///:---..```````````````````````...---....```````````````````````````````````````````````````...---...---::::::///:--.----..---...``` oNmmmmddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmmmNNNNNNNNNmmmddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhys+/////////////////++++++oooooooooooo++//::--..`-mNmmmmmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmmmmmmmNNNNNNNNNmmmmdddddhhhhhdhhdhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyso++//////+++++++++++++++ooooooossssooooo++//::---.`` `......

``````````````````...---...``````````````````````````````````````````````````...---...---:::::///--...---...``` oNNNNmmmmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddmmmmmmmmmmmNNNNNNNNNNNNNNNNNNNmmmddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyso+++//+++++++++++++++oooooooosssssssssooooo++//:::--..`...

````````````````...---....````````````````````````````````````````````````...---...---::::://:-...---...`` .dNNNNNNmmmmmddddddddddddddddddddddddddddddddddddmmmmmmmmmNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmdddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso++++++++++++++ooooooooooossssssssssssssoooo+++//:::--..`` `...```

```````````````````````...---...```````````````````````````````````````````````...---::::://-...---...`````````````````````````````...---...`````````````````````````````````````````````...---::::::/:-...---..``` /NMMNNNNNNmmmmdddddddddddddddddmmmmmmmmNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmmmmmmmddddmmNNNNNNNNdddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyooooooooooooooooooooooossssssssssssssssssoooo+++//:::--...``...---.`hNMMMNNNNNNNmmmmmmmmmmmmNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmmmmmmmdddddddddddhhhhhhhhhhdNNNNNNNmdddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhsoooooooooooooooooooossssssssssssssssssssooo+++////:::--..`` `...----:.

`````````````````````````````...---...``````````````````````````````````````````...---::::://-...---...``````````````````````````````````...---...````````````````````````````````````...---::::::/:-...---...`` :mNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmmmmmddddddddddddddddddhhhhhhhhhhhhhhhhhhhdNNNNNNmdddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhysssssoooooooooooosssssssssssssssssssssssooo+++////:::--..`` `...---:.`ommmNNNNNNNNNNNNNNNNNNNNNNNNNNNNmmmmmmdddddddddddddddddddddhdhhhhhhhhhhhhhhhhhhhhhhhhhhmNNNNNNdddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyssssssssooooossssssssssssyyyyysssssssssooo+++////::::-...````...---:.

`````````````````````````````````...---...`````````````````````````...---::::://-...---..````````````````````````````````````...---...---...``````````````````...---::::::/:...---...``` -hddmmmNNNNNNNNNNNNNNmmmmmmddddddddddddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmddddhhhhhhhhhhhhhhhhhhhhhhyyyyyyyyyhhhhhhysssssssssssssssssssssyyyyyyyysssssssssooo++++////:::--..````...`.---:.`sdddmmNNNNNNNNNmmddddddddddddddddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmddddhhhhhhhhhhhhhhhhhhhhyyyyyyyyyyyyhhhhhyyyssssssssssssssssyyyyyyyyyysssssssssooo+++++///::::--..````...```.---:.

```````````````````````````````````...---...---...``````````````...---:::::::-...---....`````````````````````````````````````...---...`````````...---:::::/-...---....---...``` :hdddmNNNNNNNmmddddddddddddddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhmNNNNNNmddddhhhhhhhhhhhhhhhhhhyyyyyyyyyyyyyhhhhhyyyyysssssssssyyyyyyyyyyyssysssssssssoooo++++////:::--...````...---. ``.---:.`yddmmNNNNNNmddddddddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmddddhhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyhhhdhyyyyyyyyyyyyyyyyyyyyyyyssyyssssssssooooo++++///:::---...```...----. ``.---:.

``````````````````````````````````````...````...---...`````...---::::/:...---...-....````````````````````````````````````````````...````````...---...---::::-...---...-....``` /ddmNNMNNNmdddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhmNNNNNmdddddhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyhhhhhhyyyyyyyyyyyyyyyyyyyyyyyysssssssssooooo++++////:::---...``...`.---. ``.---:.-dmNNMNNNmddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmddddhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyhhhhdhhyyyyyyyyyyyyyyyyyyyyyysssssssssooooo++++////:::---...`...-``---. ``.---:.

```````````````````````````````````````````...````````````...---...---:::-...---.---...-...`````````````````````````````````````````````````....``````````````...---...---::-...---...```` `ymNNMNNNdddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmddddhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyhhhhhdhhyyyyyyyyyyyyyyyyyyyyysssssssssooooo++++///::::---....`...---sNNMNNNmdddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhmNNNNNmdddddhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyhhhhhdhhhyyyyyyyyyyyyyyyyyyyssssssssooooo++++////:::---...`.----`---. ``.---:.`---. ``.---:.

``````````````````````````````````````````````..````````````````...---..-...---::-...---..-...`````````````````````````````````````````````````.``````````````````...---...---::...---..--...```` +NMNNNmdddddddhhhhhhyyysooo++//:::://////+oooosyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmdddddhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyhhhhddhhhyyyyyyyyyyyyyyyyyssssssssoooo++++////::::---....`...```.----:mNNNNddddddhhhyo/:-..`` ``..:/+syyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhmNNNNNmdddddhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyhhhhddhhhyyyyyyyyyyyyyyyysssssssoooo+++++////::::----...`..```````.----`---. ``.---:.`---. ``.---:.

``````````````````````````````````````````````````````````````````...---::...---.---..-...```````````````````````````````````````````````````````````````````````...---:-...-.---.-...````.dNNNmddddhhhyo:.``hNNmddddhhhy+++:.` .-+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmdddddhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyhhhhhdhhhyyyyyyyyyyyyyyysssssssoooo++++//////:::----...````````.----`-+syhhhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmdddddhhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyyhhhhhhhhhyyyyyyyyyyyyyssssssoooo++++++/////:::----...-.````````.---.`---. ``.---:.`---. ``.---:.

``````````````````````````````````````````````````````````````````````...---:-...---.-.--.-..-...``````````````````````````````````````````````````````````````````````````````...----:-...-....--.--...```` sNNddddhhhy+/+++/-.``+Nmdddhhhho://++o+/:-.``` `/shhhhhhhhhhhhhhhhhhhhhhhhhhmNNNNNmddddddhhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyyyhhhhhhhhhyyyyyyyyyyyssssssoooo++++++/////::::---..---...```````.+yhhhhhhhhhhhhhhhhhhhhhhhhdNNNNNNmdddddhhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyyyyyhhhhhhhhhhyyyyyyyyysssssoooo+++++++////:::----.:/---...```````````` ` `...--```

`````````````````````````````````````````````````````````````````````````````...----:-...---...-.--.--...````/mdddhhhhy::://+ooo++/:-.``` -shhhhhhhhhhhhhhhhhhhhhhhhmNNNNNmddddddhhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyyyyyyhhhhhhhhhyyyyyyyyyssssooooo++++++///::::---syo:--...````` `````

```````````````````````````````````````````````````````````````````````````````````...---::...-...````-dddhhhhho-::///+oooo++/:--.``` .shhhhhhhhhhhhhhhhddhhhhhdNNNNNNddddddddhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyyyyyyyhhhhhhhhhyyyyyyysssssooooo+++++///::::----/yhys/---...````` ``````

````````````````````````````````````````````````````````````````````````````````````````...---:-...-.-...`````.hdhhhhhy:-::///++oooooo+//:-..```` -yhhhhhhhhhhhhhhddddhhhhdNNNNNNmdddddddhhhhhhhhhhhhhhyyyyyyyyyyyyyyysssssyyyyyyyyhhhhhhhhyyyysssssssooooo++++///::::---:shhyyy+---...````` ```````

``````````````````````````````````````````````````````````````````````````````````````````````...---:-...-...```````.sdhhhhho--:::///++oooooo++//:--..`````` `+hhhhhhhhhhhhhhdddddhhhhmNNNNNmddddddddhhhhhhhhhhhhhhyyyyyyyyyyyyssssssssssssyyyyyhhhhhhhyyyysssssssoooo++++////::::--oyyyyhyyo:--...`````` ``````..`

```...```````````````````````````````````````````````````````````````````````````````````...----...`````` ```.shhhhhh/--::::///+++oooooo+++/::-...````````` .yhhhhhhhhhhhhhhddddhhhhdNNNNNNmdddddddhhhhhhhhhhhhhhyyyyyyyyyyssssssssssssssssssyyyyhhhhhhyyyyssssssoooo+++/////:::-+yyyyyyyyyo:---..``````````````````````...`

``...`````````````````````````````````````````````````````````````````````````````````...--:-...``````````.shhhhhy:--::::////+++ooooooo+++//:--...``````````````````````` ```+hhhhhhhhhhhhhhdddddhhhdNNNNNNmddddddhhhhhhhhhhhhhhhhyyyyyyyyyyssssssssooooooosssssyyyyhhhhhhyyssssssooo+++/////:::+yhyyyyyyyyys/---....`````````````````....`

````````````````````...``````````````````````````````````...````````````````````````````...---...``````````.yhhhhhs::::::::////+++ooossooo++///:---...````````````````````````:hhhhhhhhhhhhhhdddddhhhhmNNNNNNdddddddhhhhhhhhhhhhhhhhyyyyyyyyyyssssssooooo+++oooosssyyyyyyhhhhhhyysssooo++++////+syyyyyyyyyyyyyy/:---...``````````...````````

``````````````````````````````````````````````...`````````````````````````````...````````````````...---...`````````-yhhhhhs/::::::://///+++ooosssooo++///::--...```````````````````-yhhhhhhhhhhhhhdddddhhhhdNNNNNNmddddddddhhhhhhhhhhhhhhhyyyyyyyyyyssssssooo++++++++ooossssyyyyyhhhhhhhyyyysssssyyyyyhyyyyyyyyyyyyyy+::---...``````````

```````````````````````````````````````````````````...````````````````````````````````````...``````...---...`````````-hhhhhhs//////:://////+++ooossssooo++///::---...``````````-yhhhhhhhhhhhhhddddddhhyhNNNNNNNdddddddddhhhhhhhhhhhhhhhhyyyyyyyyyssssssooo++++////+++oosssyyyyyyyyhhyhhyyyyyyyyyyyyyyyyyyyyyyyyyyyo:::---...--.```````````

`````````````````````````````````````````````````````...`````````````````````````````````````...--...```````./hhhhhhs+//////////////+++oooosssooo+++///:::---.../yhhhhhhhhhhhhhhdddddhhyhmNNNNNNmdddddddddhhhhhhhhhhhhhhhhhyyyyyyyyysssssooo+++//////+++oosssyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys/:::---.````````````

`````````````````...``````````````````````````````````````````...--...`...-ohhhhhhs++/////////////++++ooooossoooo+++///:::---...---+hhhhhhhhhhhhhhhdddddhhhydNNNNNNNmdddddddddhhhhhhhhhhhhhhhhhyyyyyyyyyyssssooo+++//////++ooossssyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys/::::---.``````````````````````````````...````````````````````````````````````````````````...-...-:+hdhhhhhyoo+++//////////+++++ooooosssoooo+++///:::::---:ohhhhhhhhhhhhhhdddddddhhyhNNNNNMNNmddddddddddhhhhhhhhhhhhhhhhhyyyyyyyyysssssooo++++++++oooosssssyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys/::::::::::::-.``````````````

`````````````````...````````````````````````````````````````````````````````````...--...--::/+ohddddddhsoo++++///////++++++oooooossssoooo+++////:::::::::::::::::/yhhhhhhhhhhhhhhhddddddhhyhmNNNNNMNNmdddddddddddhhhhhhhhhhhhhhhhhyyyyyyyyysssssoooooooooosssssssyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyhhys////:::::::-```````````````````````````````````...`````````````````````````````````````````````````````````````...-...-..----::///+sddddddddyssooo+++++++++++++++ooooossssssoooo+++/////::::::::://///shhhhhhhhhhhhhhhdddddddhhydNNNNNNNNMNNmmdddddddddddhhhhhhhhhhhhhhhyyyyyyyyyyysssssssssssssssssyyyyyyyyyyyyyyyyyyyyyyyyyyyyyhhyhhhyhhhhhhhs//////:::-`````````````````

```````````````````...`````````````````````````````````````````````````````````````...-...---::://///+ydddddmmmhyyssooo+++++++++++++ooooossssssssoooo++++///////////////shhhhhhhhhhhhhhhddddddddhhhmNNNNNNNNNNNNNNmmddddddddddhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyssssssyyyyyyyyyyyyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhs/////::.``````````````````

`````````````````````...`````````````````````````````````````````````````````````````...-...---:::://///++dmmmmmmmmdhyysssooo+++++++++ooooooossssssssssooooo+++++/////////+shhhhhhhhhhhhhhhddddddddhhhdNNNNNNNNNNNNNNNNNNmmddddddddddhhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs///:-.```````````````````

`````````````````````...``````````````````````````````````````````````````````````...-...---::://////++smmmmmmmmmmdhhyysssooooo+++ooooooooossssssssssssooooo++++++++++++shhhhhhhhhhhhhhhhdddddddddhdmNNNNNNmdddmmNNNNNNNNNmmdddddddddhhhhhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho::-```````````````````````````````````...````````````````````````````````````````````````````````...---:::://////++hmmmmmmmNNNmdhhyyysssooooooooooooooosssssssssysssssoooooooo++++oyhhhhhhhhhhhhhhhhhdddddddddddmNNNMNmddhhhhddmNNNNNNNNNmmmddddddddhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhdddddddddddddddddddhhhoo+++++/:.

```````````````````````...````````````````````````````````````````````````````...---:::://///++sdNNNNNNNNNNNmdhhhyyysssoooooooooooossssssssyyyyyysssssooooooooshhhhhhhhhhhhhhhhhhhdddddddddddNNNNMNdddhhhhhhhddmNNNNNNNNNNmmdddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdddddddddddddddddddddddddddddddddddddhhddddo..````````````````````````...--...```````````````````````````````````````````````...---::::://///++ymNNNNNNNNNNNNmddhhhyyyssssssssosssssssssssyyyyyyyyyssssssoosyhddhhhhhhhhhhhhhhhhhdddddddddddmNNNMMmdddhhhhhhhhhhddmmNNNNNNNNNmmmddddddddddddddddhhhhhhhhhhhhhhhdddddddddddddddddddmmmmmmdddddhhyyyyyyyyyyyyyhhhhdhhdyo`

```````````````````````...---...````````````````````````````````````````...---:::://///++odNNNNNNNNNNNNNNNmddhhhyyyyysssssssssssssyyyyyyyyyyyyyyysssyyhdddhhhhhhhhhhhhhhhhhhdddddddddddmNNNMNmdddhhhhhhhhhhhhhhdmmNNNNNMNNNmmmmddddddddddddddddddddddddddddddddddddmmmmmmddhyso+//:---...``````````````...-:/+/`````````````````````````...```````````````````````````...---:::://///+++hNNNNNNNNNNNNNNNNNmmddhhhhyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyhhddddddhhhhhhhhhhhhhhhhhddddddddddddNNNMMNdddhhhhhhhhhhhhhhhhhhdmmNNNNNMNNNNmmmmmddddddddddddddddddddmmmmmmmNNmmdyo/:-..``

`````````````````````````...---::::://///++smNNNNNNNNNNNNNNNNNNNNmdddhhhhhhyyyyyyyyyyyyyyyyyhyyyyhhdddddddddhhhhhhhhhhhhhhhhhddddddddddddmNNMMMmdddhhhhhhhhhhhhhhhhhhhhhdmmNNNNMMMNNNNNmmmmmmmmmmmmmmmmmmNNNNmmdhso/:-`````````````````````````````...``..``````````````...---:::::////++odNNNNNNNNNNNNNNNNNNNNNNNmmddddhhhhhhhhhhhhhhhhhhhhhhdddmdddddddhhhhhhhhhhhhhhhhhhdddddddddddddNNMMMNmdddhhhhhhhhhhhhhhhhhhhhhhhddmNNNNNMMMMNNNNNNNNNNNNNNNNNNmdyo/:.``

`````````````````````````````````...`````````````````````````````...---:::::////++hNNNNNNNNNNNmNNNNNNNNNNNNNNNNmmmmddddddddddddddddmmmmmddddddddddhhhhhhhhhhhhhhhhddddddddddddddmNMMMMNmddddhhhhhhhhhhhhhhhhhhhdddddddmNNNNNMMMMMMMMMMMNNNNmdyo:-.````````````````````````````````````````````````...``````````````````````````````````.`...---::::::///++sNNNNNNNNmmmmmmmmmmmmmmmmmmNNNNNNNNNmmmmmmmmmmmmmmmddddddddddddddhhhhhhhhhhhhhhddddddddddddddddNNMMMMmdddddhhhhhhhhhhhhhhhhhdddddddddddmNNMMMMMMMMMNNmhs+:.```````

```````````````````````````````````````````````````````...``````````````````````````````````````````````...---::::://///+smNNNNNNmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmddddddddddddddddddhhhhhhhhhhhhdddddddddddddddddmNMMMMNmdddddddhhhhhhhhhhhdddddddddddddmmNNMMMMMMNmds+:.`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````...---::::::////+omMNNNNNmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmdddddddddddddddddddddddddhhhhhhhhdddddddddddddddddddddNMMMMMNmdddddddddddddddddddddddddddmmNNNMMMMMNmho/-.```````````

```````````````````````````````````````````````````````````````````````````````````````````````````````````````...---::::://///omMNNNNNmmmmmmmmmmmmmmmmdddddmmdmmdddddddddddddddddddddddddddddddddhddddddddddddddddddddddddddddmNMMMMMNmddddddddddddddddddddddmmmNNMMMMMMNdy+:..`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````...---::::::////omMMNNNNmmmmmmmmmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmMMMMMNmmddddddddddddddddmmmNNNMMMMMMNNds+:..`````````````````

```````````````````````````````````````````````````````````````````````````````````````````````````````...---::::::////smMMNNNNmmmmmmmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmNMMMMMNmmmmdddddddmmmmmNNNMMMMMMMNdyo/-...```````````````````````````````````````````````````````````````````````````````````````````````````````````````````...---:::::::///sNMMNNNNmmmmmmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmNMMMMMNmmmmmmmmmmmNNNMMMMMMMNmhs/-...```````````````

``````````````````````````````````````````````````````````````````````````````````````````````...---::::::://+hNMMNNNNmmmmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmNMMMMMNNNmNNNNNNNMMMMMMMMNmyo/-...``````````````````````````````````````````````````````````````````````````````````````````````````````...---:::::////smMMMNNNNmmmmddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmNMMMMMMNNNNMMMMMMMMMMMNdyo/---...``````````````

```````````````````````````````````````````````````````````````````````````````````...---::::////odNMMMMNNNmmmmddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmmmmmmmmmmmNMMMMMMMMMMMMMMMMMMNds+:---...`````````````````````````````````````````````````````````````````````````````````````````````...---::::////+hNMMMMMNNNmmmmddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmmmmmmmmmmmmmmNNMMMMMMMMMMMMMMNmho/:--...``````````````

` ``````````````````````````````````````````````````````````````````````````...---::::///++ymMMMMMMMNNmmmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmmmmmmmmmmmmNNNNNNNNNMMMMMMMMMMMNdyo/---...``````````````````````````````````````````````````````````````````````````````````````...---:::////++ohmMMMMMMMMMNNmmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddmmmmmmmmmmmmmmmmmmNNNNNNNNNNMMMMMMMMMMNmhs+:---...````````````

```````````````````````````````````````````````````````````````````````...---:::://+++osdNMMMMNMMMMMMNNmmmmdddddddddddddddddddddddddddddddddddddddddddddddddmmmmmmmmmmmmmmmmmmmmNNNNNNNNNNMMMMMMMMMMMmdyo/:---...`````````````````````````````````````````````````````````````````````````````...---::::///+++oshmMMMMNNNNNNMMMMMNNmmmmdddddddddddddddddddddddddddddddddddddddddddmmmmmmmmmmmmmmmmmmmNNNNNNNNNNNMMMMMMMMMMMNmhs+:---...`````````

````````````````````````````````````````````````````````````````...---::::///++ooshmNMMMNNNmmmmmNNMMMMMNNmmmmddddddddddddddddddddddddddddddddddmmmmmmmmmmmmmmmmmmmmNNNNNNNNNNNNMMMMMMMMMMMMNmhso/:---...````````````````````````````````````````````````````````````````````...----:::::///++ooyhmNMMMMNNmmmmmmmmmNNMMMMMNNmmmmddddddddddddddddddddddddmmmmmmmmmmmmmmmmmmmmmNNNNNNNNNNNNNNMMMMMMMMMMMMMNmdyo/:---...````````` ```````````````````````

``` ``````````````````````````````````````````````````````...----:::////++oosyhdmNMMMMMNNmmmmmdddddmmNNMMMMMNNmmmmmdddddddddddmmmmmmmmmmmmmmmmmmmmmmmmmNNNNNNNNNNNNNNMMMMMMMMMMMMMMMNmdyo+::---...`````````` ````````````````````````````````````````

````````````````````````````````````````````````...----:::://+++ooossyhdmNNMMMMMMMMNNmmmdddddddddmmNMMMMMMNNmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMNmdyo+::---...```````````` ````````````````````````...``````````````````

````````````````````...`...---:::::///++++oossyyhhdmmNNMMMMMMMMMMMMNmmmmdddddddddddmmNMMMMMMNNmmmmmmmmmmmmmmmmmmmmmmmmNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMNmhyo//:---...```````````````````` ```````````````````````...````````````````

```````````````...----:::::::::::://///////++++++oooosssyhhhdmmNNNMMMMMMMMMMMMMMMMMNmmmmmddddddddddmmmmNMMMMMMNNNmmmmmmmmmmmmmNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMNNmhyo//::---...``````````````````````````` ` ```````````````````````...---...````````

```````````````....`.-://++oosssyyyyyyyyyyyyyyyyyhhhhddddmmmNNMMMMMMMMMMMMMNNNNMMMMMMMNNmmmmmmmmmmmmmmmmmmmNNMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMNNdhso//::---...`````````````````````````````````````````````````````````````````````````````...---....```````

````````````...-:/++ossyyyhhhhhdddddddddddddmmmmmmmmmmmNNMMMMMMMNNNNNNNNNMMMMMMMNNmmmmmmmmmmmmmmmmmmmmNNMMMMMMMNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMNNmhys+//::::---...``````````````````````````````````````````````````````````````````````````````...---....``````

``````````..---.`.--:/++oossyyyyyyyhhhhhhhhhhhhhddddddddmmmmmNNNMMMMMMMMNNNMMMMMMMMNNmmmmmmmmmmmmmmmmmmmmNNNMMMMMMMMMNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMNmdhyo+//:::::::---...``````````````````````````````````````````````````````````````````````````...---..``````

``````````...---...--://++ooossssssssssyyyyyyyyyyhhhhhhhdddddmmmmmNNMMMMMMMMMMMMMMMMNNmmmmmmmmmmmmmmmmmmmmmNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmmdhso+//:::::::::::---...````````````````````````````````````````````````````````````````````...---::://:---...---...`````

`````````..---...--::///+++ooooooooooooosssssssyyyyyyhhhhhddddmmmmNNNMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMNNmmdhyso++////:::::::::::::---...`````````````````````````````````...---...-:/++ossyyyyso+::---...---...`````

``````````...---::///+++++++++++++ooooooosssssyyyyyyhhhhddddmmmmmNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNmmdhysso++////////////:::::::::::::---...``...`...---...``.-:/oyhdddhhhyyyyyyyyss+::---...`````

``````````...---::://////////++++++++oooooossssssyyyyyyhhhhdddddmmmmmmNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMNNNNNmmmdhyyso++++//////////////////::::::::::::::::---...---...````.-:+sdmNMMNNmmddhhyyyyyyyyssso+/::---..`````

```````...----::://///////////++++++++oooossssssyyyyyyyhhhhhhdddddddmmmmmmmmmmmmmmmmmmmmmmmmdddhhhysssoooo++++++++//////////////////::::::::::::::::::---.---...---...````..:+sdmNMMMMMMNNNmmmddhhyyyyyssysssso/::::---...---...````

````...----:::::://///////////+++++++oooosssssssyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysssssooooooo++++++++++++++++//////////////////::::::::::::::::::::::::---...-...---...``````.-+shmMMMMMMMMMMMMMNNNmmddhhyyyysssssssso+//::::---...---..````

``...----:::::::::://////////++++++oooooossssssssssssoooooo++++++++++++++++++++++++++++++++++++++////////////////////::::::::::::::::::::::::::::::---..----...---.---...----...---...``````.-/ohmNMMMMMMMMMMMMMMMMMMNNNmmddhyyysssssssooo+////::::---.---..```

``...---::::::::::::////////++++++ooooooooooooo++++++++/////////+++++++++++++++++++///////////////////////////::::::::::::::::::::::::::::::::::---...---...```````..:+ydNMMMMMMMMMMMMMMMMMMMMMMMNNNmmddhyyssssoooooooo///////::::---..``

`...---::::::::::::////////+++++++++++++++++////////////////////////+++++////////////////////////////////:::::::::::::::::::::::::::::::::::---...````````.-+sdNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmmddhyssoooooooooo///////::::::---..---..``

``...---::::::::::::////////++++++///////////////////////////////////////////////////////////////////::::::::::::::::::::::::::::::::::---:::::----:::::::::---:::::---...`````````.-+hmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmmdhyssooo+++++++////////:::::---.``

`...---:::::::::////////////////////////////////////////////////////////////////////////////////::::://::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::---::::::::::::::::::---...`````````..-/+++mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmmdhysooo++++++++/////////:::---.``

``...---::::::::::///////////////////////////////////////////////////////////////////////////::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---...````````..-://++++++mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmddhysoo++++++++////////::::---.``

`...---::::::::////////////////////////////////////////////////////////////////////////:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---...``````..--:////////++++mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmmdhysoo++++++///://::::::::---..`

``...---::::::::::////////////////////////////////////////////////////////////////:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---...-://////:::::://+++mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmmdhysoo++++++///:/:::::::::---..``

...---:::::::::::::::::::::::://:::::::::::://////////////////////////:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---...--:////::::::::::::///+/dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmddhysoo++++++//:-::::::::---..``

...---:::::::::::::::::::::::::::::::::::::::://///////////:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://////:::::::::::----...-/++::::::::::::::::::::::////yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmdhyysoo+++//:-.``:::::---..````

...---:::::::::::::::::::::::::::::::::::::::////////:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::///////:::::::----...-/+osyyys/:--::::::::::---::::///oNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmdhysso++/-..``` `:::::---..``````

...---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---...-:/ossyyyyyyyy/---:::::---...-dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmmdhyso/:-..````` `-::---...````````

...---:-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---...-:/osssssssssyyyyyyy/---..``````oMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmmhyo/:-..``````` `-:----...````````

...---::-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---...-/oydmNmmdyssssssssssssyy+---...``````` .mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNdhs+:--...``````` `---...````````

...---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---..-:/oydmNMMMMMNmdyssoooosssssssso:---..``````````sMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmdyo/:--...```````` `.----...````````

...---:---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---:+shdNNMMMMMMMMMMNmdysoooooossssssss:-..---...```````` -mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmdhso/:-...`````````` ``.---...````````

...---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---:/oyhmNMMMMMMMMMMMMMMMMMmdhsoooooooossssss+-...-...``````````oMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNmdhyo+/:-..``````````` `````...````````

...`...---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---/+sydmNMMMMMMMMMMMMMMMMMMMMMMNdhsoooo+oooossooo+-...```````` .hMMMMMMMMMMMMMMMMMMMMMMMMNNmmddhyso+/:-..``````````````````````....````````

...```...---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---:/oydmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMNdhsoo+++++oooooooo/...````````` -mMMMMMMMMMMMMMMMMMMMMNNmmddhhysso+/:-..```````````````````````````````````

...```...---::::::::::::::::::::::::::::::::::::::::::::---:/oshmNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmdyso++++++++oooooo+-...``````````:dMMMMMMMMMMMMMMMNNNmmddhhyysso+/:--..``````````````````````````````

```````````````````````````````````````````````````````````````...``...---::::::::::::::::::::::::::::::::::::---:/oyhmNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmdyso++////+++++++++:...`````````````....```...---:::::::---::/+oyhmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmhyso+//////++++++++/-...`````````-hMMMMMMMMNNNNNmmmddhhyyyssoo+/:--..````.+dmNNNNNmmmdddhhhyyysssoo+//:-..```` ``````````

`...---:/+oyhdNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmhyso+//::///++++++++:...``````````./shhhdddhhhyyyysssooo+//:-..````` ``````

`...`...---:/+oyhmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNdhso++/::::///+++++++/:.``...```````````.:+ossyyysssssoo+++/::-..````` ```````

`...`...---:://+oyhhdmmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmhyso+//::::::///+//////-.``...```````````.-://++++++++//::--..````` ````````

`...`...``...-.---::::///++oossyhhdmmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmdyso+//:::--::://///////:.```...````````````..-:::::::--..``````` `````````

`...`...```````...---:::::::::/::::::///++ossyhhdmmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNdhyo++//::----::://///////:.````...``````````````...```````` ``````````

`...`...``````````...-::-...---:::::::::::://::::::::::::::::://++oosyhhdmmNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNdhyso+//::---::::////////:.`````...```....``````````````````````` ```````````

`...`.`````````````...-::-..---::/+o+/::::::::::::::::::-::::--::://++oosyyhddmNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmdhyso+//::---::::////////:.```````.`````....``````````````````` ````````````

`...````````````````...-:-....---::/o+/::--::----:---::://++ossyhhdmNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmdhyso+//::---:::::///////:.``````````````....``````````` ``````````````

`...`````````````````````..-::-...---::+++::---:://++oosyyhddmNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmdhyso+//::---:::::://////:.```````````````...````````````` `````````````````

`....`````````````````````````..-:-...---:/++/:---:://++oossyyhdmmNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmdhysso+//:---::::::://////-``````````````....``````````````` ```````````````````

`..````````````````````````````..--...---...--:/+/:---:://++oossyyhddmNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmddhyyso++/::---:::::://////:.```````````````...``````````````````` ```` ````````````````````````

`.``````````````````````````````.--...--...-::++:---::://++oossyyhhddmmNNNMMMMMMMMMMMMMMMMMMMMMMMMMNNNmddhhyysoo+//::---::::::///////:.```````````````...`````````````````````````````````````````````````

`````````````````````````````````.--...--:/+/:---::://+++oossyyhhdddmmNNNMMMMMMMMMMMMMMMMNNNmmdddhhhyysoo+//::---::::::///////:.`````````````...```````````````````````````````````````````````

`````````````````````````````````.--...--:/+/---...---..---::://+++ooosssyyhhhddddmmmmmNNNNNMMNmmdddhhhhyyyssoo+//::---:::::::///////:-`````````````...```````````````````````````````````````````

``````````````````````````````````.-..````...--://:-...---..---:::///+++oooosssyyyyyyhhhhhhhhdNNmdhyyyyyysssoo++//:::---...---:::::::////////::.``````````````...``````````````````````````````````````

````````````````````````````````````.-.``````...--://--...---::::///+++oooosssssyyyyyyyyydNmhyssooooo++///:::---...-..---:::::::::///////::-.``````````````...``````````````````````````````````

`````````````````````````````````````.-.``````````...-://:-...---::::////++++oooooooosssssydmhso+++////::::---...---:::::::::::///////::--..``````````````````````````````````````````````````

``````````````````````````````````````.-.````````````````...-://:-...---:::::////++++++++++++oydho+///:::---...---::::::::::::://////:::::---...```````````````````````````````

```````````````````````````````````````.-.````````````````````...-://:-...---:::::://////////+shs+/:::---...---::::::::::::::::::::::::::---```````````````````````````````

```````````````````````````````````````.-.`````````````````````...-::/:-...---:::::::::/oyo/:---...---:-:::::::::::::---...```````````````````````````````

``````.-.```````````````````````...``..--:/:-...---:os+:----...---`

```````.-..`````````````````````````.`.`...```...``...-:/:-...-/++:----...---..---`

`````````.-.````````````````````````````````````..```..-:/:-...-//:---...---...---`

``````````.-..```````````````````````````````````.````..-:::-...-://:--...---...---`

````````````.-.`````````````````````````````````````````..-:::-...-:/:--...---`

``````````````...````````````````````````````````````````..-:::-...-:::--...---`

```````````````...`````````````````````````````````````````..-:::...```....--::--...---`

````````````````....````````````````````````````````````````..--::-...`..`.```...`````...--:--...---`

````````````````...-..````````````````````````````````````````..-::--...````.``````.```````...--::--...---`

````````````````...-..``````````````````````````````````````````..-::-...`...````````````````````````...---...---`

````````````````...-..````````````````````````````````````````````..-::-..``...`````````````````````````````````````...---...---`

````````````````...-..``````````````````````````````````````````````..-::-..``````....```...``.``````.````````````````````````````````````...---...-...---`

````````````````...-..````````````````````````````````````````````````..----..``````````````````````````````````````````````````````````````````````...---.```````````````````````````...`

````````````````...-..```````````````````````````````````````````````````..---..```````````````````````````````````````````````````````````````````````````...----

````````````````...-..``````````````````````````````````````````````````````..---..``````````````````````````````````````````````````````````````````````````````````````````..----

````````````````...-..`````````````````````````````````````````````````````````.---..````````````````````````````````````````````````````````````````````````````````````````..----

````````````````...-..````````````````````````````````````````````````````````````..---..````````````````````````````````````````````````````````````````````````````````````..----

````````````````...-..````````````````````````````````````````````````````````````````.---..`````````````````````````````````````````````````````````````````````````````````..----

````````````````...-..````````````````````````````````````````````````````````````````````..--...````````````````````````````````````````````````````````````````````````````..----

````````````````...`````````````````````````````````````````````````````````````````````````..--....``````````````````````````````````````````````````````````````````````..----

(9)

9/30

SHELLCODE - What's a shellcode ?

Payload

Executable code

Open a shell

Open a port (TCP, socket, ...)

Copy a file (/etc/passwd, ...)

Execute a program

...

execve(/bin/sh) - sajith (19 bytes)

31 C0 50 68 2F 2F 73 68 68 2F 62 69 6E 87 E3 B0 0B CD 80

(10)

9/30

SHELLCODE - What's a shellcode ?

Payload

Executable code

Open a shell

Open a port (TCP, socket, ...)

Copy a file (/etc/passwd, ...)

Execute a program

...

execve(/bin/sh) - sajith (19 bytes)

31 C0 50 68 2F 2F 73 68 68 2F 62 69 6E 87 E3 B0 0B CD 80

(11)

10/30

SHELLCODE - Buffer Overflow + Shellcode = Profit!

Into the Stack

Buffer Overflow Shellcode

(12)

11/30

SHELLCODE - What do we want ?

Assembly coding

Shortest !

NULL free

Printable characters (0x20-0x7F)

Alphanumerical characters

...

(13)

12/30

SHELLCODE - How to make one ?

Starting instruction

Set the registereaxto 0

Instructions Hexadecimal Length (bytes) mov eax, 0x0 B8 00 00 00 00 5

Improvements

mov al, 0x0 B0 00 2

mov al, 0x1

B0 01 FE C8 4 dec al

xor eax, eax 31 C0 2

(14)

12/30

SHELLCODE - How to make one ?

Starting instruction

Set the registereaxto 0

Instructions Hexadecimal Length (bytes) mov eax, 0x0 B8 00 00 00 00 5

Improvements

mov al, 0x0 B0 00 2

mov al, 0x1

B0 01 FE C8 4 dec al

xor eax, eax 31 C0 2

(15)

12/30

SHELLCODE - How to make one ?

Starting instruction

Set the registereaxto 0

Instructions Hexadecimal Length (bytes) mov eax, 0x0 B8 00 00 00 00 5

Improvements

mov al, 0x0 B0 00 2

mov al, 0x1

B0 01 FE C8 4 dec al

xor eax, eax 31 C0 2

(16)

12/30

SHELLCODE - How to make one ?

Starting instruction

Set the registereaxto 0

Instructions Hexadecimal Length (bytes) mov eax, 0x0 B8 00 00 00 00 5

Improvements

mov al, 0x0 B0 00 2

mov al, 0x1

B0 01 FE C8 4 dec al

xor eax, eax 31 C0 2

(17)

13/30

SHELLCODE - Keep pushing !

Improve, adapt, overcome - Printable

Instructions Hexadecimal Length (bytes) Display and al, 0x24

24 24 24 40 4 $$$@

and al, 0x40

and eax, 0x25252525 25 25 25 25 25

25 40 40 40 40 10 %%%%%

%@@@@

and eax, 0x40404040

(18)

14/30

SHELLCODE - The future

Generators

Shellcode Obfuscated shellcode

Encoding

Decoder Encoded shellcode

(19)

14/30

SHELLCODE - The future

Generators

Shellcode Obfuscated shellcode

Encoding

Decoder Encoded shellcode

(20)

14/30

SHELLCODE - The future

Generators

Shellcode Obfuscated shellcode

Encoding

Decoder Encoded shellcode

(21)

15/30

DEFENSE - Introduction

(22)

16/30

DEFENSE - Language choice

(23)

17/30

DEFENSE - Buffer supervision

Classic C : strcopy - strcat A better way :

strncpy - strncat A better better way :

strlcpy - strlcat

(only when using OpenBSD)

(24)

18/30

DEFENSE - Canaries

(25)

19/30

DEFENSE - Canaries

Three types of canaries :

Terminator : filled with strings terminators Random : filled with randoms characters

XOR : filled with XOR-scrambled random characters

(26)

20/30

DEFENSE - Non executable stack

(27)

21/30

DEFENSE - Address space layout randomization

(28)

22/30

DEFENSE - Coverity static analysis

(29)

23/30

DEFENSE - Conclusion

(30)

24/30

REAL CASES - Morris Worm

(31)

25/30

REAL CASES - SQL Slammer

(32)

26/30

REAL CASES - Blaster worm

(33)

27/30

REAL CASES - AOL Instant Messenger

(34)

28/30

REAL CASES - Ghost

(35)

29/30

DEMO

(36)

30/30

References

44CON London -

Attacking VxWorks: from Stone Age to Interstellar

SolarWinds MSP -

Buffer Overflow Vulnerabilities and Prevention

Synopsys Editorial Team :

How to detect, prevent, and mitigate buffer overflow attacks

Rolles, Rolf. ”Synesthesia: A Modern Approach to Shellcode Generation.”

(2016).

Patel, Dhrumil, Aditya Basu, and Anish Mathuria. ”Automatic Generation of Compact Printable Shellcodes for x86.” 14th USENIX Workshop on Offensive Technologies (WOOT 20). 2020.

Hanna, Steve. Shellcoding for Linux and Windows Tutorial, 2007,

www.vividmachines.com/shellcode/shellcode.html.

Références

Documents relatifs

– Modification de l’AR vers un buffer en stack – Modification de l’AR vers un buffer hors stack – Modification de l’AR vers fonction de la LIBC. • Buffers dans

If the only extractable species is the undissociated species HA with a distribution coefficient K D and this is the only existing form of the acid in the organic phase, derive an

The seq and ack Snort options apply to the sequence and acknowledg- ment numbers in the TCP header, but the LOG target does not include these fields by default when a packet

Type n until gdb gets to the return instruction. Now switch to assembly output by typing Control- X 2 twice. Now use si to proceed with the programe assembly instruction by

The checkpoint is not concerned with the database state and, therefore, it does not write any pages from the buffer pool – as discussed later, this concern is delegated to the

As cost reduction/minimization is the perspective of this model, one manager should try to reduce several cost components like setup cost, holding cost, the production cost of the

En faisant le lien avec notre code source et en admettant que nous appelons scanf avec les arguments "%s" et password , on en déduit que 0x400abf est une adresse mémoire

So, to type the gsm_encoding node with the abstract resolution algorithm, we would have to add buffers to communicate the values of the flows Ia, Ib and II, which would transform