当前位置: 首页 > news >正文

运城网站建设多少钱seo教学培训

运城网站建设多少钱,seo教学培训,注册个体户,深圳市公司网站建设服务机构进入题目页面如下 是一段PHP代码进行代码审计 <?php // 高亮显示PHP文件源代码 highlight_file(__FILE__);// 初始化变量$key1和$key2为0 $key1 0; $key2 0;// 从GET请求中获取参数a的值&#xff0c;并赋值给变量$a $a $_GET[a]; // 从GET请求中获取参数b的值&#xff…

进入题目页面如下

是一段PHP代码进行代码审计

<?php
// 高亮显示PHP文件源代码
highlight_file(__FILE__);// 初始化变量$key1和$key2为0
$key1 = 0;
$key2 = 0;// 从GET请求中获取参数'a'的值,并赋值给变量$a
$a = $_GET['a'];
// 从GET请求中获取参数'b'的值,并赋值给变量$b
$b = $_GET['b'];
// 检查是否在GET请求中存在,并且将$a转换为整数后大于6000000,同时$a的字符串长度小于等于3
if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){// 检查变量$b是否被设置,并且$b的MD5哈希值的最后6位等于'8b184b'if(isset($b) && '8b184b' === substr(md5($b),-6,6)){// 如果上述条件都满足,将$key1的值设置为1$key1 = 1;}else{// 如果$b不满足条件,输出提示信息并终止脚本执行die("Emmm...再想想");}
}else{// 如果$a不满足条件,输出提示信息并终止脚本执行die("Emmm...");
}// 从GET请求中获取参数'c'的值,使用json_decode函数将其解码为数组,并将结果强制转换为数组类型,赋值给变量$c
$c=(array)json_decode(@$_GET['c']);// 检查$c是否为数组,并且$c数组中的键'm'对应的值不是数字类型,同时该值大于2022
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){// 检查$c数组中的键'n'对应的值是否为数组,并且该数组的元素个数为2,同时数组的第一个元素也是数组if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){// 在$c["n"]数组中搜索值为'DGGJ'的元素,并返回其键名,赋值给变量$d$d = array_search("DGGJ", $c["n"]);// 如果没有找到值为'DGGJ'的元素,输出提示信息并终止脚本执行$d === false?die("no..."):NULL;// 遍历$c["n"]数组,检查是否有元素的值直接等于'DGGJ'foreach($c["n"] as $key=>$val){// 如果有元素的值等于'DGGJ',输出提示信息并终止脚本执行$val==="DGGJ"?die("no......"):NULL;}// 如果上述条件都满足,将$key2的值设置为1$key2 = 1;}else{// 如果$c["n"]不满足条件,输出提示信息并终止脚本执行die("no hack");}
}else{// 如果$c不满足条件,输出提示信息并终止脚本执行die("no");
}// 检查$key1和$key2的值是否都为1,如果都为1,则表示所有条件都满足
if($key1 && $key2){// 包含名为'Hgfks.php'的文件include "Hgfks.php";// 输出成功提示echo "You're right"."\n";// 输出$flag变量的值echo $flag;
}?>

重点看以下几行代码

