Python 简单解码 IP 头
0x00 解码IP头
Windows上运行时要以管理员身份运行
代码可以解码IP头统计通信信息并保存到文本,同时统计数量
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import socket
import os
import sys
import time
import struct
from ctypes import *
host = "10.22.114.114"
tcp_num = 0
udp_num = 0
icmp_num = 0
class IP(Structure):
_fields_ = [
("ihl", c_ubyte,4),
("version", c_ubyte,4),
("tos", c_ubyte),
("len", c_ushort),
("id", c_ushort),
("offset", c_ushort),
("ttl", c_ubyte),
("protocol_num",c_ubyte),
("sum", c_ushort),
("src", c_ulong),
("dst", c_ulong)
]
def __new__ (self,socket_buffer=None):
return self.from_buffer_copy(socket_buffer)
def __init__ (self,socket_buffer=None):
self.protocol_map = {1:"ICMP",6:"TCP",17:"UDP"}
self.src_address = socket.inet_ntoa(struct.pack("<L",self.src))
self.dst_address = socket.inet_ntoa(struct.pack("<L",self.dst))
try:
self.protocol = self.protocol_map[self.protocol_num]
except:
self.protocol = str(self.protocol_num)
if os.name == "nt":
socket_protocol = socket.IPPROTO_IP
else:
socket_protocol = socket.IPPROTO_ICMP
sniffer = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket_protocol)
sniffer.bind((host,0))
sniffer.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
if os.name == "nt":
sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
try:
while True:
raw_buffer = sniffer.recvfrom(65565)[0]
ip_header = IP(raw_buffer[0:32])
msg = "Protocol: %-5s %-15s -> %s" % (ip_header.protocol,ip_header.src_address,ip_header.dst_address)
if ip_header.protocol == "TCP":
tcp_num = tcp_num + 1
elif ip_header.protocol == "UDP":
udp_num = udp_num + 1
elif ip_header.protocol == "ICMP":
icmp_num = icmp_num + 1
num = "TCP:%d\tUDP:%d\tICMP:%d" % (tcp_num,udp_num,icmp_num)
# print num
with open("data.txt","a+") as f:
f.write(msg+"\n")
sys.stdout.write(num+"\r")
sys.stdout.flush()
time.sleep(0.5)
print
#CTRL-C
except KeyboardInterrupt:
if os.name == "nt":
sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_OFF)
0x01 结果
SSRF
0x00 什么是SSRF
SSRF(Server-Side Request Forgery:服务请求伪造)是一种由攻击者构造,从而让服务端发起请求的一种安全漏洞,它将一个可以发起网络请求的服务当作跳板来攻击其他服务,SSRF的攻击目标一般是内网。
当服务端提供了从其他服务器获取数据的功能(如:从指定URL地址获取网页文本内容、加载指定地址的图片、下载等),但是没有对目标地址做过滤与限制时就会出现SSRF。
Python 的编码问题
0x00 几个编码函数
* ord(x)
将字符转换为10进制整数(0~255之间) #ord('a')==>97
* chr(x)
将10进制整数(0~255之间)转换为字符 #chr(97)==>'a',chr(0x61)==>'a'
* b2a_hex(x)
将字符转换为对应的16进制 #import binascii;binascii.b2a_hex('a')==>'61'
* a2b_hex(x)
将16进制转换为对应的字符 #import binascii;binascii.a2b_hex('61')==>'a'
* hex(x)
将10进制整数转换为对应的16进制 #hex(16)==>'0x10'
* oct(x)
将10进制整数转换为对应的8进制 #oct(9)==>'011'
0x01 设置为utf-8
- 在py文件开头设置
#!/usr/bin/env python
#-*- coding: utf-8 -*-
或:
#coding=utf8
- 永久编码(推荐)
可以在python安装路径下的Lib\site-packages下新建文件sitecustomize.py文件,内容如下:
#coding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# 此方法修改了python环境,设置系统默认编码,永久有效
0x03 编码转换
python默认unicode为中间编码,所以无论是何种编码,解码时默认都解码为unicode
more...sqlmapapi 的简单使用
0x00 关于sqlmapapi.py
当利用sqlmap时一次只能测试一个url,效率很低,而用sqlmapapi就可以实现批量
0x01 用于交互的方法
在sqlmap/lib/utils/api.py中:
more...CSRF 漏洞
0x00 概念
当你登陆某个网站时,通常浏览器与网站都会形成一个会话,在会话没有结束时你可以执行发表文章、发邮件、删除文章等操作,若会话结束,你再操作的话会提示你会话已经结束,请重新登陆。
more...SQL 注入之防御
0x00 要做的事
也就是找到注入点然后修复
0x01 防御方法
- 使用预编译语句绑定变量(比如php的mysqli、pdo)
<?php
//预编译
$mysqli = new mysqli("localhost","root","123456","share");
$mysqli->query("set names utf8");
$sql = "INSERT INTO test (name,sex,age) VALUE(?,?,?)";
$s = $mysqli->prepare($sql);
//绑定参数
$name = "Tom";
$sex = "M";
$age = 23;
$s->bind_param("ssi",$name,$sex,$age);//ssi的意思是字符、字符、整型
//执行
$result = $s->execute();
var_dump($result);
$s->close();
?>
- 使用存储过程(这里以SQLServer举例)
--如果存在名为get_student_msg(相当于函数)的存储过程则删除
IF EXISTS (SELECT name FROM sysobjects WHERE name='get_student_msg' AND type='p')
DROP PROCEDURE get_student_msg
CREATE PROCEDURE get_student_msg --创建存储过程
@name VARCHAR(20) --声明全局变量
AS
BEGIN
SELECT * from info
WHERE name=@name
END
GO
--创建好存储过程后在其他地方直接使用函数并传参就行了
EXEC get_student_msg 'xiaoli'
- 使用转义函数
如:addslashes()和mysql_real_escape_string()
在php.ini设置auto_prepend_file自动在脚本执行前在首部加载文件
<?php
//简单过滤
$filter = array(&$_GET,&$_POST,&$_COOKIE);
foreach ($filter as $key => $value){
foreach ($value as $k => $v){
$filter[$key][$k] = mysql_real_escape_string($v);
}
}
?>
检查数据类型
more...
SQL 注入之宽字节注入(MySQL)
0x00 应用场景
在注入时通常会使用单引号、双引号等特殊字符。在应用中,通常为了安全,开发者会开启php的magic_quotes_gpc,或者使用addslashes、mysql_real_escape_string等函数对客户端传入的参数进行过滤,则注入的单引号或双引号就会被"\"
转义,但是,如果服务端的数据库使用的是GB2312、GBK、GB18030等宽字节的编码时,则依然会造成注入。
SQL 注入之基于时间的注入(MySQL)
0x00 特点
当页面存在注入,但是没有显示位且不管怎么测试返回页面都没有变化,此时可以使用基于时间的盲注进行注入。
其实只要存在SQL注入就可以使用基于时间的盲注,利用范围比较广泛,但是可能受到网络带宽等因素的影响。
0x01 利用方式
整型注入的话可以直接: ?id=if(1=1,sleep(2),1)
字符型的话需要闭合: ?id=2' and if(1=1,sleep(2),1) and '1
0x02 相关函数
if(条件, 值1, 值2)
more...
当条件为真时返回值1,条件为假时返回值2
SQL 注入之布尔型注入(MySQL)
0x00 特点
当页面存在注入,但是没有显示位,且没有用echo "mysql_error()"输出错误信息时可以用,
它一次只能猜测一个字节,速度慢,但是只要存在注入就能用
0x01 利用方式
用and连接前后语句:www.xxx.com/aa.php?id=1 and (注入语句) --+
根据返回页面是否相同来得到数据
0x02 注入步骤
找到注入点,判断闭合字符
more...
Previous Page
13 of 18
Next Page