安全备忘录
安全备忘
信息收集
端口
文件共享服务端口
| 端口号 | 说明 | 攻击反向 |
|---|---|---|
| 21/22/69 | FTP/Tftp | 允许匿名的上传、下载、爆破和嗅探操作 |
| 2049 | Nfs服务 | 配置不当 |
| 139 | Samba服务 | 爆破、未授权、远程代码执行 |
| 389 | Ldap目录访问协议 | 注入、允许匿名访问、弱口令 |
远程连接服务端口
| 端口号 | 说明 | 攻击反向 |
|---|---|---|
| 22 | ssh远程连接 | 爆破、ssh隧道及内网代理转发、文件传输 |
| 23 | Telnet远程连接 | 爆破、嗅探、弱口令 |
| 3389 | RDP远程桌面连接 | Shift后门(适用于win server 2003以下)、爆破 |
| 5900 | VNC | 弱口令爆破 |
| 5632 | PyAnywhere服务 | 抓密码、代码执行 |
Web应用服务端口
| 端口号 | 说明 | 攻击反向 |
|---|---|---|
| 80/443/8080 | 常见Web服务端口 | Web攻击、爆破、对应服务器版本的漏洞 |
| 7001/7002 | WebLogic控制台 | Java反序列化、弱口令 |
| 8080/8089 | Jboss/Resin/Jetty/Jenkins | 反序列化、控制台弱口令 |
| 9090 | WebSphere | Java反序列化、弱口令 |
| 4848 | GlassFish控制台 | 弱口令 |
| 1352 | Lotus domino邮件服务 | 弱口令、信息泄露、爆破 |
| 10000 | Webmin-Web控制面板 | 弱口令 |
数据库服务端口
| 端口号 | 说明 | 攻击反向 |
|---|---|---|
| 3306 | mysql | 注入、提权、爆破 |
| 1433 | MSSQL | 注入、提权、SA弱口令、爆破 |
| 1521 | Oracle | TNS爆破、注入、反弹shell |
| 5432 | PostgreSQL | 爆破、注入、弱口令 |
| 27017/27018 | MongoDB | 爆破、未授权访问 |
| 6379 | Redis | 可尝试未授权访问、弱口令爆破 |
| 5000 | SysBase/DB2 | 爆破、注入 |
邮件服务端口
| 端口号 | 说明 | 攻击反向 |
|---|---|---|
| 25 | SMTP邮件服务 | 邮件伪造 |
| 110 | POP3协议 | 爆破、嗅探 |
| 143 | IMAP协议 | 爆破 |
网络常见协议端口
| 端口号 | 说明 | 攻击反向 |
|---|---|---|
| 53 | DNS域名系统 | 允许区域传送、DNS借此、缓存偷渡、欺骗 |
| 67/68 | DHCP服务 | 劫持、欺骗 |
| 161 | SNMP协议 | 爆破、搜集目标内网信息 |
特殊服务端口
| 端口号 | 说明 | 攻击反向 |
|---|---|---|
| 2181 | Zookeeper | 未授权访问 |
| 8069 | Zabbix | 远程执行、SQL注入 |
| 9200/9300 | Elasticsearch | 远程执行 |
| 11211 | Memcache | 未授权访问 |
| 512/513/514 | Linux Rexec | 爆破、Rlogin登录 |
| 873 | Rsync | 匿名访问、文件上传 |
| 3690 | Svn服务 | Svn泄露、未授权访问 |
| 50000 | SAP Management Console | 远程执行 |
工具使用
sqlmap
部分示例sqlmap命令
| 命令 | 作用 | 示例 |
|---|---|---|
| -u | 指定url | sqlmap -u test.com |
| -r | 指定文件(常用于Burp抓包后保存的文件) | sqlmap -r request.txt |
| -timeout | 设置超时时间,以秒为单位 | –timeout 20 |
| –dbs | 查询所有数据库 | sqlmap -u test.com(-r …) –dbs |
| –current-db | 获取当前数据库 | sqlmap -u test.com(-r …) –current-db |
| –current-user | 获取当前用户 | sqlmap -u test.com –current-user |
| -D | 指定数据库 | sqlmap -u test.com -D testdb |
| –tables | 查询所有表 | sqlmap -u test.com -D test –tables |
| -T | 指定表 | sqlmap -u test.com -D testdb -T testtable |
| –columns | 查询所有字段 | sqlmap -u test.com -D testdb -T testtable –columns |
| -C | 指定字段 | sqlmap -u test.com -D testdb -T testtable-C testcol1,testcol2… |
| –dump | 查询所有值 | sqlmap -u test.com -D testdb -T testtable-C testcol1 –dump |
| –users | 获取所有用户 | sqlmap -u test.com –users |
| –passwords | 获取密码 | sqlmap -u test.com –passwords |
| –level | 指定等级1-5,力度从小到大,速度反之,可不加,默认为1 | sqlmap -u test.com –level 5 |
| –risk | 指定风险等级1-3,默认风险等级为1,此等级在大多数情况下对测试目标无害; 风险等级2添加了基于时间的注入测试;等级3添加了OR测试 | sqlmap -u test.com –risk 2 |
| –is-dba | 检测当前账户是否为管理员 | sqlmap -u test.com –is-dba |
| –roles | 查询数据库用户的角色,用于Oracle | sqlmap -u test.com –roles |
| –referer | 用于伪造referer(lever > 2时才会尝试referer伪造进行注入 ) | sqlmap -u test.com –referer test2.com |
| –sql-shell | 进入sql shell界面,可执行sql语句 | sqlmap -u test.com –sql-shell |
| –os-shell/–os-cmd | 尝试夺权进入shell/cmd,执行命令 | sqlmap -u test.com –os-shell/–os-cmd |
| –file-read | 读取目标服务器文件 | sqlmap -u test.com –file-read “C:\test.exe" |
| –file-write –file-dest | 对服务器写入文件 | sqlmap -u test.com –file-write “./test.exe”(本地) –file-dest “C:\test.exe”(目标) |
| -v | 显示信息详细程度(0-6) | sqlmap -u test.com -v 1 |
| –safe-url | 缓慢访问,以防止过快导致封禁 | sqlmap –safe-url=test.com |
| –delay | 设置请求延迟,以秒为单位 | sqlmap -u test.com –delay 10 |
| –tamper | 调用脚本 | sqlmap -u test.com –tamper test.py |
| -m | 批量测试,指定含有多个链接的文件,每行一个 | sqlmap -m “url.txt” |
一些无需示例的sqlmap命令参数
|
|
sqlmap的-v详解
| 等级 | 解释 |
|---|---|
| 0 | 只显示python错误以及严重信息 |
| 1 | 同时显示基本信息和警告信息 |
| 2 | 同时显示debug信息 |
| 3 | 同时显示注入的pyload |
| 4 | 同时显示HTTP请求 |
| 5 | 同时显示HTTP相应头 |
| 6 | 同时显示HTTP相应页面 |
sqlmap的–tamper内置部分模块
|
|
sqlmap的-r指定文件详解
测试用的test.txt
|
|
|
|
可以对需要测试的地方加上*号,从而不使用-p参数,并指定level为对应等级,如referer测试必须为3及以上才生效
如下为改版后的txt文件
|
|
sqlmap详细指南链接
上面并不完整,详细信息可见sqlmap中文wiki
Nmap
nmap可不带命令直接使用,可单个、多个、范围、网段
|
|
nmap部分示例命令
| 命令 | 作用 | 示例 |
|---|---|---|
| -iL | 指定某个文件里的ip | nmap -iL ip.txt |
| -exclude | 排除某个ip | nmap 192.168.0.1/24 -exclude 192.168.0.22 |
| -excludefile | 排除文件中的ip | nmap 192.168.0.1/24 -excludefile a.txt |
| -p | 指定端口号 | nmap 192.168.0.1/24 -p 22,23,80,443 |
| –traceroute | 路由追踪 | nmap –traceroute 192.168.0.11 |
| -O | 操作系统检测,包含于-A当中 | nmap 192.168.0.1 -O |
| -A |
一些追加nmap参数
-n (不用域名解析)
告诉Nmap 永不对它发现的活动IP地址进行反向域名解析。 既然DNS一般比较慢,这可以让事情更快些。
-R (为所有目标解析域名)
告诉Nmap 永远 对目标IP地址作反向域名解析。 一般只有当发现机器正在运行时才进行这项操作。
--system-dns (使用系统域名解析器)
默认情况下,Nmap通过直接发送查询到您的主机上配置的域名服务器 来解析域名。
-F (快速 (有限的端口) 扫描)
在nmap的nmap-services 文件中(对于-sO,是协议文件)指定您想要扫描的端口。 这比扫描所有65535个端口快得多。 因为该列表包含如此多的TCP端口(1200多),这和默认的TCP扫描 scan (大约1600个端口)速度差别不是很大。如果您用--datadir选项指定您自己的 小小的nmap-services文件 ,差别会很惊人。
-r (不要按随机顺序扫描端口)
默认情况下,Nmap按随机顺序扫描端口 (除了出于效率的考虑,常用的端口前移)。这种随机化通常都是受欢迎的, 但您也可以指定-r来顺序端口扫描。
-S <IP_Address> (源地址哄骗)
在某些情况下,Nmap可能无法确定你的源地址(如果这样,Nmap会给出 提示)。此时,使用-S选项并说明所需发送包的接口IP地址。
nmap的-s系列详解
-sL (列表扫描)
列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机, 不发送任何报文到目标主机。
-sP (Ping扫描)
该选项告诉Nmap仅仅 进行ping扫描 (主机发现),然后打印出对扫描做出响应的那些主机。 没有进一步的测试 (如端口扫描或者操作系统探测)。 这比列表扫描更积极,常常用于 和列表扫描相同的目的。
-sS (TCP SYN扫描)
SYN扫描作为默认的也是最受欢迎的扫描选项,是有充分理由的。 它执行得很快,在一个没有入侵防火墙的快速网络上,每秒钟可以扫描数千个 端口
-sT (TCP connect()扫描)
当SYN扫描不能用时,CP Connect()扫描就是默认的TCP扫描。 当用户没有权限发送原始报文或者扫描IPv6网络时,就是这种情况。 而不是像大多数其他扫描类型那样写入原始数据包,Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫描类型直接发送原始报文。 这是和Web浏览器,P2P客户端以及大多数其它网络应用程序用以建立连接一样的 高层系统调用。它是叫做Berkeley Sockets API编程接口的一部分。
-sU (UDP扫描)
虽然互联网上很多流行的服务运行在TCP 协议上,UDP服务也不少。 DNS,SNMP,和DHCP (注册的端口是53,161/162,和67/68)是最常见的三个。 因为UDP扫描一般较慢,比TCP更困难,一些安全审核人员忽略这些端口。 这是一个错误,因为可探测的UDP服务相当普遍,攻击者当然不会忽略整个协议。它可以和TCP扫描如 SYN扫描 (-sS)结合使用来同时检查两种协议。
-sV (版本探测)
打开版本探测。 您也可以用-A同时打开操作系统探测和版本探测。
-sN; -sF; -sX (TCP Null,FIN,and Xmas扫描)
Null扫描 (-sN),不设置任何标志位(tcp标志头是0)
FIN扫描 (-sF),只设置TCP FIN标志位。
Xmas扫描 (-sX),设置FIN,PSH,和URG标志位,就像点亮圣诞树上所有的灯一样。
-sA (TCP ACK扫描)
这种扫描与目前为止讨论的其它扫描的不同之处在于 它不能确定open(开放的)或者 open|filtered(开放或者过滤的))端口。 它用于发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的。
-sO (IP协议扫描)
IP 协议扫描可以让您确定目标机支持哪些IP协议 (TCP,ICMP,IGMP,等等)。从技术上说,这不是端口扫描 ,既然它遍历的是IP协议号而不是TCP或者UDP端口号。
-sW (TCP窗口扫描)
除了利用特定系统的实现细节来区分开放端口和关闭端口,当收到RST时不总是打印unfiltered, 窗口扫描和ACK扫描完全一样。 它通过检查返回的RST报文的TCP窗口域做到这一点。 在某些系统上,开放端口用正数表示窗口大小(甚至对于RST报文) 而关闭端口的窗口大小为0。因此,当收到RST时,窗口扫描不总是把端口标记为 unfiltered, 而是根据TCP窗口值是正数还是0,分别把端口标记为open或者 closed
该扫描依赖于互联网上少数系统的实现细节, 因此您不能永远相信它。不支持它的系统会通常返回所有端口closed。 当然,一台机器没有开放端口也是有可能的。 如果大部分被扫描的端口是 closed,而一些常见的端口 (如 22, 25,53) 是 filtered,该系统就非常可疑了。 偶尔地,系统甚至会显示恰恰相反的行为。 如果您的扫描显示1000个开放的端口和3个关闭的或者被过滤的端口, 那么那3个很可能也是开放的端口。
--scanflags (定制的TCP扫描)
真正的Nmap高级用户不需要被这些现成的扫描类型束缚。 --scanflags选项允许您通过指定任意TCP标志位来设计您自己的扫描。 让您的创造力流动,躲开那些仅靠本手册添加规则的入侵检测系统!
--scanflags选项可以是一个数字标记值如9 (PSH和FIN), 但使用字符名更容易些。 只要是URG, ACK,PSH, RST,SYN,and FIN的任何组合就行。例如,--scanflags URGACKPSHRSTSYNFIN设置了所有标志位,但是这对扫描没有太大用处。 标志位的顺序不重要。
-sI <zombie host[:probeport]> (Idlescan)
这种高级的扫描方法允许对目标进行真正的TCP端口盲扫描 (意味着没有报文从您的真实IP地址发送到目标)。相反,side-channel攻击 利用僵尸主机上已知的IP分段ID序列生成算法来窥探目标上开放端口的信息。 IDS系统将显示扫描来自您指定的僵尸主机(必须运行并且符合一定的标准)。
nmap的-P详解
-PS [portlist] (TCP SYN Ping)
该选项发送一个设置了SYN标志位的空TCP报文。 默认目的端口为80 (可以通过改变nmap.h) 文件中的DEFAULT-TCP-PROBE-PORT值进行配置,但不同的端口也可以作为选项指定。 甚至可以指定一个以逗号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000), 在这种情况下,每个端口会被并发地扫描。
-PA [portlist] (TCP ACK Ping)
TCP ACK ping和刚才讨论的SYN ping相当类似。 也许您已经猜到了,区别就是设置TCP的ACK标志位而不是SYN标志位。
-PU [portlist] (UDP Ping)
还有一个主机发现的选项是UDP ping,它发送一个空的(除非指定了--data-length UDP报文到给定的端口。
-PR (ARP Ping)
最常见的Nmap使用场景之一是扫描一个以太局域网。 在大部分局域网上,特别是那些使用基于 RFC1918私有地址范围的网络,在一个给定的时间绝大部分 IP地址都是不使用的。 当Nmap试图发送一个原始IP报文如ICMP回声请求时, 操作系统必须确定对应于目标IP的硬件 地址(ARP),这样它才能把以太帧送往正确的地址。 这一般比较慢而且会有些问题,因为操作系统设计者认为一般不会在短时间内 对没有运行的机器作几百万次的ARP请求。
自带nmap脚本使用
-
auth: 负责处理鉴权证书(绕过鉴权)的脚本
-
broadcast: 在局域网内探查更多服务的开启情况,如DHCP DNS SQLServer 等。
-
brute: 针对常见的应用提供暴力破解方式,如HTTP/SMTP等。
-
default: 使用 sC 选项扫描时默认的脚本,提供基本的脚本扫描能力。
-
discovery: 对网络进行更多信息的搜集,如SMB 举、 SNMP查询等。
-
dos: 用于进行拒绝服务攻击
-
exploit: 利用己知的漏洞入侵系统
-
external: 利用第三方的数据库或资源 例如,进行Whois解析。
-
fuzzer: 模糊测试脚本,发送异常的包到目标机,探测出潜在漏洞。
-
intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS IPS 的记录或屏蔽。
-
malware 探测目标机是否感染了病毒 开启后 等信息。
-
safe: 此类与Intrusive相反,属于安全性脚本
-
version: 负责增强服务与版本扫描功能的脚本
-
vuln: 负责检查目标机是否有常见漏洞,如MS08-067
|
|
示例:
|
|
nmap结果的端口状态
Nmap扫出的端口总共存在6种状态
open(开放的)
应用程序正在该端口接收TCP 连接或者UDP报文。发现这一点常常是端口扫描 的主要目标。安全意识强的人们知道每个开放的端口 都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。 非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上那些服务可供使用。
closed(关闭的)
关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。 它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所帮助。 因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。 系统管理员可能会考虑用防火墙封锁这样的端口。 那样他们就会被显示为被过滤的状态,下面讨论。
filtered(被过滤的)
由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应。 这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的。 这使得扫描速度明显变慢。
unfiltered(未被过滤的)
未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。
open|filtered(开放或者被过滤的)
当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。
closed|filtered(关闭或者被过滤的)
该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。
nmap详细指南链接
上面的并不算很详细,部分为摘抄的,详细请见nmap官方中文文档
Metasploit、MSF
meterpreter
getshell后常规命令
|
|
进一步渗透
|
|
开启监听
|
|
msfvenom
|
|
|
|
后渗透、后门
操作系统后门
Cymothoa后门
|
|
成功后
|
|
Persistence后门
会在目标机器上创建文件,容易触发杀毒软件,需提前关闭
|
|
漏洞部分
SQL注入手工
有回显注入/普通注入
sql注入符号
|
|
获取信息参数
|
|
一些常见的万能密码形式
|
|
全流程语句
|
|
布尔注入
一个建议,直接sqlmap或者自己写py脚本,别闲着蛋疼真手测
流程语句
|
|
总而言之,能sqlmap跑就别手工,不作不死
时间盲注
也别手工,除非你真的很闲
|
|
报错注入
|
|
数据库指纹识别
根据报错可以进行判断数据库类型
MySql:
|
|
Oracle:
|
|
MS SQL Server:
|
|
PostgreSQL:
|
|
不同数据库注入语句
mysql数据库
| 释义 | SQL语句 | 其他 |
|---|---|---|
| 当前数据库 | SELECT database() | - |
| 所有数据库 | SELECT schema_name FROM information_schema.schemata | #版本>5.0 |
| - | SELECT distinct(db) FROM mysql.db | #管理员权限才可以执行 |
| 查询表名 | SELECT table_schema,table_name FROM information_schema.tables WHERE table_schema != ‘mysql’ AND table_schema != ‘information_schema’ | - |
| 查询列名 | SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE table_schema != ‘mysql’ AND table_schema != ‘information_schema’ | - |
| 获取版本 | SELECT @@version | - |
| 当前用户 | SELECT user() | - |
| - | SELECT system_user() | - |
| 用户权限 | SELECT grantee, privilege_type, is_grantable FROM information_schema.user_privileges | #用户权限 |
| - | SELECT grantee, table_schema, privilege_type FROM information_schema.schema_privileges | #数据库权限 |
| - | SELECT table_schema, table_name, column_name, privilege_type FROM information_schema.column_privileges | #字段的权限 |
| 列出DBA账户 | SELECT host, user FROM mysql.user WHERE Super_priv = ‘Y’ | - |
| 选择第N行 | SELECT host,user FROM user ORDER BY host LIMIT 1 OFFSET 0 | #行从0开始编号 |
| - | SELECT host,user FROM user ORDER BY host LIMIT 1 OFFSET 1 | #行从0开始编号 |
| 选择第N个字符 | SELECT substr(‘abcd’, 3, 1) | #返回c |
| ASCII值-字符 | SELECT char(65) | #返回A |
| 字符-ASCII值 | SELECT ascii(‘A’) | #返回65 |
| 字符串连接 | SELECT CONCAT(‘A’,‘B’) | #返回AB |
| - | SELECT CONCAT(‘A’,‘B’,‘C’) | #返回ABC |
| 时间睡眠 | SELECT BENCHMARK(1000000,MD5(‘A’)) | - |
| - | SELECT SLEEP(5) | #版本>= 5.0.12 |
Oracle数据库
| 释义 | SQL语句 | 其他 | |
|---|---|---|---|
| 当前数据库 | SELECT global_name FROM global_name | — | |
| - | SELECT name FROM v$database | — | |
| - | SELECT instance_name FROM v$instance | — | |
| - | SELECT SYS.DATABASE_NAME FROM DUAL | — | |
| 所有数据库 | SELECT DISTINCT owner FROM all_tables | — | |
| 查询表名 | SELECT table_name FROM all_tables | — | |
| - | SELECT owner, table_name FROM all_tables | — | |
| 查询列名 | SELECT column_name FROM all_tab_columns WHERE table_name = ‘blah’ | — | |
| - | SELECT column_name FROM all_tab_columns WHERE table_name = ‘blah’ and owner = ‘foo’ | — | |
| 获取版本 | SELECT banner FROM v$version WHERE banner LIKE ‘Oracle%’ | — | |
| - | SELECT banner FROM v$version WHERE banner LIKE ‘TNS%’ | — | |
| - | SELECT version FROM v$instance | — | |
| 当前用户 | SELECT user FROM dual | — | |
| 用户权限 | SELECT * FROM session_privs | #当前权限 | |
| - | SELECT * FROM dba_sys_privs WHERE grantee = ‘DBSNMP’ | #列出用户的权限 | |
| 列出DBA账户 | SELECT DISTINCT grantee FROM dba_sys_privs WHERE ADMIN_OPTION = ‘YES’ | — | |
| 选择第N行 | SELECT username FROM (SELECT ROWNUM r, username FROM all_users ORDER BY username) WHERE r=9 | #第九行 | |
| 选择第N个字符 | SELECT substr(‘abcd’, 3, 1) FROM dual | #第3个字符c | |
| ASCII值-字符 | SELECT chr(65) FROM dual | #返回A | |
| 字符-ASCII值 | SELECT ascii(‘A’) FROM dual | #返回65 | |
| 字符串连接 | SELECT ‘A’ \ | ‘B’ FROM dual | #返回AB |
| 时间睡眠 | SELECT UTL_INADDR.get_host_name(‘10.0.0.1’) FROM dual | #如果反向查询很慢 | |
| - | SELECT UTL_INADDR.get_host_address(‘blah.attacker.com’) FROM dual | #如果正向查询很慢 |
MSSQL数据库
| 释义 | SQL语句 | 其他 |
|---|---|---|
| 当前数据库 | SELECT DB_NAME() | - |
| 所有数据库 | SELECT name FROM master…sysdatabases | - |
| - | SELECT DB_NAME(N) | #N为0,1,2,… |
| 查询表名 | SELECT name FROM master…sysobjects WHERE xtype = ‘U’ | - |
| - | SELECT name FROM someotherdb…sysobjects WHERE xtype = ‘U’ | - |
| 查询列名 | SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = ‘mytable’) | #当前数据库 |
| - | SELECT master…syscolumns.name, TYPE_NAME(master…syscolumns.xtype) FROM master…syscolumns, master…sysobjects WHERE master…syscolumns.id=master…sysobjects.id AND master…sysobjects.name=‘sometable’ | #列出master…sometable的列名称 |
| 获取版本 | SELECT @@version | - |
| 当前用户 | SELECT user_name() | - |
| - | SELECT system_user | - |
| - | SELECT user | - |
| 用户权限 | SELECT permission_name FROM master…fn_my_permissions(null,‘DATABASE’) | #当前数据库权限 |
| - | SELECT is_srvrolemember(‘sysadmin’) | #当前用户权限 |
| 列出DBA账户 | SELECT is_srvrolemember(‘sysadmin’) | #当前用户是否是管理员,是则返回1 |
| 选择第N行 | SELECT TOP 1 name FROM (SELECT TOP 9 name FROM master…syslogins ORDER BY name ASC) sq ORDER BY name DESC | #返回第九行 |
| 选择第N个字符 | SELECT substring(‘abcd’, 3, 1) | #返回c |
| ASCII值-字符 | SELECT char(0×41) | #返回A |
| 字符-ASCII值 | SELECT ascii(‘A’) | #返回65 |
| 字符串连接 | SELECT ‘A’ + ‘B’ | #返回AB |
| 时间睡眠 | WAITFOR DELAY ‘0:0:5’ | #睡眠5秒 |
PostgreSQL数据库
| 释义 | SQL语句 | 其他 | |
|---|---|---|---|
| 当前数据库 | SELECT current_database() | - | |
| 所有数据库 | SELECT datname FROM pg_database | - | |
| 查询表名 | SELECT relname, A.attname FROM pg_class C, pg_namespace N,pg_attribute A, pg_type T WHERE (C.relkind=‘r’) AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum>0) AND (NOT A.attisdropped) AND (N.nspname ILIKE ‘public’) | - | |
| 查询列名 | SELECT c.relname FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN (‘r’,") AND n.nspname NOT IN (‘pg_catalog’, ‘pg_toast’) AND pg_catalog.pg_table_is_visible(c.oid) | - | |
| 获取版本 | SELECT version() | - | |
| 当前用户 | SELECT user; | - | |
| - | SELECT current_user; | - | |
| - | SELECT session_user; | - | |
| - | SELECT usename FROM pg_user; | - | |
| - | SELECT getpgusername(); | - | |
| 用户权限 | SELECT usename, usecreatedb, usesuper, usecatupd FROM pg_user | - | |
| 列出DBA账户 | SELECT usename FROM pg_user WHERE usesuper IS TRUE | - | |
| 选择第N行 | SELECT usename FROM pg_user ORDER BY usename LIMIT 1 OFFSET 0 | #从0行开始编号 | |
| - | SELECT usename FROM pg_user ORDER BY usename LIMIT 1 OFFSET 1; | - | |
| 选择第N个字符 | SELECT substr(‘abcd’, 3, 1) | #返回c | |
| ASCII值-字符 | SELECT chr(65) | #返回A | |
| 字符-ASCII值 | SELECT ascii(‘A’) | #返回65 | |
| 字符串连接 | SELECT ‘A’ \ | ‘B’ | #返回AB |
| 时间睡眠 | SELECT pg_sleep(10) | #睡眠10秒 | |
| - | SELECT sleep(10) | #创建自定义睡眠 |
WAF绕过,字符过滤
当空格被过滤后,可通过以下方法绕过:
|
|
过滤union\select
|
|
过滤引号
|
|
过滤=
|
|
过滤逗号
|
|
过滤注释符
|
|
过滤where
|
|
过滤limit
|
|
过滤group by
|
|
过滤select
|
|
过滤hex
|
|
过滤substr
|
|
过滤and,or
|
|
以上大部分抄至农夫安全的,我也懒得自己找来写,主要他那个分的太多,搜的好费劲,所以我拿来整合一下,希望TQ大人有大量,别搞我
SQL注入总结
很多我没写,觉得没必要,也是我懒,直接sqlmap跑就行了,手工太累人了,再说,sqlmap都跑不出来的,那手工多半也难说,当然,这是写给我自己的备忘,所以我懒得写,写些常见的放上面,详细的可以看看农夫安全的,是真不错,顺带引用TQ说的一个案例,一个SQL注入手工精通的找工作,被用工具的比下去了,记那么多,也不知道有没有sqlmap效率高,内容广,毕竟那是个开源项目,集思广益,技术时长更新,可你的技术多久没更新了呢(
工具备忘
一些好用的工具备忘
扫描类
单兵工具
-
One-Fox单兵工具库
来源:狐狸说安全(公众号)
本地转存链接:https://pan.baidu.com/s/1jHZpahZ7JENA-IUJSB820g?pwd=h3vq
-
Yakit
来源:github
源站:https://github.com/yaklang/yakit
信息收集
- Wappalyzer
浏览器插件,信息收集,目录中间件操作系统扫描
webshell工具
包含于One-Fox单兵工具库中
TRAH