Skip to content

some classical ways to attack a website

sql injection

SQL注入是一种常见的网络攻击技术,攻击者通过将恶意SQL代码插入到输入字段中,绕过应用程序的安全措施,从而直接与数据库交互。这种攻击可以导致数据泄露、数据篡改,甚至是控制整个数据库。以下是一些经典的SQL注入攻击方法:

1. 注入恒为真的语句

通过注入恒为真的语句,来跳过用户名或者密码的验证

' OR 1=1 #
这个简单的注入代码通过在WHERE子句中引入一个始终为真的条件(1=1),可以绕过身份验证。

2. 联合查询注入(UNION注入)

通过union来联合其他句子一起查询

' UNION SELECT username, password FROM users #
这个注入代码可以在原始查询的结果中插入用户表中的用户名和密码。

3. 盲注

通过向数据库发送不同的布尔条件来推断数据库的信息。这种方法不需要数据库返回错误信息,也就是说可以在无回显的情况中使用

' or (ascii(substr(database(), 1, 1))>0, sleep(0), sleep(2))
通过程序停顿的时间来判断是否条件是否成功,从而不断把username的内容都扒出来。

4. 堆叠查询

这种情况不太容易发生,用php语言做例子,想要一次性执行多条sql语句是需要特定的函数的,但是一般人为了安全考虑不会这么做。但是一但出现就意味着我们可以注入sql语句,达到RCE的效果,危害极大。

'; DROP TABLE users; --
这个注入代码会删除名为“users”的表。

5. 二次注入

这种方法利用存储在数据库中的不安全数据,攻击者通过注入恶意代码,等待这些数据被再次使用时触发攻击。

6. 绕过检测

网站为了防止这些sql注入的攻击,会用过不同的方法来检测一些敏感的关键词,而攻击者需要想办法进行绕过。最典型的,如果是直接匹配字符串,那么就尝试用同义词替换,比如or改为||。如果是检测到敏感字符串并删除,那么可以采用套娃的形式,例如oorr,这样删除了中间的or之后剩下的字符还是能拼成or。同时还可以考虑用超长字符串来躲避正则匹配的检查。

deserialization

在我们传输参数给服务器的时候,会先把传输的信息进行序列化,然后服务器将这些参数反序列化,如果这个反序列化的函数不安全的话,就可能被攻击者传入的恶意信息攻击,甚至可能造成RCE。

git leaks & file leaks

通过dirsearch -u http:来查看网页上是否有危险的文件。比如.git文件/.vscode文件/...这些文件中都有很多隐藏信息,比如一些密钥、用户信息等等。

Arbitrary File Reading

有些php脚本在include文件的时候可能会有安全隐患,我们可以尝试读取一些敏感的文件,来观察网站的反馈,比如我们尝试读取/etc/passwd,如果网站确实显示了这个内容,那么就说明我们的任意文件读攻击成功了。我们可以尝试读取一些敏感的文件。但是要注意,哪怕我们能够进行任意文件读,我们也只能读取我们的权限范围内能查看的文件。 而且非常值得一提的是,php的包含文件,和python一样,会把文件给执行一遍。这意味这,如果我们在网站某处上传了恶意的文件,然后又利用任意文件读这种漏洞去执行了我们的文件,那么就会导致RCE,相当于我们基本就控制了这个网站。