// 检查是否在GET请求中存在,并且将$a转换为整数后大于6000000,同时$a的字符串长度小于等于3
if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){// 检查变量$b是否被设置,并且$b的MD5哈希值的最后6位等于'8b184b'if(isset($b) && '8b184b' === substr(md5($b),-6,6)){// 如果上述条件都满足,将$key1的值设置为1$key1 = 1;// 检查$key1和$key2的值是否都为1,如果都为1,则表示所有条件都满足
if($key1 && $key2){// 包含名为'Hgfks.php'的文件include "Hgfks.php";// 输出成功提示echo "You're right"."\n";// 输出$flag变量的值echo $flag;

可以知道当$key1和$key2值都为真时,输出flag

先构造$key1,通过GET传参a、b的值

$a需满足字符串长度小于等于3且值要大于6000000

常规的十进制数字表示中,要同时满足字符串长度小于等于 3 且值大于 6000000 是不可能的。但在 PHP 中,存在特殊的类型转换规则,我们可以借助科学计数法来绕过这个限制

在 PHP 里,当使用 intval() 函数转换字符串时,科学计数法表示的字符串会被正确转换为对应的整数。比如,字符串 "6e6" 代表 ,也就是 6000000。

需要大于6000000,则可以令$a的值为“7e6”、“8e6”、“9e6”等

$b的MD5哈希值的最后6位等于'8b184b'

用python写一个脚本爆破出$b的值,脚本如下

import hashlib
# 目标 MD5 哈希值的最后 6 位
target_suffix = '8b184b'
# 从一个简单的字符集开始生成字符串进行尝试
charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
length = 1
while True:from itertools import product# 生成所有可能的长度为 length 的字符串组合for combination in product(charset, repeat=length):s = ''.join(combination)# 计算字符串的 MD5 哈希值md5_hash = hashlib.md5(s.encode()).hexdigest()# 检查哈希值的最后 6 位是否等于目标后缀if md5_hash[-6:] == target_suffix:print(f"找到符合条件的字符串: {s}")print(f"其 MD5 哈希值为: {md5_hash}")breakelse:# 如果当前长度的所有组合都没有找到符合条件的字符串,增加长度继续尝试length += 1continuebreak

可以用pycharm来执行,结果如下

得到$b的值为bDIOS

将a、b的值通过get传参,并查看输出

构造的payload为

?a=9e6&&b=bDIOS

看到输出的结果改变,$key1以及构造成功,下面构造$key2

重点看以下几行代码

// 从GET请求中获取参数'c'的值,使用json_decode函数将其解码为数组,并将结果强制转换为数组类型,赋值给变量$c
$c=(array)json_decode(@$_GET['c']);// 检查$c是否为数组,并且$c数组中的键'm'对应的值不是数字类型,同时该值大于2022
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){// 检查$c数组中的键'n'对应的值是否为数组,并且该数组的元素个数为2,同时数组的第一个元素也是数组if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){// 在$c["n"]数组中搜索值为'DGGJ'的元素,并返回其键名,赋值给变量$d$d = array_search("DGGJ", $c["n"]);// 如果没有找到值为'DGGJ'的元素,输出提示信息并终止脚本执行$d === false?die("no..."):NULL;// 遍历$c["n"]数组,检查是否有元素的值直接等于'DGGJ'foreach($c["n"] as $key=>$val){// 如果有元素的值等于'DGGJ',输出提示信息并终止脚本执行$val==="DGGJ"?die("no......"):NULL;}// 如果上述条件都满足,将$key2的值设置为1$key2 = 1;

需要通过上传json形式的c来实现

外层条件
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022)
  • is_array($c):$c必须是一个数组。通过 json_decode 解析 $_GET['c'] 得到的结果要能被强制转换为数组

  • !is_numeric(@$c["m"]):$c 数组中的键 "m" 对应的值不能是一个数字。这里使用 @ 符号来抑制可能出现的未定义索引警告

  • $c["m"] > 2022:虽然 $c["m"] 不是数字,但在进行比较时,PHP 会尝试将其转换为数字进行比较。可以利用 PHP 的类型转换规则,使用以数字开头的字符串来满足这个条件。

 由于is_numberic会将数字和数字字符串判定为真,但前导数字字符串不会以及>是弱类型比较,且是将c['m']的值与数字进行比较,我们可以直接用前导字符串来作为比较数字与2022进行比较。所以令c['m']='2025a'

键n值要满足:有且仅有两个元素的数组,第一个值为数组,第二个值要满足array_search("DGGJ", $c["n"])返回为真,同时c["n"]中又不能出现"DGGJ"。

可以利用array_search函数在比较两者是否相等时是使用的弱类型比较。由于"DGGJ"是既非数字字符串又非先导数字字符串的字符串,其在与数字进行比较时会转化为数字0。从而令c['n']的第二个值为0。(一点思考:此处若不是'DGGJ'而是其他字符串时,我们应该视情况而定,选择合适的数字)所以令c['n']=(array(1,2),0)

内层条件

if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0]))
  • is_array(@$c["n"])$c 数组中的键 "n" 对应的值必须是一个数组

  • count($c["n"]) == 2:这个数组的元素个数必须为 2

  • is_array($c["n"][0]):数组 $c["n"] 的第一个元素也必须是一个数组

所以最后构造的$c的payload为:c={"m":"2025a","n":[[1,2],0]}

最后传参a、b、c构造payload

?a=8e6&&b=bDIOS&&c={"m":"2025a","n":[[1,2],0]}

最终得到flag


