本文原创作者:萌新

前情提要:

萌新带你开车上p站(一)

萌新带你开车上p站(二)

0x08


题目给的提示是和运算符优先级有关

登录后直接看源码

mistake@pwnable:~$ lsflag  mistake  mistake.c  passwordmistake@pwnable:~$ cat mistake.c#include <stdio.h>#include <fcntl.h>#define PW_LEN 10#define XORKEY 1void xor(char* s, int len){int i;for(i=0; i<len; i++){s[i] ^= XORKEY;}}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[PW_LEN+1];int len;if(!(len=read(fd,pw_buf,PW_LEN) > 0)){printf("read error\n");close(fd);return 0;}char pw_buf2[PW_LEN+1];printf("input password : ");scanf("%10s", pw_buf2);// xor your inputxor(pw_buf2, 10);if(!strncmp(pw_buf, pw_buf2, PW_LEN)){printf("Password OK\n");system("/bin/cat flag\n");}else{printf("Wrong Password\n");}close(fd);return 0;}

看关键:

main调用的xor函数:

将长度给len的字符串与1异或

main中的主要逻辑

从/home/mistake/password读10个字节数据放到pw_buf,我们手动输入10字节数据放在pw_buf2,如果pw_buf2与1异或的结果如果与pw_buf相等,则打印flag

那么关键就是pw_buf的数据,先直接读password看看

没有权限

题目的提示是和运算符优先级有关

我们仔细分析源码,看看问题出在哪里

问题在这里

