In diesem Artikel wird hauptsächlich die Anmeldung beim Zhengfang Academic Affairs System über die Curl-Bibliothek von PHP vorgestellt. Da das Zhengfang Academic Affairs System möglicherweise jedes Jahr aktualisiert wird, bezieht sich dieser Artikel auf das Jahr 2018. Er stellt einige Methoden zur Simulation der Anmeldung bei Zhengfang I vor Ich hoffe, es kann allen helfen.
Der Inhalt ist wie folgt
Wir können dies sehen. Eine Anfrage ist, wie aus dem Namen ersichtlich, der Bestätigungscode der Seite, der beim Zugriff auf die Anmeldeschnittstelle vom Zhengfang-Server zurückgegeben wird. Ich verweise auf die Blogs anderer Experten, die sagen, dass der Bestätigungscode abgefangen werden kann, ohne ihn einzugeben, aber ich habe ihn mehrmals getestet und festgestellt, dass er nicht funktioniert. Daher bin ich der Meinung, dass Zhengfang diesen Fehler hätte beheben sollen, also sollten wir es tun Geben Sie den Bestätigungscode ehrlich ein.
Es ist auch zu beachten, dass es im obigen Bild einen Parameter-Cookie gibt. Dieser Cookie wird bei jedem Besuch der Seite zurückgegeben, dieser Cookie wird jedoch erst nach erfolgreicher Anmeldung wirksam. Daher müssen wir dieses Cookie speichern, da alle Vorgänge, die wir im Bildungssystem durchführen, dieses Cookie überprüfen, was einer Identitätsauthentifizierung entspricht. Daher ist dieses Cookie unerlässlich.
Im Folgenden verwende ich PHP, um Cookies und Bestätigungscodes lokal zu speichern.
session_start(); $id=session_id(); $_SESSION['id']=$id; $cookie = dirname(__FILE__) . '/cookie/'.$_SESSION['id'].'.txt'; //cookie路径,将cookie写入一个文件中 $verify_code_url = "http://jwgl.hbpu.edu.cn/CheckCode.aspx"; //验证码地址 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $verify_code_url); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //保存cookie curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $img = curl_exec($curl); //执行curl curl_close($curl); $fp = fopen("verifyCode.jpg","w"); //文件名 fwrite($fp,$img); //写入文件 fclose($fp); echo "验证码取出完成,正在休眠,15秒内请把验证码填入code.txt并保存\n"; //停止运行15秒 sleep(15);
Schüler, die mit PHP vertraut sind, sollten in der Lage sein, die Bedeutung dieses Codes zu verstehen. Erstellen Sie zunächst eine Sitzung, speichern Sie jedes Mal das erhaltene Cookie in einem Ordner und erhalten Sie das Cookie und den zurückgegebenen Bestätigungscode, indem wir auf den Domänennamen zugreifen. Um den Bestätigungscode manuell einzugeben, erstellen wir eine code.txt-Datei. Nachdem wir das Bild des Bestätigungscodes im Ordner gesehen haben, schreiben wir es manuell in die code.txt-Datei. Nach fünfzehn Sekunden senden wir eine Anfrage an Zhengfang-Server.
Sie können eine POST-Anfrage sehen, in der einer der Header aufgeführt ist, auf die wir achten sollten Das Bild oben ist Referer. Der Zweck dieses Nachrichtenheaders besteht darin, CSRF zu verhindern. Ich werde am Ende näher darauf eingehen. Werfen wir einen Blick auf die POST-Parameter:
Sie sollten die meisten Parameter erraten können. Auf die Parameter mit leerem Inhalt werde ich nicht näher eingehen und RadioButtonList1.
Der erste Parameter ist der Status der aktuellen Seite, um zu überprüfen, ob wir von der Anmeldeschnittstelle stammen. Dieser Parameter befindet sich im Quellcode der Anmeldeseite.
Der zweite Parameter ist der Typ der Schaltfläche und der Inhalt ist ein GBK-Code. Mein Typ ist Student.
function login_post($url,$cookie,$post){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //不自动输出数据,要echo才行 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //重要,抓取跳转后数据 curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_REFERER, 'http://jwgl.hbpu.edu.cn/'); //重要,302跳转需要referer,可以在Request Headers找到 curl_setopt($ch, CURLOPT_POSTFIELDS,$post); //post提交数据 $result=curl_exec($ch); curl_close($ch); return $result; } $xh='';//此处手动输入学号,上线后通过$_POST得到 $pw='';//此处手动输入密码,上线后通过$_POST得到 $code = file_get_contents("code.txt");//把验证码输入到code.txt中后通过此方法取出验证码 $cookie = dirname(__FILE__) . '/cookie/'.$_SESSION['id'].'.txt';//取出cookie $url="http://jwgl.hbpu.edu.cn/default2.aspx"; //教务处地址 $con1=login_post($url,$cookie,''); preg_match_all('/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/', $con1, $view); //获取__VIEWSTATE字段并存到$view数组中 $post=array( '__VIEWSTATE'=>$view[1][0], 'txtUserName'=>$xh, 'TextBox2'=>$pw, 'txtSecretCode'=>$code, 'RadioButtonList1'=>'%D1%A7%C9%FA', //“学生”的gbk编码 'Button1'=>'', 'lbLanguage'=>'', 'hidPdrs'=>'', 'hidsc'=>'' ); $con2=login_post($url,$cookie,http_build_query($post)); //将数组连接成字符串
An dieser Stelle können wir auf unsere PHP-Datei zugreifen. Wenn Ihr Inhalt wie folgt lautet, herzlichen Glückwunsch, Sie haben sich erfolgreich bei Zhengfang angemeldet.
Wie bereits erwähnt, können wir die darin enthaltenen Funktionsvorgänge nicht ausführen, selbst wenn wir uns erfolgreich anmelden, da jeder Abschnitt dies erfordert unterschiedliche Parameter oder unterschiedliche Anforderungsadressen, daher werde ich hier eine Funktion für den Zugriff auf Scores vorstellen.
Betreten Sie den Abschnitt zur Punkteabfrage und werfen Sie einen Blick auf die Anforderungsadresse und die Parameter.
Die Parameter sind wie folgt:
Jeder sollte diese Parameter verstehen können. Der Inhalt dieses Parameters ist eine zufällig generierte Zeichenfolge. Kein erforderlicher Parameter. Die anderen wurden grundsätzlich bereits erwähnt. _VEIWSTATE ist dieselbe wie die zuvor erhaltene Methode. Der Code ist unten angegeben.
preg_match_all('/<span id="xhxm">([^<>]+)/', $con2, $xm); //正则出的数据存到$xm数组中 $xm[1][0]=substr($xm[1][0],0,-4); //字符串截取,获得姓名 //拼接所需要访问的url,我们需要获取哪个url就去拼接完整的url,此处是获取成绩的url //以后如果需要获取别的数据,就去官网找他的url,看需要哪些参数 $url2="http://jwgl.hbpu.edu.cn/xscj_gc.aspx?xh=".$xh."&xm=".$xm[1][0]; $viewstate=login_post($url2,$cookie,''); preg_match_all('/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/', $viewstate, $vs); $state=$vs[1][0]; //$state存放一会post的__VIEWSTATE //每个页面都有不同的参数请求,根据不同情况来发送不同的参数 $post=array( '__EVENTTARGET'=>'', '__EVENTARGUMENT'=>'', '__VIEWSTATE'=>$state, 'hidLanguage'=>'', 'ddlXN'=>'2016-2017', //当前学年 'ddlXQ'=>'1', //当前学期 'ddl_kcxz'=>'', 'Button1'=>'%B0%B4%D1%A7%C6%DA%B2%E9%D1%AF' //“学期成绩”的gbk编码,视情况而定 ); $content=login_post($url2,$cookie,http_build_query($post)); echo $content;
Okay, der Code ist fertig. Wenn Ihre Seite wie folgt angezeigt wird, sind Sie erfolgreich.
Tatsächlich ist die Anmeldung etwas umständlicher. Nach der Eingabe bleiben Ihnen die beiden notwendigen Parameter Cookie und _VIEWSTATE überlassen Bei jeder POST-Anfrage und dann entsprechend dem Anforderungsformat kombinieren. Der obige Code meldet beim Ausführen keinen Fehler. Bitte kopieren Sie ihn und führen Sie ihn aus. Aber nach ein paar Jahren werden wir sehen, ob Zhengfang die Lücken schließen wird. Der Zeitabstand zwischen dem Lesen anderer Blogs war zu lang, also werde ich einen 18-Jahres-Artikel schreiben. Wenn Sie immer noch etwas nicht verstehen, können Sie es senden Schreiben Sie mir eine private Nachricht oder hinterlassen Sie eine Nachricht im Kommentarbereich. Diskussionen sind willkommen.
Das sogenannte CSRF ist eine Cross-Site-Fälschung, was bedeutet, dass jemand anderes Ihre Identität stiehlt, um eine Anfrage an den Server zu senden, um sich dagegen zu verteidigen Angriff, was bedeutet, dass wir, wenn wir uns erfolgreich beim Zhengfang Academic Affairs System anmelden möchten, über die Anmeldeschnittstellenseite springen müssen, was bedeutet, dass die Adresse vor dem Sprung http://jwgl.hbpu.edu.cn sein muss /. Bei der Prüfung nutzt jeder das akademische Verwaltungssystem seiner eigenen Hochschule, da es sich bei dieser Adresse um das akademische Verwaltungssystem meiner Hochschule handelt und ich mich mit meinem Studierendenausweis und Passwort erfolgreich anmelden kann. Schließlich habe ich einen Blog über CSRF-Angriffe gepostet, der von einem ganz Großen geschrieben wurde. Beschreiben Sie CSRF im Detail. (Klicken Sie auf den Link unten)
CSRF-Angriff und -Verteidigung
In diesem Artikel wird hauptsächlich die Anmeldung des Zhengfang Academic Affairs System über Curl vorgestellt Bibliothek von PHP. Da das System von Zhengfang Academic Affairs möglicherweise jedes Jahr aktualisiert wird, bezieht sich dieser Artikel auf das Jahr 2018 und stellt einige Methoden zur Simulation der Anmeldung bei Zhengfang vor.
Der Inhalt ist wie folgt
Wir können sehen Eine solche Anfrage. Wie aus dem Namen ersichtlich ist, handelt es sich um den Bestätigungscode der Seite, der beim Zugriff auf die Anmeldeschnittstelle vom Zhengfang-Server zurückgegeben wird. Ich verweise auf die Blogs anderer Experten, die sagten, dass der Bestätigungscode abgefangen werden kann, ohne ihn einzugeben, aber ich habe ihn mehrmals getestet und festgestellt, dass er nicht funktioniert. Daher bin ich der Meinung, dass Zhengfang diesen Fehler hätte beheben sollen, also sollten wir es tun Geben Sie den Bestätigungscode ehrlich ein.
Es ist auch zu beachten, dass es im obigen Bild einen Parameter-Cookie gibt. Dieser Cookie wird bei jedem Besuch der Seite zurückgegeben, dieser Cookie wird jedoch erst nach erfolgreicher Anmeldung wirksam, daher benötigen wir ihn um dieses Cookie zu speichern, da alle Vorgänge, die wir im Bildungssystem durchführen, dieses Cookie überprüfen, was einer Identitätsüberprüfung entspricht, daher ist dieses Cookie unerlässlich.
Im Folgenden verwende ich PHP, um Cookies und Bestätigungscodes lokal zu speichern.
session_start(); $id=session_id(); $_SESSION['id']=$id; $cookie = dirname(__FILE__) . '/cookie/'.$_SESSION['id'].'.txt'; //cookie路径,将cookie写入一个文件中 $verify_code_url = "http://jwgl.hbpu.edu.cn/CheckCode.aspx"; //验证码地址 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $verify_code_url); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //保存cookie curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $img = curl_exec($curl); //执行curl curl_close($curl); $fp = fopen("verifyCode.jpg","w"); //文件名 fwrite($fp,$img); //写入文件 fclose($fp); echo "验证码取出完成,正在休眠,15秒内请把验证码填入code.txt并保存\n"; //停止运行15秒 sleep(15);
Schüler, die mit PHP vertraut sind, sollten in der Lage sein, die Bedeutung dieses Codes zu verstehen. Erstellen Sie zunächst eine Sitzung, speichern Sie jedes Mal das erhaltene Cookie in einem Ordner und erhalten Sie das Cookie und den zurückgegebenen Bestätigungscode, indem wir auf den Domänennamen zugreifen. Um den Bestätigungscode manuell einzugeben, erstellen wir eine code.txt-Datei. Nachdem wir das Bild des Bestätigungscodes im Ordner gesehen haben, schreiben wir es manuell in die code.txt-Datei. Nach fünfzehn Sekunden senden wir eine Anfrage an Zhengfang-Server.
Sie können eine POST-Anfrage sehen, in der einer der Header aufgeführt ist, auf die wir achten sollten Das Bild oben ist Referer. Der Zweck dieses Nachrichtenheaders besteht darin, CSRF zu verhindern. Ich werde am Ende näher darauf eingehen. Werfen wir einen Blick auf die POST-Parameter:
Sie sollten die meisten Parameter erraten können. Auf die Parameter mit leerem Inhalt werde ich nicht näher eingehen und RadioButtonList1.
Der erste Parameter ist der Status der aktuellen Seite, um zu überprüfen, ob wir von der Anmeldeschnittstelle stammen. Dieser Parameter befindet sich im Quellcode der Anmeldeseite.
Der zweite Parameter ist der Typ der Schaltfläche und der Inhalt ist ein GBK-Code. Mein Typ ist Student.
function login_post($url,$cookie,$post){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //不自动输出数据,要echo才行 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //重要,抓取跳转后数据 curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_REFERER, 'http://jwgl.hbpu.edu.cn/'); //重要,302跳转需要referer,可以在Request Headers找到 curl_setopt($ch, CURLOPT_POSTFIELDS,$post); //post提交数据 $result=curl_exec($ch); curl_close($ch); return $result; } $xh='';//此处手动输入学号,上线后通过$_POST得到 $pw='';//此处手动输入密码,上线后通过$_POST得到 $code = file_get_contents("code.txt");//把验证码输入到code.txt中后通过此方法取出验证码 $cookie = dirname(__FILE__) . '/cookie/'.$_SESSION['id'].'.txt';//取出cookie $url="http://jwgl.hbpu.edu.cn/default2.aspx"; //教务处地址 $con1=login_post($url,$cookie,''); preg_match_all('/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/', $con1, $view); //获取__VIEWSTATE字段并存到$view数组中 $post=array( '__VIEWSTATE'=>$view[1][0], 'txtUserName'=>$xh, 'TextBox2'=>$pw, 'txtSecretCode'=>$code, 'RadioButtonList1'=>'%D1%A7%C9%FA', //“学生”的gbk编码 'Button1'=>'', 'lbLanguage'=>'', 'hidPdrs'=>'', 'hidsc'=>'' ); $con2=login_post($url,$cookie,http_build_query($post)); //将数组连接成字符串
An dieser Stelle können wir auf unsere PHP-Datei zugreifen. Wenn Ihr Inhalt wie folgt lautet, herzlichen Glückwunsch, Sie haben sich erfolgreich bei Zhengfang angemeldet.
Wie bereits erwähnt, können wir die darin enthaltenen Funktionsvorgänge nicht ausführen, selbst wenn wir uns erfolgreich anmelden, da jeder Abschnitt dies erfordert unterschiedliche Parameter oder unterschiedliche Anforderungsadressen, daher werde ich hier eine Funktion für den Zugriff auf Scores vorstellen.
Betreten Sie den Abschnitt zur Punkteabfrage und werfen Sie einen Blick auf die Anforderungsadresse und die Parameter.
Die Parameter sind wie folgt:
Jeder sollte diese Parameter verstehen können. Der Inhalt dieses Parameters ist eine zufällig generierte Zeichenfolge. Kein erforderlicher Parameter. Die anderen wurden grundsätzlich bereits erwähnt. _VEIWSTATE ist dieselbe wie die zuvor erhaltene Methode. Der Code ist unten angegeben.
preg_match_all('/<span id="xhxm">([^<>]+)/', $con2, $xm); //正则出的数据存到$xm数组中 $xm[1][0]=substr($xm[1][0],0,-4); //字符串截取,获得姓名 //拼接所需要访问的url,我们需要获取哪个url就去拼接完整的url,此处是获取成绩的url //以后如果需要获取别的数据,就去官网找他的url,看需要哪些参数 $url2="http://jwgl.hbpu.edu.cn/xscj_gc.aspx?xh=".$xh."&xm=".$xm[1][0]; $viewstate=login_post($url2,$cookie,''); preg_match_all('/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/', $viewstate, $vs); $state=$vs[1][0]; //$state存放一会post的__VIEWSTATE //每个页面都有不同的参数请求,根据不同情况来发送不同的参数 $post=array( '__EVENTTARGET'=>'', '__EVENTARGUMENT'=>'', '__VIEWSTATE'=>$state, 'hidLanguage'=>'', 'ddlXN'=>'2016-2017', //当前学年 'ddlXQ'=>'1', //当前学期 'ddl_kcxz'=>'', 'Button1'=>'%B0%B4%D1%A7%C6%DA%B2%E9%D1%AF' //“学期成绩”的gbk编码,视情况而定 ); $content=login_post($url2,$cookie,http_build_query($post)); echo $content;
Okay, der Code ist fertig. Wenn Ihre Seite wie folgt angezeigt wird, sind Sie erfolgreich.
Tatsächlich ist es beim Anmelden etwas schwieriger. Nach der Eingabe sind die beiden erforderlichen Parameter Cookie und _VIEWSTATE erforderlich. Überprüfen Sie für andere Parameter einfach jede POST-Anfrage. und dann gemäß Einfach die Anforderungsformate kombinieren. Der obige Code meldet beim Ausführen keinen Fehler. Bitte kopieren Sie ihn und führen Sie ihn aus. Aber nach ein paar Jahren werden wir sehen, ob Zhengfang die Lücken schließen wird. Der Zeitabstand zwischen dem Lesen anderer Blogs war zu lang, also werde ich einen 18-Jahres-Artikel schreiben. Wenn Sie immer noch etwas nicht verstehen, können Sie es senden Schreiben Sie mir eine private Nachricht oder hinterlassen Sie eine Nachricht im Kommentarbereich. Diskussionen sind willkommen.
Das sogenannte CSRF ist eine Cross-Site-Fälschung, was bedeutet, dass jemand anderes Ihre Identität stiehlt, um eine Anfrage an den Server zu senden Um sich gegen diesen Angriff zu verteidigen, müssen wir, wenn wir uns erfolgreich beim Zhengfang Academic Affairs System anmelden möchten, über die Anmeldeschnittstellenseite springen, was bedeutet, dass die Adresse vor dem Sprung http://jwgl.hbpu sein muss .edu.cn/ . Bei der Prüfung nutzt jeder das akademische Verwaltungssystem seiner eigenen Hochschule, da es sich bei dieser Adresse um das akademische Verwaltungssystem meiner Hochschule handelt und ich mich mit meinem Studierendenausweis und Passwort erfolgreich anmelden kann. Schließlich habe ich einen Blog über CSRF-Angriffe gepostet, der von einem ganz Großen geschrieben wurde. Beschreiben Sie CSRF im Detail. (Klicken Sie auf den Link unten)
CSRF-Angriff und -Verteidigung.
Verwandte Empfehlungen:
10 empfohlene Artikel über das Bildungsverwaltungssystem
Ein kleines Programm, das die Anmeldung am Bildungsverwaltungssystem simuliert GPA berechnen
Das obige ist der detaillierte Inhalt vonPHP implementiert eine simulierte Anmeldung beim Zhengfang Academic Affairs System. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!