当前位置: 首页 > news >正文

新桥做网站公司做网站虚拟主机配置

新桥做网站公司,做网站虚拟主机配置,网站怎么制作教程,深圳网站设计按天收费目录 前言 命令行参数 16进制转字符串 extract_message1 process_keys12 extract_message2 main process_keys34 前言 因为这个学期基本都在搞CTF的web方向#xff0c;C语言不免荒废。所幸还会一点指针相关的知识#xff0c;故第一个安全项目做的挺顺利的#xff0c…目录 前言 命令行参数 16进制转字符串 extract_message1 process_keys12 extract_message2 main process_keys34 前言 因为这个学期基本都在搞CTF的web方向C语言不免荒废。所幸还会一点指针相关的知识故第一个安全项目做的挺顺利的也把思维切换切换接触点新东西。 贴出源码 #include stdio.h #include stdlib.hint prologue[] {0x5920453A, 0x54756F0A, 0x6F6F470A, 0x21643A6F,0x6E617920, 0x680A6474, 0x6F697661, 0x20646E69,0x63636363, 0x63636363, 0x72464663, 0x6F6D6F72,0x63636363, 0x63636363, 0x72464663, 0x6F6D6F72,0x2C336573, 0x7420346E, 0x20216F74, 0x726F5966,0x7565636F, 0x20206120, 0x6C616763, 0x74206C6F,0x20206F74, 0x74786565, 0x65617276, 0x32727463,0x594E2020, 0x206F776F, 0x79727574, 0x4563200A };int data[] {0x63636363, 0x63636363, 0x72464663, 0x6F6D6F72,0x466D203A, 0x65693A72, 0x43646E20, 0x6F54540A,0x5920453A, 0x54756F0A, 0x6F6F470A, 0x21643A6F,0x594E2020, 0x206F776F, 0x79727574, 0x4563200A,0x6F786F68, 0x6E696373, 0x6C206765, 0x796C656B,0x2C336573, 0x7420346E, 0x20216F74, 0x726F5966,0x7565636F, 0x20206120, 0x6C616763, 0x74206C6F,0x20206F74, 0x74786565, 0x65617276, 0x32727463,0x6E617920, 0x680A6474, 0x6F697661, 0x20646E69,0x21687467, 0x63002065, 0x6C6C7861, 0x78742078,0x6578206F, 0x72747878, 0x78636178, 0x00783174 };int epilogue[] {0x594E2020, 0x206F776F, 0x79727574, 0x4563200A,0x6E617920, 0x680A6474, 0x6F697661, 0x20646E69,0x7565636F, 0x20206120, 0x6C616763, 0x74206C6F,0x2C336573, 0x7420346E, 0x20216F74, 0x726F5966,0x20206F74, 0x74786565, 0x65617276, 0x32727463 };char message[100];void usage_and_exit(char* program_name) {fprintf(stderr, USAGE: %s key1 key2 key3 key4\n, program_name);exit(1); }void process_keys12(int* key1, int* key2) {*((int*)(key1 *key1)) *key2; }void process_keys34(int* key3, int* key4) {*(((int*)key3) *key3) *key4; }char* extract_message1(int start, int stride) {int i, j, k;int done 0;for (i 0, j start 1; !done; j) { for (k 1; k stride; k, j, i) {if (*(((char*)data) j) \0) {done 1;break;}message[i] *(((char*)data) j);}}message[i] \0;return message; }char* extract_message2(int start, int stride) { int i, j;for (i 0, j start;*(((char*)data) j) ! \0;i, j stride){message[i] *(((char*)data) j);}message[i] \0;return message; }int main(int argc, char* argv[]) {int dummy 1;int start, stride;int key1, key2, key3, key4;char* msg1, * msg2;key3 key4 0;if (argc 3) {usage_and_exit(argv[0]);}key1 strtol(argv[1], NULL, 0);key2 strtol(argv[2], NULL, 0);if (argc 3) key3 strtol(argv[3], NULL, 0);if (argc 4) key4 strtol(argv[4], NULL, 0);process_keys12(key1, key2);start (int)(*(((char*)dummy))); stride (int)(*(((char*)dummy) 1)); if (key3 ! 0 key4 ! 0) {process_keys34(key3, key4);}msg1 extract_message1(start, stride);if (*msg1 \0) {process_keys34(key3, key4);msg2 extract_message2(start, stride);printf(%s\n, msg2);}else {printf(%s\n, msg1);}return 0; }命令行参数 在C语言程序中主函数main()可以有两个参数用于接收命令行参数。带有参数的函数main()习惯上书写为 颇有pearcmd的感觉哈哈哈 int main(int argc,char *argv[]) { ... } argc和argv是函数main()的形参argc和argv分别是argument count和argument vector的缩写。用命令行的方式运行程序时函数main()被调用与命令行有关的信息作为实参传递给两个形参。 第一个参数argc接收命令行参数包括命令的个数第二个参数argv接受以字符串常量形式存放的命令行参数包括命令本身也作为一个参数。字符指针数组argv[]表示各个命令行参数包括命令其中argv[0]指向命令argv[1]指向第1个命令行参数argv[2]指向第2个命令行参数......argv[argc-1]指向最后一个命令行参数。 审一下源码的这部分 其实就是让我们最少传2个参数(第0个参数为程序名)否则就会exit 16进制转字符串 这里显然只有data数组有用只需要转换data数组即可 如果直接用16进制转字符串的网站会发现转换结果并不正确 于是跟着代码逻辑自己写一版16进制逐字节解码程序 #include stdio.hint data[] {0x63636363, 0x63636363, 0x72464663, 0x6F6D6F72,0x466D203A, 0x65693A72, 0x43646E20, 0x6F54540A,0x5920453A, 0x54756F0A, 0x6F6F470A, 0x21643A6F,0x594E2020, 0x206F776F, 0x79727574, 0x4563200A,0x6F786F68, 0x6E696373, 0x6C206765, 0x796C656B,0x2C336573, 0x7420346E, 0x20216F74, 0x726F5966,0x7565636F, 0x20206120, 0x6C616763, 0x74206C6F,0x20206F74, 0x74786565, 0x65617276, 0x32727463,0x6E617920, 0x680A6474, 0x6F697661, 0x20646E69,0x21687467, 0x63002065, 0x6C6C7861, 0x78742078,0x6578206F, 0x72747878, 0x78636178, 0x00783174};void decode1(int* data){for (int i 0; ; i) {char c *(((char*)data) i);putchar(c);if (c \0) break;}}int main(){decode1(data);return 0;} 运行结果 两者的差异是什么原因呢 因为Intel处理器是小端所以数组里每个int的低位存储在内存的低地址处即先被转化 例如 int 0x5A33723479(Z3r4y) 在内存中 79 34 72 33 5A(y4r3Z) 所以我们把data的数据先预处理一下再放入16进制转字符串在线网站即可虽然没有必要 接下来看一些关键代码 extract_message1 传入一个start和stride将data数组转换成字符串 这个函数的功能是从 data 数组的首地址偏移 start 1 地址开始每转换 stride -1 个字符后就跳过一个字符不转换重复执行这样的操作直到转换到最后一个字符 已知明文最开始为From: 可利用其来倒推出start和stride 这里显然是从第10个字符开始从0开始计数每次转换两个字符故start9,stride3 再发现start和stride是由dummy得来的 将dummy最低的字节赋值给start(要等于9)将dummy第二低的字节赋值给stride要等于3 即dummy为0x????0309 记录一下低2位转10进制是777 process_keys12 访问以 key1 变量的地址为初始地址偏移 *key1 的值×sizeof(int) 即4字节的地址赋成*key2的值。 这里就可以操纵key1地址将其偏移到dummy的地址再操纵*key2来控制dummy的值 调试看key1和dummy的地址 左为key1右为dummy 计算地址差值 24➗49 所以只要令*key19即可偏移到dummy的地址 再令*key2777使得dummy为0x00000309成功使得start为9stride为3 回显正确 提示我们要选择key3key4来调用extract2并且避免调用extract1 extract_message2 其实和extract_message1大同小异 从 data 数组的首地址偏移 start 地址开始每读入一个字符就跳过stride-1个字符直到转换到最后一个字符 可见start9,stride3 刚好就是msg1对应的数据故key1,key2传的值不用改 main 通过代码审计发现只要让extract_message1返回一个空字符串就可以打印出msg2 我们接着看怎么操纵msg1\0 extract1 最初会访问第10个字符从0开始计数而第10个字符恰好会在 extract2 从第9个字符开始每隔2个取一个中被忽略不会影响答案。 所以我们可以直接尝试改变 data 数组使其表示的第10个字符为 \0 即将data[2]0x72464663转变成 0x72004663 。 可以借助 process_keys34 来操纵data[2] process_keys34 这个函数就是把指向key3指针的地址偏移*key3的值×sizeof(int)即4个字节的地址将其解引用自增一个*key4的值 那么我们就可以将指向key3指针的地址偏移到data[2]上然后利用*key4改变data[2]的值这里72004663-72464663-4587520key4传入-4587520即可 调试观察key3和data[2]的地址 2597600/4649400 所以key3传入649400 综上key1,key2,key3,key4分别传入9 777 649400 -4587520 运行回显正确 实验1还是比较友好的做的时候没有太坐牢对于一个C语言小白这种难度刚刚好QWQ
http://www.zqtcl.cn/news/204265/

