scanf/fscanf/vscanf 在调shellcode的时候的问题

今天在调shellcode的时候遇到了一个小问题,shellcode的逻辑功能没有任何问题,但是用的时候无法执行。在OD里面调的时候发现,shellcode的后半段变成了cccc… 于是分析了下代码,发现是shellcode中有个bit是0b,然后在读取完之后变成了00cccc char password[1024]; FILE * fp; if(!(fp=fopen(“password.txt”,”rw+”))) { printf(“test\n”); exit(0); } fscanf(fp,”%s”,password); 后面password会导致溢出 shellcode从password.txt中传入,最后发现是fscanf的问题导致的 上网看了下fscanf的源码发现和scanf一样都是调用vscanf,然后当以“%s”读取字符串的时候会把某些字符解析成了有含义的符号: Hex Dec Ctrl Name 0x09 9 ^I Tab 0x0A 10 ^J Line Feed 0x0B 11 ^K Verticle Feed 0x0C 12 ^L Form Feed 0x0D 13 ^M Carriage Return 0x1A 26 ^Z End of File 0x20 32 Space 神奇的发现读取“00”的时候并没有问题,然后出了%s,其他几个格式化字符: %d — […]

windows下获取dll中函数地址的方法

在windows下面调试shellcode的时候需要查找一些函数的地址,这里总结下可以用的方法: 1、微软的depents工具: http://www.dependencywalker.com/ 这个在xp上应该没问题 但是在64位win7之后的系统会报错,github上有人写了新的工具解决了这个问题(https://github.com/lucasg/Dependencies) 但是我这个软件读出来的地址不是正确的函数地址,具体原因未知,待测试   2、在调试的时候直接在OD中查找函数地址 使用ctrl+G 直接搜索函数名,如果有该函数会直接跳转到函数对应的地址上 这里可能会有几个问题: 1、ctrl+G 要在loadDLL之后执行,不然没有加载dll,会找不到对应函数 2、win7之后启用ASLR,每次的地址会随机加载(dll的基址随机)————>目前还没遇到这个问题   3、把需要使用的api函数写个简单的c++程序,然后调试获取到最终函数的调用地址   随时更新

从汇编生成shellcode的n种方法

第一种,添加asm代码到c中,然后gcc编译生成可执行代码,最后objdump: void main() { asm{ … } } 太麻烦,这里就不详细介绍了,基本上包含在第二种方法中   第二种,直接用NASM或者GAS生成elf文件,然后objdump: nasm -f elf print.asm ld -m elf_i386 -o print print.asm as test.asm -o test.o ld test.asm -o test objdump生成shellcode: objdump -d print2 | grep “^ ” | cut -d$’\t’ -f 2 | tr ‘\n’ ‘ ‘ | sed -e ‘s/ *$//’ | sed -e […]

GDB 调试dumped core文件

在调试堆栈溢出的时候,用gdb加载文件运行的时候的地址会和直接运行的地址有出入,这个时候我们需要先在没有gdb的情况下运行程序,程序崩溃会生成core文件 然后我们用gdb filename core进行调试 我在ubuntu上测试的时候会发现当前目录里面并没有生成core文件,在研究一番后发现需要修改/proc/sys/kernel/core_pattern 文件 然后我们用root来执行下面命令: $> mkdir -p /tmp/cores $> chmod a+rwx /tmp/cores $> echo “/tmp/cores/core.%e.%p.%h.%t” > /proc/sys/kernel/core_pattern 然后在运行文件,然后会在/tmp/cores目录下面生成core文件: ➜ challenge11 git:(master) ✗ ll /tmp/cores total 100K -rw——- 1 kow kow 516K Jan 15 00:07 core.challenge11.25425.ubuntu.1516003636 然后就可以调试了: ➜ challenge11 git:(master) ✗ gdb challenge11 /tmp/cores/core.challenge11.25425.ubuntu.1516003636 GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Copyright (C) 2016 Free […]

GDB useful addons or plugins