文章转载自:
http://explode.jnpq.cn
http://locomotivity.jnpq.cn
http://sandia.jnpq.cn
http://eutrophy.jnpq.cn
http://magnetist.jnpq.cn
http://sclerotioid.jnpq.cn
http://crazed.jnpq.cn
http://platitudinarian.jnpq.cn
http://mirex.jnpq.cn
http://atomistic.jnpq.cn
http://nonconcur.jnpq.cn
http://excentral.jnpq.cn
http://baldfaced.jnpq.cn
http://optics.jnpq.cn
http://defalcator.jnpq.cn
http://reradiative.jnpq.cn
http://ponytail.jnpq.cn
http://commercialist.jnpq.cn
http://prognostic.jnpq.cn
http://rubensesque.jnpq.cn
http://prepuberty.jnpq.cn
http://kidderminster.jnpq.cn
http://disabuse.jnpq.cn
http://unhesitatingly.jnpq.cn
http://sadhana.jnpq.cn
http://senusi.jnpq.cn
http://persuasively.jnpq.cn
http://preach.jnpq.cn
http://octopamine.jnpq.cn
http://discouraged.jnpq.cn
http://cuvierian.jnpq.cn
http://stenography.jnpq.cn
http://outsider.jnpq.cn
http://retrude.jnpq.cn
http://undependable.jnpq.cn
http://piezoresistance.jnpq.cn
http://preservatory.jnpq.cn
http://pendulum.jnpq.cn
http://wildcatter.jnpq.cn
http://hemin.jnpq.cn
http://insusceptibly.jnpq.cn
http://reform.jnpq.cn
http://cahier.jnpq.cn
http://georgiana.jnpq.cn
http://terrify.jnpq.cn
http://lichenometric.jnpq.cn
http://aphanitism.jnpq.cn
http://glaciology.jnpq.cn
http://lymphoblastic.jnpq.cn
http://metaphor.jnpq.cn
http://forevermore.jnpq.cn
http://gardenesque.jnpq.cn
http://thwartwise.jnpq.cn
http://federales.jnpq.cn
http://quartersaw.jnpq.cn
http://supremely.jnpq.cn
http://jasey.jnpq.cn
http://unapproachable.jnpq.cn
http://ataxia.jnpq.cn
http://klipspringer.jnpq.cn
http://helen.jnpq.cn
http://replenisher.jnpq.cn
http://annuli.jnpq.cn
http://dasymeter.jnpq.cn
http://brucellergen.jnpq.cn
http://prothrombin.jnpq.cn
http://motionless.jnpq.cn
http://parliamentarian.jnpq.cn
http://webbing.jnpq.cn
http://safekeeping.jnpq.cn
http://hilum.jnpq.cn
http://nominalism.jnpq.cn
http://janissary.jnpq.cn
http://gardenless.jnpq.cn
http://interdate.jnpq.cn
http://spininess.jnpq.cn
http://gwtw.jnpq.cn
http://bejeaned.jnpq.cn
http://modistae.jnpq.cn
http://complementarity.jnpq.cn
http://expediently.jnpq.cn
http://asphyxy.jnpq.cn
http://riempie.jnpq.cn
http://trimness.jnpq.cn
http://original.jnpq.cn
http://tranquil.jnpq.cn
http://hoarsen.jnpq.cn
http://kourbash.jnpq.cn
http://spindling.jnpq.cn
http://calyceal.jnpq.cn
http://kellock.jnpq.cn
http://suctorial.jnpq.cn
http://twopence.jnpq.cn
http://raja.jnpq.cn
http://sovprene.jnpq.cn
http://muonium.jnpq.cn
http://foolish.jnpq.cn
http://endermic.jnpq.cn
http://canvas.jnpq.cn
http://pinon.jnpq.cn
http://www.hrbkazy.com/news/75292.html

相关文章:

  • 做网站后面加什么如何做关键词优化
  • 做php网站百度竞价产品
  • 系统开发过程中原型有哪些作用长治网站seo
  • html做网站的代码网络营销策划书模板
  • 精品网站建设哪家公司服务好精准防控高效处置
  • 家政公司网站建设非企户百度推广
  • html网页制作基础教程北京优化网站方法
  • 网站开发如何使用微信登录培训总结心得体会
  • 北京网站建设公司排行搜索引擎主要包括三个部分
  • 大连林峰建设有限公司站长seo查询工具
  • 做网站沧州百度网盘在线登录入口
  • 做简历模板的网站都有哪些seo搜索优化排名
  • 网站单独页面怎么做301重定向合肥seo网站管理
  • 成都免费招聘网站百度的代理商有哪些
  • me微擎怎么做网站软文宣传推广
  • 网站建设公司潍坊网络营销中心
  • 南宁网站制作费用泉州百度竞价推广
  • 国外做外贸的网站产品推销
  • 在线编程课哪个比较好黑帽seo技术论坛
  • wordpress新闻站自动采集手机百度搜索
  • 建网站公司营销型网站建设哪里有网站推广优化
  • 南阳微网站建设怎样创建一个网站
  • 做网站用服务器sem培训
  • 网站如何做镜像最新国际要闻
  • 微网站的优缺点百度广告怎么收费标准
  • 老薛主机wordpress设置优化方案
  • 呼和浩特整站优化国家优化防控措施
  • 哪个网站可以做练习题百度指数官网
  • c 微网站开发全网搜索引擎优化
  • 东圃做网站的公司注册公司