相关文章:

  • 新余 网站建设公司浏览不良网页的危害
  • 长春做网站哪里好西安有什么网页设计公司
  • 昆明网站建设精英免费自己建网页
  • 网站开发框架 开源买的有域名怎么做网站
  • 为什么做电商网站成都在哪建设网站
  • 有没有做请帖的网站南漳网站制作
  • 项目信息网站哪个好企业开展网络营销方案
  • 网站开发制作费入会计科目做毕业设计个人网站任务书
  • 自己建一个网站微信指数官网
  • 产品推广网站模板哪里有做网站的素材
  • 网站界面要素村网站开设两学一做栏目
  • 临沂免费模板建站河北邢台手机网站建设
  • 企业网站栏目规划的重要性wordpress改变为中文
  • 云服务器怎么上传网站个人建一个网站多少钱
  • 东莞网站建设包装制品flash网站制作
  • 办网站怎么赚钱做二手电脑的网站
  • 大型电子商务网站建设成本旅游网站前台怎么做
  • 深圳网站建设..网站点击图片放大
  • 上海企业扶持政策洛阳400电话洛阳网站seo
  • 保亭县住房城市建设局网站app免费制作平台下载
  • 抚州市建设局网站在网站做商城平台需要哪些资质
  • 潍坊专业网站建设多少钱素马设计官网
  • 深圳网站建设 套餐近期新闻事件
  • 网站开发外包维护合同淘宝客源码程序 爱淘宝风格+程序自动采集商品 淘宝客网站模板
  • 烟台企业网站开发军事新闻最新24小时
  • wordpress网站更换域名网站空间建站
  • 十堰网站建设公司电话网页设计与制作教程江西高校出版社
  • 英文网站seo常州建设局考试网站
  • wordpress 多网站哈尔滨 建网站
  • 免费网站源代码怎么制作网站教程