if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0){

open函数里权限检查是没问题的,O_RDONLY表示以只读方式打开

0400表示文件所有者具有可读取的权限

由于权限通过检查,所以open函数返回值为0

有因为0<0不成立

所有比较结果为0

然后赋值给fd

即fd为0,表示标准输入,也就是说fd现在是我们可控的

结合之前分析,pw_buf也为我们控制

那就很简单了

第一次输入10个1,存入pw_buf

第二次输入10个0,存入pw_buf2,与1异或后覆盖pw_buf2,此时buf2的值也为10个1,满足打印flag的逻辑

0x09 shellshock


查看权限

可以看到shellshock程序的所属组的权限位上有s,表示sgid,也就是说在执行shellshock时,用户将获得shellshcok所属组的权限,即执行shellshock后将获得root所在用户组的权限,而由flag这一行的权限位可知,该权限可以读取flag

这一点从源码中也可以看出来

getegid()返回进程执行有效组识别码。在这里getegid()返回的就是root所在用户组的id

setresuid用于设置ruid,euid,seuid,在这里就是统统都设置为进程当前的egid

setresgid用于设置rgid,egid,sgid,这里也是统统设置为进程当前的egid

因为s标志,所以egid实际上是root所在用户组的id

再根据题目提示的shellshock

这是著名的bash破壳漏洞

直接在网上找到poc修改下即可

解释一下发生了什么

首先在当前环境下定义了X函数,函数体由{}括起来,然后在函数体外加了一条额外的语句/bin/cat ./flag即打印flag的命令,这条语句会在后面执行./shellshock时被调用,由于执行shellshock时会有root权限,所以自然就有权限来打印flag了

想知道怎么操作吗?点击操作——破壳漏洞实践:http://www.hetianlab.com/expc.do?ec=ECID172.19.105.222014092915250400001

0x10


按照要求连接服务器

这是一个小游戏

大意是一堆货币里有真币假币,两者重量不同,真币10g,假币9g。给你N个硬币,C次机会,让你猜哪一个是假币。需要在30s的时间里才对100次。

这题其实考的是算法。

分治法解决

举个例子。

一共100个硬币,其中1个是假的,先称重1-49,如果结果整除10,则假币在50-100.

第二轮称50-75,如果不整除10,则假币在其中

第三轮称50-62.。。。。

其实就是简单的二分法

编程

import timefrom pwn import *conn = remote('0', 9007)conn.recv(10000)for _ in range(100)://猜100次line = conn.recv(1024).decode('UTF-8').strip().split(' ')print(line)n = int(line[0].split('=')[1])//读出给的n,cc = int(line[1].split('=')[1])left = 0right = n//共n个硬币for _ in range(c)://二分法猜解guess = ' '.join(str(left) for left in range(left, int((left+right)/2)))conn.sendline(guess)//给出需要猜测的货币output = int(conn.recv(1024).decode('UTF-8').strip())//读取返回称重的结果if (output % 10 == 0)://整除10的情况left = int((left+right)/2)else://不整除的情况right = int((left+right)/ 2)conn.sendline(str(left))print(conn.recv(1024).decode('UTF-8'))//打印一轮的结果print(conn.recv(1024).decode('UTF-8'))conn.close()

以上一关的shellshock登录服务器,在tmp目录下新建一个python 脚本

按照提示

用pwntools编写的时候,注意remote(‘0’,9007)

执行如下

0x11 blackjack 


em...源码有点长,直接看关键部分

这里会校验我们输入的金额

如果比cash大则会报错,并要求再次输入

不过再次输入的时候不会报错了

考虑到要赚够1000000,而输的几率比较大

我们可以输入-的金额,比如-1000000,只要输了就可以拿到flag

然后选择y就打印出flag了

未完待续......

萌新带你开车上p站(三)相关推荐

  1. 萌新带你开车上p站(二)

    本文作者:萌新 前情提要:萌新带你开车上p站(一) 0x04flag  看题目描述似乎是一个和脱壳相关的逆向题目 按照给出的地址先下载过来 file看看 是个可执行文件 执行之 emm什么都看不出来, ...

  2. 萌新带你开车上p站(完结篇)

    本文原创作者:萌新 前情提要: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 萌新带你开车上P站(三) 萌新带你开车上P站(IV) 回顾一下前篇,我们开始新的内容吧 0x16memcpy 源码在 ...

  3. 萌新带你开车上p站(Ⅳ)

    本文原创作者:萌新 前情提要: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 萌新带你开车上P站(三) 回顾一下前篇,我们开始新的内容吧 0x12 登录后看源码 通读程序,逻辑是这样子的: 输入 ...

  4. 萌新带你开车上p站(一)

    原创作者:萌新 0x01前言 这一系列文章为pwnable.krToddlr's Bottle的全部题解,其中有三道题目相对而言稍难或者说比较经典,单独成篇,其他题目的题解放在一起发出来. 本文涉及知 ...

  5. 萌新带你开车上p站(终极番外)

    本文由"合天智汇"公众号首发,作者:萌新 0x01前言 这关其实和pwn关系不大,主要考察的都是linux下一些函数的操作,考察linux的基本功.涉及到的知识点包括一些经典的函数 ...

  6. 萌新带你开车上p站(番外篇)

    前言 这道题目应该是pwnable.kr上Toddler's Bottle最难的题目了,涉及到相对比较难的堆利用的问题,所以拿出来分析. 登录 看看源程序 程序中有几点要注意的地方: 1. 定义的OB ...

  7. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下: http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这 ...

  8. python数据分析常用的算法_萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (上)理解篇...

    理解 以a b为变量,预测值与真值的差的平方和为结果的函数 参数学习的基本方法:找到最优参数使得预测与真实值差距最小 假设可以找到一条直线 y = ax+b 使得预测值与真值的差的平方和最小 故事 假 ...

  9. 萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第四节 PCA与梯度上升 (上)理解篇...

    转载于:https://www.cnblogs.com/romannista/p/10811992.html

最新文章

  1. 腾讯 QQ 就“读取浏览器历史记录”道歉!
  2. Windows中断编程
  3. java中 instanceof 的用法
  4. 笔记-项目管理基础知识-项目管理办公室(PMO)
  5. 使用BeetleX访问redis服务
  6. 【CodeForces - 144D】Missile Silos(单源最短路,枚举中间边,枚举情况可能性)
  7. 朱啸虎:自己来说可以把一小部分资产购买比特币,作为资产配置是可以考虑的
  8. 美女在中国移动家属院上厕所
  9. MySQL与Redis缓存问题-开课吧
  10. VMware、vSphere 6.0 介绍
  11. Liunx安装 jemalloc == 内存管理工具
  12. 【RWM】基于matlab路由无线传感器网络模拟随机路点运动模型【含Matlab源码 1565期】
  13. 小象学院python网课值得吗-2018最新小象学院Python数据分析视频教程升级版第2期...
  14. [bzoj4199][NOI2015]品酒大会
  15. vob格式转换mp4格式方法
  16. 长在火山熔岩石板地上的大米
  17. VS2010+DDK配置
  18. 功能安全-26262-理论到实践-基础知识-标准机构与认可、认证
  19. 跟siki学院教程学习愤怒的小鸟案例猪多次碰撞解决记录<一>
  20. 体验一把 Flowable 三种常见网关

热门文章

  1. 分享50个AI绘画prompt的关键词,让你的AI绘画更贴近想法
  2. MegaCli64工具磁盘修复处理
  3. ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57【转】
  4. 亚马逊美国站对CPC认证有什么要求
  5. 自然语言处理理论和应用
  6. 【MySQL 第一天安装教程】
  7. Java项目:农产品溯源管理系统(java+SSM+JSP+LayUI+jQuery+mysql)
  8. 云计算机比本地机更可靠吗,云电脑的配置有几种选择?云电脑配置和本机有关系吗?...
  9. 软件工程毕业设计课题(68)微信小程序毕业设计PHP民宿酒店预订小程序系统设计与实现
  10. 语音识别 - 历史发展