Helpful GDB Plugins: PEDA PEDA – Python Exploit Development Assistance for GDB https://github.com/longld/peda GEF GDB Enhanced Features https://github.com/hugsy/gef Lisa.py  LLDB Lisa.py: An Exploit Dev Swiss Army Knife. https://github.com/ant4g0nist/lisa.py Voltron Voltron is an extensible debugger UI toolkit written in Python. https://github.com/snare/voltron   How to use GDB debug: http://heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/Debug.html gdb命令笔记 gdb peda常用指令

some interesting linux command

1. Supervise command (run every 2s) watch “ls -larth” 2. Kill program using one port sudo fuser -k 8000/tcp 3. Limit memory usage for following commands ulimit -Sv 1000 # 1000 KBs = 1 MB ulimit -Sv unlimited # Remove limit 4. Rename selected files using a regular expression rename ‘s/\.bak$/.txt/’ *.bak 5. Get full […]

漏洞测试平台——SQLi-labs

SQLi-labs是个专门用来学习SQL注入的开源漏洞测试平台,基于php+mysql开发,所以里面涉及的SQL注入都是mysql语法。 下载的地址是https://github.com/Audi-1/sqli-labs 下载安装按照readme里面要求即可,这里不多废话。下面是每个题目的具体分析: 1、error based string sqli 首先是源码: 我们可以看到当mysql语句正确执行的时候,应用会打印结果,但是没有正确执行的时候会打印错误,所以这里我们并不能像有回显位注入那样直接注入mysql语句。我们需要利用报错信息进行注入。 原理其实比较简单,一般都是利用某函数X    比如X(exp)  mysql函数在执行的时候会先执行函数里面的exp,获取返回值,然后再把exp的返回值作为参数给X进行执行,当exp的返回值不符合X的传参要求时,会导致query错误,打印出错误。 直接贴上一个老毛子整理的error based的cheat sheet:https://blackfan.ru/mysql_game/ 构造exp:‘|polygon((select*from(select name_const(version(),1))x))%23 2、error based integer sqli 原理同一,只不过是注入点的变量是integer exp:|polygon((select*from(select name_const(version(),1))x))%23 3、注入点变量外有单引号和括号,在exp中添加对应的符号即可: exp:’)|polygon((select*from(select name_const(version(),1))x))%23 4 、双引号加括号的error based 注入,变下exp即可: exp: “)|polygon((select*from(select name_const(version(),1))x))%23 5、string 单引号注入同第一题 exp: ‘ |polygon((select*from(select name_const(version(),1))x))%23 6、string 双引号注入 exp: “|polygon((select*from(select name_const(version(),1))x))%23 7、我们先看下源码: error_reporting(0); 这句话表示不再显示具体错误,只会显示“You have an error in your SQL syntax“,所以这里我们不能用前几题的error based注入,根据标题的提示“dump […]

从零开始学安全

最近投了一堆安全的summer intern,结果不是被拒就是杳无音讯,一个oa或者是电面的机会都没有,自己也实在提不起兴趣找SDE的工作。然后回顾自己去年一年,在学校挣扎着完成课程和在实验室写写代码,安全方面似乎没有丝毫的进步。 我发现自己总是在一件事情上不能坚持很长时间,还总是给自己找一堆事情来做,显得自己很牛逼,结果最后很多事情都做不好。 想来想去,发现就是自己还是太浮躁了,口口声声说自己对什么什么感兴趣,结果都是嘴上吹牛逼说说几个名词。如果要让我不借助网络来解释某个东西的原理,用中文十有八九都说不清楚,用英文就更不用说了。 眼看着自己还有一年就要毕业了,虽然说找到一个工作不是什么难事,但是自己浑浑噩噩的样子自己实在看不过去,这里自己做一个小小的计划,踏踏实实从零开始学习安全,然后自己的学习过程都用博客进行记录。对于遇到的每个问题都仔细研究,深入了解原理,learn it and hack it。 作为一个开篇的文章应该有个详细的计划,这里就罗列一下: 1、漏洞测试平台 2、CVE web类漏洞 3、bug bounty 4、自动化脚本 以上内容会不定时更新