本文演示了php中SQL攻击的正则表达式,供大家参考,具体分析如下:

我们都知道,在MySQL 5 + information_schema存储所有的库名称,显示字段名称的信息。所以攻击方式如下:

1。确定第一个字符的第一个表是A的性格,在blind_sqli已知库名。

注意:在正则表达式中,^ { A-Z }表示字符串中的字符是字母范围内开始

复制代码如下:指标。phpid = 1,1 =(选择1 information_schema.tables哪里table_schema =blind_sqli 和table_name regexp的^ {到} 'limit 0,1)*

2。确定第一个字符是由一个字符

复制代码如下:指标。phpid = 1,1 =(选择1 information_schema.tables哪里table_schema =blind_sqli 和table_name regexp的^ { A-N } 'limit 0,1)*

三.确定字符是n

复制代码如下:指标。phpid = 1,1 =(选择1 information_schema.tables哪里table_schema =blind_sqli 和table_name regexp的^ n'limit 0,1)*

取代4。表达式如下

复制代码如下:表达是这样的:^ N { }->^ a-z A-Z }的NE { ->^新{ A-Z }->{ }^消息大全>假

此时,表名是新闻,是否说明正则表达式的^新闻$ ',但它是没有必要直接判断table_name =新闻'不'。

5。然后想其他的表只需要修改限制1,1 ->限2,1可以进一步下表盲。

例如:

复制代码如下:exec_commond美元= (的| S)*(exec(的| +)+(S | x)P w +)(的| S)*;

simple_xss美元=(的| S)*((% 3C)|)*(的| );

eval_xss美元= (的| S)*((65)| E)( )*((76)| V)( )*(61)|一)( )*(% 6c))*;

image_xss美元=(的| S)*((% 3C)|)*(的| );

script_xss美元= (的| S)*((73)| S)*((63)| C)( )*(72)| R)×(69)×(69)×;

sql_injection美元=(的| S)*((27)|(')|(% 3D)|(=)|( /)|(% 2F)|(|(|)(22)(- | % 2D){ 2 })|(23)|(% 3b)|(;))+(的| S)*;

SQL攻击代码:

复制代码代码如下:< PHP

功能自定义错误(错误errstr美元,美元,美元errfile美元,errline)

{

回声错误号:{ $ errno },在errfile美元errline美元的错误;

(死亡);

}

set_error_handler(自定义错误

getfilter美元=|(和|或) B +(> < | | = |在|像)| / *,+ * / | < *脚本 B | B |工会预算执行情况。+选择|更新。+ |插入 +到+价值|(选择|删除)。+ |(创建|改变|滴|截断) +(表|数据库);

后置滤波器=美元B(和|或) B. { 1,6 }(= | > | < | bin B | 自行车 B)| / *,+ * / | < *脚本B | B |工会预算执行情况。+选择|更新。+ |插入 +到+价值|(选择|删除)。+ |(创建|改变|滴|截断) +(表|数据库)。

cookiefilter美元= B(和|或) B. { 1,6 }(= | > | < | bin B | 自行车 B)| / *,+ * / | < *脚本B | B |工会预算执行情况。+选择|更新。+ |插入 +到+价值|(选择|删除)。+ |(创建|改变|滴|截断) +(表|数据库)。

功能stopattack(strfiltkey美元美元美元,strfiltvalue,arrfiltreq)

{

如果(is_array($ strfiltvalue))

{

strfiltvalue美元(美元strfiltvalue)=崩溃;

}

如果(preg_match( / 。arrfiltreq美元。 /

{

猛击(运行IP:。_server美元{ remote_addr )。手术时间:。Strftime(% y %M - %:% H M:%s)。操作页面:美元。_server {php_self ,提交模式:美元。_server {request_method 。

打印结果通知:非法操作!;

出口();

}

}

foreach(_get美元美元美元价值的关键= >)

{

stopattack(美元,美元的价值,getfilter美元);

}

foreach(_post美元美元美元价值的关键= >)

{

stopattack(美元美元美元价值的关键,,后置);

}

foreach(_cookie美元美元美元价值的关键= >)

{

stopattack(美元,美元的价值,cookiefilter美元);

}



功能猛击($日志)

{

toppath美元=日志.htm;

TS = fopen(toppath美元美元,+);

作用是:将内容($ TS,$日志。RN;

Fclose($ TS);

}

>

SQL分析:

如果使用这个函数,这个函数将绕过PHP的标准错误处理,所以你可以说你定义了错误处理程序(死亡())。

其次,如果有代码之前执行一个用户定义的程序错误,当时未执行,因此用户不会使用错误处理由用户自己编写的程序。 U3000

然后,PHP中有一套错误处理机制。它可以在PHP的错误处理的set_error_handler(),或使用trigger_error()函数抛出一个错误。

的set_error_handler()函数设置用户定义的错误处理功能。该功能用于创建用户自己的错误在运行过程中的处理方法。它需要创建一个错误处理函数的第一,然后设定误差水平。 U3000 U3000 U3000

使用:

复制代码如下:功能自定义错误(错误errstr美元,美元,美元errfile美元,errline)

{

回声错误代码:{ $ { } } } { errstr errno美元 R;

回声错误的代码行:errline }的{ $文件{ $ errfile } R;

PHP版本

( /死亡);

}

set_error_handler(自定义错误

总结

当PHP遇到错误时,它给出了错误脚本的位置、数量和原因,许多人说这没什么大不了的,但是揭示实际路径的后果是不可想象的。一些入侵者,这个信息是非常重要的,但事实上,有很多的服务器,有这方面的问题。一些网络管理员只需设置display_errors在PHP配置文件,但我认为这种方法太消极了。有时候,我们需要PHP返回错误信息,它可以调试。还需要提供给用户,甚至浏览其他网页的时候,这是错误的。但set_error_handler(),这些矛盾都是可以解决的。但是发现这个功能很少使用。

希望本文能对大家的PHP程序设计有所帮助。